Cómo hacer que la IA encuentre vulnerabilidades reales en el código sin un sinfín de falsos positivos
Si alguna vez has intentado apuntar un LLM al código fuente con un prompt de "encontrar vulnerabilidades", probablemente recuerdas el resultado. El modelo típicamente produce una pared de observaciones teóricas: falta validación de la lista de verificación OWASP aquí, se podría agregar otra capa de sanitización allí, y esta variable tiene un nombre sospechoso. En la práctica, el 90% de estos hallazgos resultan ser ruido que simplemente desperdicia el tiempo de los desarrolladores.
El equipo de Cloudflare ha publicado como código abierto security-audit-skill. Es un conjunto de instrucciones y pipeline para agentes de codificación, que utilizaron para construir su harness interno para auditoría continua de repositorios.
¿Cuál es el problema principal con la auditoría de IA regular?
La mayoría de los analizadores estáticos y prompts simples de redes neuronales sufren de dos problemas: no verifican la explotabilidad y alucinan contexto. La red neuronal ve una función peligrosa pero no nota que los datos de entrada ya están filtrados por tres capas superiores.
Cloudflare tomó el enfoque opuesto y construyó la habilidad sobre principios estrictos:
- Los reportes solo se generan para lo que es realmente explotable. Frases como "teóricamente un atacante podría" se filtran inmediatamente.
- La persona que encontró el bug no tiene derecho a validarlo. Un agente separado e independiente funciona como abogado del diablo para la verificación.
- La ausencia de una segunda capa de protección no se considera una vulnerabilidad si la primera capa bloquea confiablemente el vector de ataque.
- La evaluación de criticidad se basa en impacto real, no en coincidencias formales con listas de verificación.
Cómo funciona el pipeline de seis fases
En lugar de un solo prompt largo, la herramienta divide el trabajo en seis etapas secuenciales. Sub-agentes paralelos trabajan dentro, cada uno con una tarea estrictamente definida.
+-------------------------------------------------------------+
| 1. Recon -> Карта архитектуры и точек входа |
| 2. Hunt -> Параллельные атаки по разным векторам |
| 3. Validate -> Попытка опровергнуть каждую находку |
| 4. Report -> Формирование читаемых отчетов |
| 5. Structured -> Генерация findings.json со схемой |
| 6. Verify -> Сверка фактов со свежими агентами |
+-------------------------------------------------------------+
1. Reconocimiento
Los agentes investigan el proyecto, definen límites de confianza, identifican puntos de entrada y trazan la arquitectura general. El resultado es un archivo architecture.md que sirve como mapa para los agentes de ataque.
2. Caza
Múltiples agentes prueban el código en paralelo desde diferentes ángulos. El proyecto se divide en archivos separados con prompts para diferentes clases de ataque:
- Inyecciones, control de acceso y lógica de negocio.
- Especificidades de protocolos web, caché y autenticación (
WEB-PROTOCOL-AND-AUTH.md). - Amenazas del lado del cliente como inyecciones DOM y contaminación de prototipos (
CLIENT-SIDE.md). - Seguridad de memoria y vulnerabilidades binarias para código nativo (
MEMORY-SAFETY-AND-BINARY.md). - Problemas de sistemas LLM: inyección de prompts, filtraciones de contexto y manipulación de llamadas a herramientas (
AI-AND-LLM.md).
Cada agente de caza puede generar procesos adicionales para investigar más a fondo cadenas de llamadas sospechosas.
3. Validación adversaria
La etapa más útil. Agentes frescos reciben una lista de posibles bugs y deliberadamente intentan probar que un ataque no funcionará. Si hay protección en su lugar o el vector está bloqueado por un módulo vecino, el hallazgo se tachará sin piedad.
4. Reporte y salida estructurada
Se generan los archivos REPORT.md y FINDINGS-DETAIL.md con trazas detalladas para vulnerabilidades de nivel Medio y superior, junto con findings.json. El JSON estructurado es validado por el script validate-findings.cjs basado en Node.js sin dependencias externas.
5. Verificación independiente
Control de calidad final. Agentes con contexto limpio verifican línea por línea las afirmaciones en el reporte contra el código real para eliminar alucinaciones en números de línea o nombres de funciones.
Instalación y ejecución
El paquete se conecta a través de Skills CLI a cualquier agente de codificación que soporte llamadas a herramientas y sub-agentes paralelos.
Instalación del proyecto:
npx skills add https://github.com/cloudflare/security-audit-skill --skill security-audit
Instalación global para todo el sistema:
npx skills add https://github.com/cloudflare/security-audit-skill --skill security-audit --global
Después de eso, simplemente abre la base de código en tu agente y escribe en texto plano:
security audit this codebase
o especifica un directorio específico y ruta del reporte:
do a security review, output to ~/audits/my-project
Detalle interesante: las ejecuciones se pueden acumular. Los autores encontraron durante las pruebas que una ejecución encuentra aproximadamente la mitad de los problemas reales debido a la aleatoriedad en las rutas de recorrido. El skill puede leer ejecuciones anteriores de findings.json, saltar bugs ya conocidos y explorar ramas de código no tocadas.
¿Para quién es esto?
La herramienta requiere un modelo capaz con soporte para llamadas a herramientas paralelas, así que ejecutarlo en configuraciones locales débiles probablemente no funcione.
Pero si ya estás usando agentes para refactorización o escritura de pruebas, agregar un rol como auditor de seguridad meticuloso es una gran idea antes de un lanzamiento o fusión importante. El enfoque de dividir roles entre "atacante" y "escéptico" reduce заметно el esfuerzo manual necesario para tratar con falsos positivos.
Proyectos relacionados