nuclei: varredura de vulnerabilidades por templates em um pentest
nuclei · MIT
O nuclei envia requisições definidas por templates YAML e reporta os matches. Não é um crawler nem um fuzzer — ele verifica condições específicas e conhecidas: um CVE com assinatura confiável, um diretório .git exposto, uma credencial padrão, um header mal configurado. O valor está inteiramente no corpus de templates, que é mantido pela comunidade e é grande.
Instalação
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
nuclei -update-templates Os templates ficam em ~/.local/nuclei-templates e atualizam independentemente do binário. Atualize-os antes de cada engajamento, não uma vez por trimestre.
Comandos principais
# varre uma lista de hosts vivos
nuclei -l live.txt -silent
# só o que você de fato reportaria
nuclei -l live.txt -severity critical,high,medium -silent
# um conjunto específico de templates
nuclei -l live.txt -tags cve,exposure -silent
nuclei -l live.txt -t http/exposures/ -silent
# JSONL para importar
nuclei -l live.txt -severity critical,high -jsonl -o nuclei.jsonl
# seja educado com produção
nuclei -l live.txt -rate-limit 20 -concurrency 10 -timeout 10 Saída
{"template-id":"git-config","info":{"name":"Git Config Exposure","severity":"medium",
"classification":{"cve-id":null,"cwe-id":["cwe-200"]}},
"type":"http","host":"https://example.com","matched-at":"https://example.com/.git/config",
"timestamp":"2026-08-29T10:04:11Z"} O matched-at é o campo que importa para o relatório — é a URL exata que você reverifica à mão.
Onde ele entra no Tandera
O nuclei roda na fase de active_scan apenas do recon_web_full. É excluído do recon_web_lite por design: aquele fluxo tem teto de risco NonIntrusive e o nuclei envia payloads reais.
O Tandera também traz um catálogo de findings nuclei.yaml (code/src/tandera-finding-catalog/catalog/nuclei.yaml) que mapeia IDs de template para definições canônicas de finding. É esse mapeamento que transforma um git-config disparado em doze hosts em um único finding deduplicado com doze evidências, em vez de doze linhas num relatório.
Usando em um pentest
Limite a taxa contra produção. A concorrência padrão vai gerar um pico que o SOC do cliente percebe. -rate-limit 20 é uma posição de abertura razoável; acorde-a com o cliente antes e registre na seção de metodologia.
Templates têm falsos positivos, e a responsabilidade é sua. Todo match do nuclei vai no relatório sob a sua assinatura, não a do autor do template. Reverifique tudo que pretende reportar — o matched-at dá a requisição exata para reproduzir.
Severidade é a opinião do autor do template. Ela reflete a classe do problema, não o risco para este cliente neste host. Reavalie contra exposição e explorabilidade reais antes de chegar ao entregável.
Não rode o corpus inteiro por padrão. Milhares de templates contra uma lista grande de hosts é lento e ruidoso. Comece com -tags cve,exposure,misconfig e amplie deliberadamente.