Nuclei como comprobación continua de superficie de ataque, no como escaneo puntual
Nuclei es lo bastante rápido como para pasarlo cada noche por toda tu superficie externa. El valor está en la selección de plantillas, en la lista de objetivos y en el diff entre ejecuciones, no en el número bruto de hallazgos.
Casi todo el escaneo de vulnerabilidades es un evento trimestral que produce un PDF. El problema de un evento trimestral es que la exposición que importaba apareció un martes de la tercera semana y se explotó el jueves.
Nuclei cambia esa economía. Es un escáner guiado por plantillas, tan rápido que unos miles de hosts contra unos miles de plantillas terminan en minutos, lo que significa que puedes ejecutarlo cada noche y mirar solo lo que ha cambiado.
Las plantillas son el producto
Nuclei en sí es un motor de peticiones. Lo que hace está definido por completo en plantillas YAML, y el repositorio de la comunidad trae decenas de miles: CVE conocidos con firma remota fiable, paneles expuestos, credenciales por defecto, configuraciones incorrectas, fugas de información, registros DNS susceptibles de secuestro.
Ejecutarlas todas contra todo es un error. Tres problemas: las ruidosas generan falsos positivos que destruyen la confianza en la herramienta, algunas son genuinamente intrusivas, y un puñado de las plantillas de la comunidad envía payloads que no querrías mandar a un sistema en producción sin leerlos antes.
Nosotros ejecutamos un conjunto curado:
nuclei -l objetivos.txt \
-t http/cves/ -t http/exposed-panels/ -t http/misconfiguration/ \
-t dns/ -t ssl/ \
-severity critical,high,medium \
-etags fuzz,dos,intrusive \
-rl 50 -c 25 \
-jsonl -o ejecucion-$(date +%F).jsonl
-etags fuzz,dos,intrusive es la línea importante. -rl y -c evitan que machaques los límites de tasa del cliente y dispares su WAF.
Lee al menos una vez las plantillas que habilitas. Una plantilla es un fichero que describe peticiones a enviar a tu entorno de producción; tratarlo como una caja negra es el mismo error que curl | bash.
La lista de objetivos es la otra mitad
Nuclei solo prueba lo que le das. La lista tiene que salir de un descubrimiento, y hay que regenerarla en cada ejecución, porque el objetivo es cazar exposición nueva.
Una cadena que funciona: enumeración de subdominios desde los registros de transparencia de certificados y el proveedor de DNS, más las IP públicas sacadas de la API de cada cuenta cloud, resueltas y sondeadas en busca de servicios HTTP vivos. subfinder y httpx, de la propia ProjectDiscovery, hacen esto y encajan limpiamente:
subfinder -d cliente.com -silent | httpx -silent -o vivos.txt
Añade la lista de IP derivada del inventario cloud y deduplica. Los activos que aparecen en la lista cloud pero no en el DNS son los que nadie vigila.
El diff es la alerta
Una ejecución nocturna que informa de 340 hallazgos cada noche es una ejecución nocturna que nadie lee. Compara cada ejecución con la anterior y alerta solo de lo nuevo:
jq -r '[.host, .["template-id"]] | @tsv' hoy.jsonl | sort > hoy
comm -13 ayer hoy > hallazgos-nuevos
Un hallazgo nuevo significa una de tres cosas: ha aparecido un activo nuevo, un activo existente ha cambiado, o se ha publicado una plantilla nueva para algo que ya tenías. Las tres merecen que una persona las mire el mismo día. Los 340 estables son un backlog que se trabaja con otro ritmo, no una alerta.
Manda el diff al canal que la persona de guardia lee de verdad. Un hallazgo de Nuclei que cae en un correo que nadie abre equivale a no haber escaneado.
Lo que caza y otras herramientas no
El secuestro de subdominio es el caso más claro. Un CNAME apuntando a un bucket S3 dado de baja o a un inquilino SaaS cancelado es invisible para los escáneres de postura, que miran lo que existe, no adónde apunta un registro DNS que ya no existe. Las plantillas dns/ de Nuclei comprueban exactamente eso, y tomar el control de un subdominio corporativo es un hallazgo serio de verdad: rompe el ámbito de las cookies, las listas de redirección de OAuth y toda suposición del tipo "solo mandamos correo desde nuestro dominio".
Los paneles expuestos vienen después. Grafana, Jenkins, Kibana, Argo CD, phpMyAdmin, la interfaz web de una impresora: cosas que llegan a internet por una regla de ingress bienintencionada y se quedan ahí con credenciales por defecto.
Y las plantillas de CVE son genuinamente útiles para esa ventana estrecha en la que se publica una vulnerabilidad grave expuesta a internet y necesitas saber en una hora si la tienes. Cuando caiga el siguiente fallo de Confluence, Citrix o Fortinet, la plantilla aparece esa misma semana, y un comando te lo dice.
Lo que no va a hacer
No va a encontrar fallos en tu propio código. Las plantillas casan firmas conocidas; el fallo de autorización de tu aplicación no tiene firma. Nuclei complementa a una auditoría, no la sustituye: Burp y una persona encuentran la otra mitad.
No va a priorizar por impacto. Un Grafana expuesto con vista anónima sobre paneles de marketing y un Grafana expuesto conectado al Prometheus de producción con cuenta de administrador son el mismo identificador de plantilla.
Y no te va a decir si un hallazgo es real. Verifica a mano antes de que llegue a un informe o a un ticket. La calidad de las plantillas varía, y un falso positivo entregado a un equipo de desarrollo cuesta más credibilidad de lo que valía el hallazgo.
Ejecución nocturna, alerta sobre el diff, verificación a mano: la herramienta se paga sola la primera vez que un subdominio se queda huérfano. Si prefieres tenerlo montado y afinado para tu entorno, forma parte de nuestro servicio de seguridad.