
Artefatti simili a fix con difetti incorporati
Fix Like Artifacts with Embedded Defects
Un harness di ricerca per misurare quanto bene gli agenti AI correggono le vulnerabilità.
Avvio rapido · Dataset · Documentazione · Modello di sicurezza · Contribuire
FLAWED estrae un progetto open-source a un commit noto come vulnerabile, fornisce a un agente AI una descrizione del bug e gli chiede di scrivere una patch. L'agente non vede mai la vera correzione upstream.
Ogni patch viene poi validata, verificata e valutata in container isolati, così puoi vedere non solo se il modello ha corretto il bug, ma anche se ne ha introdotti di nuovi lungo il percorso.
flowchart LR
spec[bug spec] --> clone
clone["clone<br/>(open net)"] --> generate
generate["generate<br/>(offline)"] --> validate
validate["validate<br/>(offline)"] --> ast["ast<br/>(offline)"]
generate -.->|"patch.diff"| store[(Postgres)]
validate -.->|"verdict"| store
ast -.->|"summary"| store
store --> ui[web UI + notebook]Ogni fase viene eseguita nel proprio container. Solo clone ha accesso alla rete. Ogni
fase successiva è limitata all'API del provider LLM, così gli agenti non possono recuperare
suggerimenti o la correzione upstream durante l'esecuzione.
| Funzionalità | Cosa ti offre |
|---|---|
| Campionamento ripetuto | Un'esecuzione esegue N iterazioni dello stesso input, così i risultati sono distribuzioni, non aneddoti. |
| Campagne | Analizza un bug attraverso varianti di patcher e stili di prompt, da un vago "fix this plz" a un advisory completo, e confronta i risultati su una dashboard live. |
| Valutazione degli esiti | Ogni patch ricade in uno dei cinque scenari, da S1 (correzione pulita) a S5 (non ha corretto il bug e ha introdotto una nuova vulnerabilità). |
| Validazione incrociata | Le patch vengono rivalutate da altri modelli, e i numeri principali mediano le lenti di auto-validazione e validazione incrociata, così il bias di un singolo giudice non domina. |
| Rilevamento di imbrogli | Un auditor segnala le iterazioni in cui l'agente ha trovato la correzione upstream invece di risolvere il bug da solo. |
FLAWED mette a confronto diretto le CLI Claude, Codex e Gemini con gli stessi input.
[!WARNING] FLAWED monta il socket Docker (equivalente a root sull'host) ed esegue codice di terze parti non attendibile all'interno dei suoi container di fase. Eseguilo su una macchina di cui ti fidi per sopportare quel carico di lavoro. Vedi
docs/security-model.md.
Ti serve Docker, con il socket del daemon accessibile.
# 1. Configure. Writes .env for you (data dir + provider API keys)
./setup.sh
# 2. Bring up the stack (Postgres, API + worker, web UI, notebook)
docker compose up --build
# 3. Open http://127.0.0.1:8080
Poi fai la tua prima esecuzione.
bugs/. Trascinane una
nella pagina Bug Specs della web UI, oppure usa la CLI.
./scripts/import-all-bugs.sh
[!NOTE] La prima esecuzione contro un upstream di grandi dimensioni (ad es. Chromium) è lenta. La fase di validate clona l'intero repo una volta per fare il diff con la vera patch upstream. Il clone viene memorizzato in cache e riutilizzato in seguito.
Ti servono Docker, Node 20+, pnpm, uv e
@devcontainers/cli (npm i -g @devcontainers/cli). Gli utenti Nix possono usare
nix-shell per tutto tranne Docker.
make dev # uv sync + web deps
docker compose up -d postgres # FLAWED needs a Postgres to talk to
cp .env.example .env # points FLAWED_DB_URL at it
uv run flawed init # builds base images, creates the schema
uv run flawed serve # API + worker + webapp on port 8080
Per il ciclo di sviluppo web, esegui make web-dev in un secondo terminale. Serve la
UI sulla porta 5173 e fa da proxy per /api verso flawed serve.
Un devcontainer isolato per eseguire agenti di coding AI su questo repo in modo sicuro
è documentato in .devcontainer/README.md.
Una bug spec è l'unità di input. Contiene un repo, un commit vulnerabile, una descrizione del bug, un reproducer opzionale e un insieme di varianti di prompt che modellano come il bug potrebbe essere realisticamente segnalato (riscontro SAST, report di bug bounty, advisory in embargo, PoC grezzo, …). Le spec sono versionate e immutabili, così il prompt e il verdetto di un'esecuzione storica non cambiano mai silenziosamente.
Il contratto JSON si trova in bugs.schema.json ed è
documentato in docs/bug-specs.md. Tutte le spec incluse
descrivono vulnerabilità divulgate pubblicamente e corrette upstream.
Postgres è l'unica fonte di verità. I metadati delle esecuzioni e i byte degli artefatti
(patch, verdetti, trascrizioni, log) risiedono nel database, così un deployment è
completamente catturato dal suo DB. La directory data/ è scratch transitorio che le
fasi montano a runtime.
scripts/export_dataset.py e
scripts/import_dataset.py (disponibili anche dalla web UI).scripts/export_artifacts.py.uv run alembic upgrade head
viene eseguito automaticamente all'avvio).Pubblichiamo dataset pre-costruiti così puoi caricare campagne completate invece di
eseguire tutto da solo. Ogni dataset è un .tar.gz di un singolo snapshot completo,
ospitato su https://flawed.s3.us-east-1.amazonaws.com.
Tutte le campagne in un unico bundle.
| Bundle | Archivio |
|---|---|
| Tutte le campagne | full.tar.gz |
| Campagna | Modello patcher | Dimensione | Archivio |
|---|---|---|---|
| CVE-2026-22738 (Spring AI SpEL injection) | claude-opus-4-8 | 515.0 MB | .tar.gz |
| CVE-2026-22738 (Spring AI SpEL injection) | gpt-5.5 | 663.9 MB | .tar.gz |
CVE-2026-31431 (Linux algif_aead) | claude-opus-4-8 | 1.1 GB | .tar.gz |
CVE-2026-31431 (Linux algif_aead in-place) | gpt-5.5 | 966.9 MB | .tar.gz |
| CVE-2026-34197 (ActiveMQ Jolokia RCE) | claude-opus-4-8 | 645.2 MB | .tar.gz |
| CVE-2026-34197 (ActiveMQ Jolokia RCE) | gpt-5.5 | 819.0 MB | .tar.gz |
| CVE-2026-45185 (Exim BDAT use-after-free) | claude-opus-4-8 | 1.1 GB | .tar.gz |
| CVE-2026-45185 (Exim BDAT use-after-free) | gpt-5.5 | 1.0 GB | .tar.gz |
| CVE-2026-8512 (Chromium fsevents UAF) | claude-opus-4-8 | 500.7 MB | .tar.gz |
| CVE-2026-8512 (Chromium fsevents UAF) | gpt-5.5 | 342.7 MB | .tar.gz |
| freenginx-26 (Perl SV refcount UAF) | gpt-5.5 | 166.4 MB | .tar.gz |
| GHSA-wpqr-6v78-jr5g (Gemini CLI trust model) | claude-opus-4-8 | 1.2 GB | .tar.gz |
| GHSA-wpqr-6v78-jr5g (Gemini CLI trust model) | gpt-5.5 | 1.3 GB | .tar.gz |
Snapshots → Import datasets, incolla uno dei link agli archivi qui sopra e clicca
Find archives. FLAWED importa un link diretto .tar.gz così com'è e lo decomprime
nei tuoi snapshot. Poi ripristinalo dalla lista degli snapshot (il ripristino è un
passo separato, confermato esplicitamente).
L'importazione scopre più archivi contemporaneamente solo quando l'URL è un bucket elencabile o una pagina indice di directory. Nessuno dei due casi si applica qui, quindi importa i link uno alla volta.
Scarica un archivio, decomprimilo nella directory degli snapshot
(FLAWED_HOST_SNAPSHOT_DIR, o ./flawed-snapshots per impostazione predefinita), e comparirà
nella lista degli snapshot pronto per il ripristino.
curl -LO https://flawed.s3.us-east-1.amazonaws.com/compressed/campaigns/full/cve-2026-45185-exim-bdat-uaf_full_gpt-5.5_1782988292.tar.gz
mkdir -p "$FLAWED_HOST_SNAPSHOT_DIR"
tar -xzf cve-2026-45185-exim-bdat-uaf_full_gpt-5.5_1782988292.tar.gz -C "$FLAWED_HOST_SNAPSHOT_DIR"
L'importazione prepara solo il bundle su disco. Il ripristino, che sostituisce il deployment corrente, viene eseguito separatamente dalla pagina degli snapshot.
| Doc | Cosa contiene |
|---|---|
docs/architecture.md | Componenti, flusso dei dati, layout di archiviazione |
docs/pipeline.md | Le fasi, semantica delle iterazioni, layout dei container |
docs/security-model.md | Policy di rete per fase, sandboxing, modello di minaccia |
docs/bug-specs.md | Contratto di input, composizione dei prompt, versionamento |
docs/cli.md | Riferimento comandi flawed + variabili d'ambiente |
docs/webapp.md | Tour della UI |
docs/notebook.md | Integrazione JupyterLab + il modulo helper flawed |
packages/
flawed-core/ models, DB schema, settings
flawed-orchestrator/ run lifecycle, worker pool, devcontainer driver
flawed-stage-*/ the pipeline stages (clone, generate, validate, …)
flawed-agent-runner/ runs INSIDE the container (Claude / Codex / Gemini CLIs)
flawed-api/ FastAPI + SSE + notebook proxy
flawed-cli/ the `flawed` CLI
apps/web/ React + Vite + Tailwind webapp
containers/ base image, network lockdown, notebook container
bugs/ example bug specs
docs/ documentation (see above)
| Attività | Comando |
|---|---|
| Sincronizza tutte le dipendenze Python + Node | make dev |
| Esegui i test | make test |
| Lint | make lint |
| Auto-formattazione | make format |
| Server di sviluppo web (porta 5173) | make web-dev |
| Smoke test E2E | make e2e |
I test richiedono Docker. Avviano il proprio Postgres tramite testcontainers.
FLAWED è rilasciato sotto la MIT License. I contributi sono benvenuti. Vedi CONTRIBUTING.md, e segnala i problemi di sicurezza in privato secondo SECURITY.md.