Você gerou o app com IA, funciona, está no ar. E segurança? Ninguém olhou. Este material ensina a instalar uma skill open source da Cloudflare que transforma seu agente de código em auditor de segurança — e a interpretar o que ele devolve.
github.com/cloudflare/security-audit-skill.O que você vai ter no fim
- A skill instalada no seu agente (Claude Code, Codex, Cursor ou qualquer um que suporte skills e sub-agentes).
- Uma auditoria completa do seu projeto, em 6 fases, com relatório em Markdown e JSON.
- Critério pra decidir o que corrigir primeiro sem sair correndo atrás de falso positivo.
Pré-requisitos
- Node.js instalado (a skill usa validadores em Node pra checar o JSON de achados).
- Um agente de código que suporte tool use e sub-agentes em paralelo — Claude Code é o caso testado aqui.
- Seu projeto num diretório local (pode ser o monorepo inteiro).
Passo 1 — Instalar a skill
O instalador oficial é o npx skills. No diretório do seu projeto:
--skill security-audit
Quer a skill disponível em todos os projetos da sua máquina? Use --global:
O que acontece: o instalador baixa a pasta skills/security-audit/ do repositório (o SKILL.md, os guias RECONNAISSANCE.md e HUNTING.md, os catálogos de classes de ataque e os validadores JSON) e registra no diretório de skills do seu agente.
/security-audit. Se o comando aparecer no autocomplete, está instalado.Passo 2 — Rodar a primeira auditoria
A skill dispara por linguagem natural. Estes três pedidos ativam o fluxo completo:
Em português funciona igual — o gatilho é a intenção, não a frase exata. Exemplo real que usamos num app Nuxt + Hono na Cloudflare:
Passo 3 — Entender as 6 fases (o que o agente está fazendo)
Enquanto roda, você vai ver o agente passar por seis etapas. Saber o que cada uma faz evita interromper no meio.
- Reconhecimento — mapeia a arquitetura e grava
architecture.md+coverage-ledger.json(o "livro-razão" do que foi olhado). - Caça guiada por cobertura — despacha "hunters" (sub-agentes) por classe de ataque: web/protocolos, cliente, supply chain, cloud, RPC, exaustão de recursos, isolamento de dados, LLMs, memória, desktop/mobile… Cada checagem entra no ledger, inclusive o que não foi coberto.
- Validação de candidatos — um verificador novo, sem contexto do hunter, tenta derrubar cada achado. Isso é o que corta falso positivo.
- Saída estruturada — cada veredito vai pro
findings.json, validado contra um schema. - Verificação independente do registro — confere as afirmações do JSON contra o código; mudou algo material, re-verifica.
- Relatório neutro — gera
REPORT.md,FINDINGS-DETAIL.mdeNEEDS-VALIDATION.md.
./src).Passo 4 — Ler o relatório sem pânico
Abra REPORT.md primeiro. Cada achado tem um de três vereditos:
| Veredito | Significa | O que fazer |
|---|---|---|
confirmed | Rastro completo no código, resultado delimitado | Corrigir. É real. |
needs_validation | Faltou um fato pra fechar (ex.: config de produção) | Você responde a pergunta e re-roda só esse item |
rejected | Candidato derrubado na validação | Ignorar — está lá por transparência |
Exemplo real do que a skill devolveu num app nosso (resumido):
Confirmed
Header confiável para identidade do ator
- Local: apps/api/src/routes/arsenal/index.ts
- Um endpoint público lia
x-caller-profile-iddo request para atribuir autoria. Um cliente externo autenticado poderia se passar por outro perfil. - Correção: derivar o ator só da sessão autenticada.
Needs validation
Rate limit por chave de API
- O plugin está habilitado, mas a implementação depende de
comparação
= NULLque o banco não resolve. Confirmar em staging.
confirmed por commit, rode os testes, e re-rode a auditoria na pasta afetada. Segurança é iteração, não big bang.Passo 5 — Transformar em rotina
- Antes de cada deploy grande:
find security vulnerabilities in ./apps/api. - Depois de adicionar autenticação, pagamento ou upload: auditoria completa.
- Guarde os relatórios (
./audits/AAAA-MM/) — comparar doisfindings.jsonmostra se você está melhorando.
Erros comuns
- "A skill não ativou" — o agente precisa suportar skills. Confirme com o comando explícito (
/security-auditno Claude Code) em vez de depender do gatilho automático. - Rodou em produção — nunca. Clone local,
.envde desenvolvimento, banco descartável. - Tratou
needs_validationcomo bug — não é. É pergunta aberta. Responda ou descarte com justificativa. - Ignorou o
coverage-ledger.json— ele lista o que não foi auditado. Buraco de cobertura é achado também.
O que fazer nos próximos 30 minutos
A skill acha; quem corrige é você (com o agente). Não feche esta página sem fechar o primeiro ciclo — ele é curto de propósito:
- Instale a skill — um
git clonena pasta de skills do seu agente. - Rode na pasta mais perigosa do seu app: a que tem login, pagamento ou upload. Não é o projeto inteiro. É uma pasta.
- Abra o
REPORT.mde escolha UMconfirmed. O primeiro da lista serve. - Corrija só esse, rode os testes, faça o commit.
- Re-rode a auditoria naquela pasta e veja o achado sumir.
Cinco passos, um problema real a menos no seu app. É assim que segurança deixa de ser "um dia eu olho" e vira rotina.
REPORT.md desse primeiro ciclo. Daqui a um mês, rodar de novo e comparar os dois é o jeito mais honesto de ver que você evoluiu como dev — não é sensação, é diff.E quando o relatório apontar pro seu login — vai apontar, é onde mais aparece confirmed em app de vibe coder —, volte aqui no arsenal: é o próximo terreno que a gente vai cobrir em detalhe.