
CVE-Factory
CVE-Factory è un sistema multi-agente per la riproduzione CVE end-to-end completamente automatizzata. A partire dalle registrazioni CVE, il sistema ricerca automaticamente i dettagli, genera casi di test, costruisce ambienti Docker e verifica che ogni vulnerabilità possa essere sia sfruttata che corretta. La pipeline trasforma i metadati delle CVE in ambienti di vulnerabilità riproducibili e testabili senza intervento manuale.
⚠️ Avviso di sicurezza: Questo sistema costruisce ed esegue container Docker contenenti software vulnerabili. Devi ASSOLUTAMENTE utilizzare l'ambiente Docker-in-Docker (DinD) per isolare i container CVE dal sistema host. Non eseguire mai CVE-Factory direttamente sul demone Docker del tuo host.
Inserisci le registrazioni CVE e ottieni un ambiente completo di riproduzione CVE. Seguendo lo standard Terminal Bench, ogni pacchetto di task generato include:
Dockerfile e docker-compose.yaml che ospitano l'applicazione vulnerabiletask.yaml contenente descrizioni strutturate delle istruzioni (senza identità CVE)solution.sh per correggere la vulnerabilitàrun-tests.sh per avviare la valutazioneProgettata specificamente per task di sicurezza, la nostra logica di testing è suddivisa in:
Nessuna ricerca manuale, nessuna codifica manuale — completamente automatizzato dai metadati CVE grezzi alla riproduzione validata.
Struttura degli artefatti generati:
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
In una valutazione su larga scala di 554 CVE del 2025, CVE-Factory ha riprodotto con successo 499 casi, raggiungendo un tasso di successo del 90,1%. Inoltre, una rigorosa revisione di esperti su 471 casi riusciti ha confermato che 312 task (66,2%) sono stati riprodotti in modo completo e accurato!
Rispetto a esperti di sicurezza che utilizzavano informazioni iniziali identiche, il nostro sistema ha raggiunto un tasso di superamento della verifica di ~95% nella costruzione di ambienti e soluzioni, dimostrando capacità di livello esperto nella riproduzione automatizzata delle vulnerabilità.
📂 Dataset aperto: Rilasciamo oltre 1.000 ambienti di task CVE nella directory
cve_tasks/:
trainset/(887 task): Utilizzati per l'addestramento di Abacus-cve. Le oltre 4.000 tracce di agenti distillate su Hugging Face 🤗 sono generate da questi task utilizzando Claude Opus 4.5 con un harness Mini SWE-Agent.trainset-2/: Task aggiuntivi con difficoltà relativamente più semplice. Non inclusi nei dati di addestramento.- NUOVO: Ulteriori 3.181 task disponibili in
cve_tasks_3k_compressedsu Hugging Face (archivio compresso a causa dei limiti di dimensione), con 18,8k tracce di agenti per l'addestramento di Abacus-cve-v1.1.
Il fine-tuning sulle tracce di CVE-Factory produce miglioramenti drammatici sui benchmark di sicurezza. Qwen3-32B ottiene un miglioramento di ~6,8× su LiveCVEBench (5,29% → 35,79%), ~4,2× su PatchEval (5,66% → 23,58%), e mostra persino guadagni significativi su Terminal-Bench (12,50% → 28,75%), dimostrando una forte generalizzazione tra task differenti.
Con solo 4k tracce, Abacus-cve (32B) supera Qwen3-Coder-480B, MiniMax-M2 e Claude Sonnet 4, avvicinandosi al livello di Claude Sonnet 4.5 nei task di sicurezza.
NUOVO: Abacus-cve-v1.1 addestrato su 18,8k tracce ottiene ulteriori guadagni (+3,83 su LiveCVEBench, +2,38 su PatchEval). Vedi cve_train_v1.1 per i dati di addestramento ampliati.
A differenza dei rigidi flussi di recupero o dei semplici cicli di utilizzo degli strumenti, ogni agente opera come una sessione Claude Code completa. Non codifichiamo passaggi prefissati; definiamo invece ogni agente tramite il suo Ruolo (es. Analyzer), Obiettivo (es. "Costruisci un ambiente vulnerabile"), Risorse (es. accesso a documenti specifici) e Metodo di verifica (es. "Deve superare check_env_ready"). Gli agenti agiscono come sviluppatori umani: esplorano autonomamente i file, correggono gli errori, leggono i log e iterano sulle soluzioni all'interno del loro spazio di lavoro designato.
CVE-Factory è progettato per gestire più CVE contemporaneamente. Ogni pipeline CVE viene eseguita in modo asincrono, il che significa che i task più veloci passano alle fasi successive senza attendere quelli più lenti. Il sistema utilizza un'architettura asincrona che consente di separare i limiti di concorrenza per ogni tipo specifico di agente. Ad esempio, puoi impostare un limite più alto per i task di ricerca leggeri (Analyzer) e un limite più basso per i task Docker ad alta intensità di risorse (Builder). Questa flessibilità previene il sovraccarico del sistema massimizzando al contempo la velocità di elaborazione. I timeout a livello di fase garantiscono che i processi bloccati non blocchino la coda di elaborazione.
La pipeline è composta da 6 fasi indipendenti che possono essere eseguite separatamente o combinate.
Fase 1 (Analyzer → Generator) esegue la ricerca CVE e genera gli artefatti senza richiedere Docker.
Requisito degli strumenti: L'agente Analyzer si basa sugli strumenti
web_searcheweb_fetch. Se utilizzi un provider API di terze parti, devi assicurarti che supporti queste specifiche funzionalità degli strumenti.
Fase 2 (Builder → Validator → Solver → Checker) gestisce la costruzione e la validazione dell'ambiente Docker. Dalla Costruzione dell'ambiente alla Validazione olistica, non sono richiesti strumenti correlati al web, poiché gli agenti interagiscono esclusivamente con il filesystem locale e il demone Docker.
Ogni fase può anche essere richiamata singolarmente, consentendo un controllo granulare sul processo di riproduzione e un facile debug delle singole fasi.
Il sistema è composto da 6 fasi:
# 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
Vedi dev-env/README.md per la configurazione dettagliata di DinD e la risoluzione dei problemi.
Posiziona le CVE che desideri riprodurre nella directory original_cves_md/. I file devono essere denominati nel formato CVE-YYYY-NNNNN.md e contenere le informazioni pertinenti. Ti consigliamo di utilizzare cve-sampler da LiveCVEBench-Preview per preparare questi input.
# 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)
Una riproduzione CVE è considerata riuscita quando:
Impostazioni chiave in config.yaml per ottimizzare l'esecuzione:
# Example config.yaml tweak
orchestrator:
max_concurrent_cves: 3 # Lower concurrency for stability
agents:
limits:
builder: 2 # Prevent Docker from consuming all resources
Stiamo sviluppando attivamente OneFactory, un framework sintetico unificato che integra le capacità Terminal, SWE e Security (CVE) in una pipeline dati agentica 3-in-1 completa.
Basandoci su CVE-Factory, abbiamo sviluppato LiveCVEBench e rilasciato la prima versione del benchmark, i dati di addestramento e il modello Abacus-cve. Continueremo ad espandere il benchmark e a ottimizzare le nostre ricette di addestramento SFT & RL. Rimanete sintonizzati per ulteriori aggiornamenti!
Stiamo espandendo e aggiornando continuamente questo progetto. Se hai suggerimenti o desideri unirti/contribuire a questo progetto, contatta [email protected]!
Licenza 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}
}
| Modello | LiveCVEBench | PatchEval | Terminal-Bench | Media |
|---|
| Qwen3-32B (base) | 5,29 | 5,66 | 12,50 | 7,82 |
| Abacus-cve (Nostro) | 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 |
| Fase | Scopo |
|---|
| Raccolta delle informazioni | L'Analyzer raccoglie i dettagli in public.md e nei documenti specifici per ruolo (for_generator.md, ecc.). Termina se le informazioni sono insufficienti. |
| Generazione dei file | Il Generator crea i componenti logici: task.yaml, i test (test_func.py, test_vuln.py), solution.sh, run-tests.sh e la guida docker-reqs.md. |
| Costruzione dell'ambiente | Il Builder produce Dockerfile e docker-compose.yaml, operando in "costruzione cieca" (senza accesso a test/soluzione) per garantire il rigore. |
| Verifica della vulnerabilità | L'Orchestrator verifica test_vuln FAIL + test_func PASS tramite check_env_ready. In caso di fallimento, l'agente Validator corregge l'ambiente (max 3 tentativi). |
| Verifica della soluzione | L'Orchestrator verifica la correzione tramite check_fix_ready. Richiede il superamento di entrambi i test. In caso di fallimento, l'agente Solver adatta la soluzione o l'ambiente. |
| Validazione olistica | L'agente Checker gestisce gli errori o esegue la QA (pulizia di codice mock/dati) indipendentemente dall'esito di check_cve_ready. Il controllo E2E finale conferma il successo. |
| Sezione | Impostazione | Descrizione |
|---|
| Orchestrator | max_concurrent_cves | Controlla quante CVE vengono elaborate in parallelo. Riduci questo valore se raggiungi i limiti di frequenza dell'API. |
| Agenti | limits | Imposta limiti di concorrenza per fasi specifiche (es. limita builder per risparmiare disco/CPU). |
| Modelli | models.default | Cambia gli LLM sottostanti (es. Claude 4.5 Sonnet vs Opus). |