
CVE-Factory es un sistema Multi-Agente para la reproducción de CVEs totalmente automatizada y de extremo a extremo. Dados los registros CVE, el sistema investiga automáticamente los detalles, genera casos de prueba, construye entornos Docker y valida que cada vulnerabilidad pueda ser tanto explotada como parcheada. El pipeline transforma los metadatos CVE en entornos de vulnerabilidad reproducibles y comprobables sin intervención manual.
⚠️ Advertencia de Seguridad: Este sistema construye y ejecuta contenedores Docker que contienen software vulnerable. DEBE utilizar el entorno Docker-in-Docker (DinD) para aislar los contenedores CVE de su sistema host. Nunca ejecute CVE-Factory directamente en el daemon Docker de su host.
Ingrese registros CVE y obtenga un entorno completo de reproducción de CVE. Siguiendo el estándar Terminal Bench, cada paquete de tareas generado incluye:
Dockerfile y docker-compose.yaml que alojan la aplicación vulnerabletask.yaml que contiene descripciones estructuradas de instrucciones (sin identidad CVE)solution.sh para parchear la vulnerabilidadrun-tests.sh para iniciar la evaluaciónDiseñada específicamente para tareas de seguridad, nuestra lógica de prueba se divide en:
Sin investigación manual, sin codificación manual - totalmente automatizado desde los metadatos CVE brutos hasta la reproducción validada.
Estructura de Artefactos Generados:
CVE-2025-XXXX/
├── task.yaml # Structured Task Metadata
├── Dockerfile # Vulnerable Environment Setup
├── docker-compose.yaml # Service Orchestration
├── task-deps/
├── solution.sh # Verified Patch
└── test/
├── test_func.py # Functionality Check
├── test_vuln.py # Vulnerability Exploit Check
└── run-tests.sh # One-click Evaluation Script
En una evaluación a gran escala de 554 CVEs de 2025, CVE-Factory reprodujo con éxito 499 casos, logrando una tasa de éxito del 90.1%. Además, una rigurosa revisión de expertos de 471 casos exitosos confirmó que 312 tareas (66.2%) se reprodujeron de forma completa y precisa.
Al compararse con expertos en seguridad que utilizaban información inicial idéntica, nuestro sistema logró una tasa de aprobación de verificación de ~95% en la construcción de entornos y soluciones, lo que demuestra una capacidad de nivel experto en la reproducción automatizada de vulnerabilidades.
📂 Conjunto de Datos Abierto: Publicamos más de 1,000 entornos de tareas CVE en el directorio
cve_tasks/:
trainset/(887 tareas): Se utiliza para entrenar Abacus-cve. Las más de 4,000 trazas de agente destiladas en Hugging Face 🤗 se generan a partir de estas tareas utilizando Claude Opus 4.5 con un harness Mini SWE-Agent.trainset-2/: Tareas adicionales de dificultad relativamente más sencilla. No se incluyen en los datos de entrenamiento.- NUEVO: 3,181 tareas adicionales disponibles en
cve_tasks_3k_compresseden Hugging Face (archivo comprimido debido a límites de tamaño), con 18.8k trazas de agente para entrenar Abacus-cve-v1.1.
El fine-tuning con las trazas de CVE-Factory produce mejoras dramáticas en los benchmarks de seguridad. Qwen3-32B logra una mejora de ~6.8× en LiveCVEBench (5.29% → 35.79%), ~4.2× en PatchEval (5.66% → 23.58%), e incluso muestra ganancias significativas en Terminal-Bench (12.50% → 28.75%), lo que demuestra una fuerte generalización entre tareas.
Con solo 4k trazas, Abacus-cve (32B) supera a Qwen3-Coder-480B, MiniMax-M2 y Claude Sonnet 4, acercándose al nivel de Claude Sonnet 4.5 en tareas de seguridad.
NUEVO: Abacus-cve-v1.1 entrenado con 18.8k trazas logra mejoras adicionales (+3.83 en LiveCVEBench, +2.38 en PatchEval). Consulte cve_train_v1.1 para ver los datos de entrenamiento ampliados.
A diferencia de los flujos de recuperación rígidos o de los simples bucles de uso de herramientas, cada agente opera como una sesión completa de Claude Code. No codificamos los pasos de forma rígida; en su lugar, definimos cada agente por su Rol (p. ej., Analyzer), Objetivo (p. ej., "Construir un entorno vulnerable"), Recursos (p. ej., Acceso a documentos específicos) y Método de Verificación (p. ej., "Debe pasar check_env_ready"). Los agentes actúan como desarrolladores humanos: exploran archivos de forma autónoma, depuran errores, leen registros e iteran sobre las soluciones dentro de su espacio de trabajo designado.
CVE-Factory está diseñado para manejar múltiples CVEs simultáneamente. Cada pipeline de CVE se ejecuta de forma asíncrona, lo que significa que las tareas más rápidas avanzan a las etapas siguientes sin esperar a las más lentas. El sistema utiliza una arquitectura asíncrona que permite separar los límites de concurrencia para cada tipo específico de agente. Por ejemplo, puede establecer un límite más alto para tareas de investigación ligeras (Analyzer) y un límite más bajo para tareas Docker que consumen muchos recursos (Builder). Esta flexibilidad evita la sobrecarga del sistema al tiempo que maximiza la velocidad de procesamiento. Los timeouts a nivel de etapa garantizan que los procesos colgados no obstruyan la cola de procesamiento.
El pipeline consta de 6 etapas independientes que pueden ejecutarse por separado o combinadas.
Fase 1 (Analyzer → Generator) realiza la investigación del CVE y genera los artefactos sin necesidad de Docker.
Requisito de Herramientas: El agente Analyzer depende de las herramientas
web_searchyweb_fetch. Si utiliza un proveedor de API de terceros, debe asegurarse de que admita estas capacidades de herramienta específicas.
Fase 2 (Builder → Validator → Solver → Checker) se encarga de la construcción y validación del entorno Docker. Desde la Construcción del Entorno hasta la Validación Holística, no se requieren herramientas relacionadas con la web, ya que los agentes interactúan únicamente con el sistema de archivos local y el daemon Docker.
Cada etapa también puede invocarse individualmente, lo que permite un control granular sobre el proceso de reproducción y una fácil depuración de etapas específicas.
El sistema consta de 6 etapas:
# Start the isolated DinD environment (required for security)
cd dev-env
docker compose up -d
# Enter the development container
docker compose exec cve-factory bash
Consulte dev-env/README.md para obtener una configuración detallada de DinD y la resolución de problemas.
Coloque los CVEs que desea reproducir en el directorio original_cves_md/. Los archivos deben nombrarse con el formato CVE-YYYY-NNNNN.md y contener información relevante. Recomendamos utilizar el cve-sampler de LiveCVEBench-Preview para preparar estas entradas.
# Inside the DinD development container
cd /workspace
pip install -r requirements.txt
# Verify CVE input files are ready
ls original_cves_md/
# Set API key or use Claude subscription
export ANTHROPIC_API_KEY="your-key"
export ANTHROPIC_BASE_URL="your-url"
# Process a specific CVE
python -m orchestrator.run --cve CVE-2025-XXXXX
# Or process all CVEs in the input directory
python -m orchestrator.run
# Run phases separately
python -m orchestrator.run --phase1 --cve CVE-2025-XXXXX # Analyzer + Generator only (no Docker needed)
python -m orchestrator.run --phase2 --cve CVE-2025-XXXXX # Builder → Checker (requires Docker)
Se considera que una reproducción de CVE es exitosa cuando:
Ajustes clave en config.yaml para optimizar su ejecución:
# Example config.yaml tweak
orchestrator:
max_concurrent_cves: 3 # Lower concurrency for stability
agents:
limits:
builder: 2 # Prevent Docker from consuming all resources
Estamos desarrollando activamente OneFactory, un Marco Sintético Unificado que integra las capacidades de Terminal, SWE y Seguridad (CVE) en un pipeline de datos agéntico integral 3-en-1.
Basándonos en CVE-Factory, hemos desarrollado LiveCVEBench y publicado la primera versión del benchmark, los datos de entrenamiento y el modelo Abacus-cve. Continuaremos ampliando el benchmark y optimizando nuestras recetas de entrenamiento SFT y RL. ¡Manténgase atento para más actualizaciones!
Estamos ampliando y actualizando continuamente este proyecto. Si tiene alguna sugerencia o desea unirse o contribuir a este proyecto, póngase en contacto con [email protected]!
Licencia MIT
@misc{luo2026cvefactory,
title={CVE-Factory: Scaling Expert-Level Agentic Tasks for Code Security Vulnerability},
author={Xianzhen Luo and Jingyuan Zhang and Shiqi Zhou and Rain Huang and Chuan Xiao and Qingfu Zhu and Zhiyuan Ma and Xing Yue and Yang Yue and Wencong Zeng and Wanxiang Che},
year={2026},
eprint={2602.03012},
archivePrefix={arXiv},
primaryClass={cs.CR},
url={https://arxiv.org/abs/2602.03012}
}
| Modelo | LiveCVEBench | PatchEval | Terminal-Bench | Promedio |
|---|
| Qwen3-32B (base) | 5.29 | 5.66 | 12.50 | 7.82 |
| Abacus-cve (Nuestro) | 35.79 | 23.58 | 28.75 | 29.37 |
| Qwen3-Coder-30B | 10.58 | 9.91 | 13.75 | 11.41 |
| Qwen3-Coder-480B | 19.58 | 19.34 | 36.25 | 25.06 |
| MiniMax-M2 | 24.87 | 19.34 | 37.50 | 27.24 |
| Claude Sonnet 4 | 20.11 | 22.64 | 33.75 | 25.50 |
| Claude Sonnet 4.5 | 34.39 | 28.77 | 45.00 | 36.05 |
| Claude Opus 4.5 | 41.27 | 32.08 | 48.75 | 40.70 |
| Etapa | Propósito |
|---|
| Recopilación de Información | Analyzer reúne los detalles en public.md y en documentos específicos de rol (for_generator.md, etc.). Termina si la información es insuficiente. |
| Generación de Archivos | Generator crea los componentes lógicos: task.yaml, pruebas (test_func.py, test_vuln.py), solution.sh, run-tests.sh y la guía docker-reqs.md. |
| Construcción del Entorno | Builder produce Dockerfile y docker-compose.yaml, operando bajo "construcción ciega" (sin acceso a pruebas/solución) para garantizar el rigor. |
| Verificación de Vulnerabilidad | El orquestador verifica test_vuln FAIL + test_func PASS mediante check_env_ready. Si falla, el agente Validator corrige el entorno (máx. 3 reintentos). |
| Verificación de la Solución | El orquestador verifica la corrección mediante check_fix_ready. Requiere que ambas pruebas pasen. Si falla, el agente Solver ajusta la solución o el entorno. |
| Validación Holística | El agente Checker gestiona los errores o realiza QA (limpieza de código/datos mock) independientemente del resultado de check_cve_ready. La verificación E2E final confirma el éxito. |
| Sección | Ajuste | Descripción |
|---|
| Orquestador | max_concurrent_cves | Controla cuántos CVEs se procesan en paralelo. Redúzcalo si alcanza los límites de tasa de la API. |
| Agentes | limits | Establece límites de concurrencia para etapas específicas (p. ej., limite builder para ahorrar disco/CPU). |
| Modelos | models.default | Cambia los LLM subyacentes (p. ej., Claude 4.5 Sonnet vs Opus). |