nuclei: escaneo de vulnerabilidades basado en plantillas en un pentest
nuclei · MIT
nuclei envía solicitudes definidas por plantillas YAML y reporta los matches. No es un crawler ni un fuzzer — comprueba condiciones específicas y conocidas: un CVE con una firma fiable, un directorio .git expuesto, una credencial por defecto, una cabecera mal configurada. El valor está por completo en el corpus de plantillas, que mantiene la comunidad y es grande.
Instalación
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
nuclei -update-templates Las plantillas viven en ~/.local/nuclei-templates y se actualizan independientemente del binario. Actualízalas antes de cada engagement, no una vez por trimestre.
Comandos principales
# escanea una lista de hosts vivos
nuclei -l live.txt -silent
# solo lo que de verdad reportarías
nuclei -l live.txt -severity critical,high,medium -silent
# un conjunto específico de plantillas
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
# sé cortés con producción
nuclei -l live.txt -rate-limit 20 -concurrency 10 -timeout 10 Salida
{"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"} matched-at es el campo que importa para el informe — es la URL exacta que reverificas a mano.
Dónde encaja en Tandera
nuclei se ejecuta en la fase de active_scan solo de recon_web_full. Se excluye de recon_web_lite por diseño: ese flujo tiene un techo de riesgo NonIntrusive y nuclei envía payloads reales.
Tandera también incluye un catálogo de findings nuclei.yaml (code/src/tandera-finding-catalog/catalog/nuclei.yaml) que mapea IDs de plantilla a definiciones canónicas de finding. Ese mapeo es lo que convierte un git-config disparado en doce hosts en un único finding deduplicado con doce evidencias, en lugar de doce filas en un informe.
Uso en un pentest
Limita la tasa contra producción. La concurrencia por defecto generará un pico que el SOC del cliente nota. -rate-limit 20 es una posición de apertura razonable; acuérdala con el cliente de antemano y anótala en la sección de metodología.
Las plantillas tienen falsos positivos, y la responsabilidad es tuya. Cada match de nuclei va al informe bajo tu firma, no la del autor de la plantilla. Reverifica todo lo que pretendas reportar — matched-at te da la solicitud exacta para reproducir.
La severidad es la opinión del autor de la plantilla. Refleja la clase del problema, no el riesgo para este cliente en este host. Reevalúa contra exposición y explotabilidad reales antes de que llegue al entregable.
No ejecutes el corpus completo por defecto. Miles de plantillas contra una lista grande de hosts es lento y ruidoso. Empieza con -tags cve,exposure,misconfig y amplía deliberadamente.