
Artefacts de type correctif avec défauts intégrés
Fix Like Artifacts with Embedded Defects
Un harnais de recherche pour mesurer la capacité des agents IA à corriger les vulnérabilités.
Démarrage rapide · Jeux de données · Documentation · Modèle de sécurité · Contribution
FLAWED récupère un projet open source à un commit connu comme vulnérable, fournit à un agent IA une description du bug, et lui demande d'écrire un correctif. L'agent ne voit jamais le véritable correctif amont.
Chaque correctif est ensuite validé, audité et noté dans des conteneurs isolés, afin que vous puissiez voir non seulement si le modèle a corrigé le bug, mais aussi s'il en a introduit de nouveaux au passage.
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]Chaque étape s'exécute dans son propre conteneur. Seul clone dispose d'un accès réseau. Toutes
les étapes suivantes sont verrouillées sur l'API du fournisseur de LLM, afin que les agents ne puissent pas récupérer
d'indices ou le correctif amont en cours d'exécution.
| Fonctionnalité | Ce qu'elle vous apporte |
|---|---|
| Échantillonnage répété | Une exécution effectue N itérations de la même entrée, les résultats sont donc des distributions, pas des anecdotes. |
| Campagnes | Balayez un bug à travers des variantes de patcheurs et des styles de prompt, d'un vague « fix this plz » à un avis complet, et comparez les résultats sur un tableau de bord en direct. |
| Notation des résultats | Chaque correctif tombe dans l'un des cinq scénarios, de S1 (correction propre) à S5 (n'a pas corrigé le bug et a introduit une nouvelle vulnérabilité). |
| Validation croisée | Les correctifs sont réévalués par d'autres modèles, et les chiffres principaux moyennent les perspectives d'auto-validation et de validation croisée afin qu'aucun biais d'un juge unique ne domine. |
| Détection de triche | Un auditeur signale les itérations où l'agent a trouvé le correctif amont au lieu de résoudre le bug lui-même. |
FLAWED fait s'affronter les CLI Claude, Codex et Gemini avec les mêmes entrées.
[!WARNING] FLAWED monte le socket Docker (équivalent root sur l'hôte) et exécute du code tiers non fiable à l'intérieur de ses conteneurs d'étape. Exécutez-le sur une machine en laquelle vous avez confiance pour supporter cette charge de travail. Voir
docs/security-model.md.
Vous avez besoin de Docker, avec le socket du démon accessible.
# 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
Lancez ensuite votre première exécution.
bugs/. Glissez-en une
dans la page Bug Specs de l'interface web, ou utilisez la CLI.
./scripts/import-all-bugs.sh
[!NOTE] La première exécution contre un grand dépôt amont (par ex. Chromium) est lente. L'étape validate clone tout le dépôt une fois pour le comparer au véritable correctif amont. Le clone est mis en cache et réutilisé par la suite.
Vous avez besoin de Docker, Node 20+, pnpm, uv et
@devcontainers/cli (npm i -g @devcontainers/cli). Les utilisateurs de Nix peuvent
nix-shell pour tout sauf 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
Pour la boucle de développement web, exécutez make web-dev dans un second terminal. Cela sert
l'interface sur le port 5173 et proxy /api vers flawed serve.
Un devcontainer isolé pour exécuter des agents de codage IA contre ce dépôt en toute sécurité
est documenté dans .devcontainer/README.md.
Une spécification de bug est l'unité d'entrée. Elle contient un dépôt, un commit vulnérable, une description du bug, un reproducteur optionnel et un ensemble de variantes de prompt qui modélisent comment le bug pourrait être signalé de manière réaliste (résultat SAST, rapport de bug bounty, avis sous embargo, PoC brut, …). Les spécifications sont versionnées et immuables, de sorte que le prompt et le verdict d'une exécution historique ne changent jamais silencieusement.
Le contrat JSON se trouve dans bugs.schema.json et est
documenté dans docs/bug-specs.md. Toutes les spécifications fournies
décrivent des vulnérabilités divulguées publiquement et corrigées en amont.
Postgres est l'unique source de vérité. Les métadonnées d'exécution et les octets des artefacts
(correctifs, verdicts, transcriptions, journaux) résident dans la base de données, de sorte qu'un déploiement est
entièrement capturé par sa base de données. Le répertoire data/ est un espace de travail transitoire que les
étapes montent à l'exécution.
scripts/export_dataset.py et
scripts/import_dataset.py (également disponibles depuis l'interface web).scripts/export_artifacts.py.uv run alembic upgrade head
s'exécute automatiquement au démarrage).Nous publions des jeux de données préconstruits afin que vous puissiez charger des campagnes terminées au lieu de
tout exécuter vous-même. Chaque jeu de données est un .tar.gz d'un instantané complet,
hébergé à https://flawed.s3.us-east-1.amazonaws.com.
Toutes les campagnes dans un seul paquet.
| Paquet | Archive |
|---|---|
| Toutes les campagnes | full.tar.gz |
| Campagne | Modèle de patcheur | Taille | Archive |
|---|---|---|---|
| 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 |
Snapshots → Import datasets, collez l'un des liens d'archive ci-dessus, puis cliquez sur
Find archives. FLAWED importe un lien .tar.gz direct tel quel et le décompresse
dans vos instantanés. Restaurez-le ensuite depuis la liste des instantanés (la restauration est une
étape distincte et explicitement confirmée).
L'import ne découvre plusieurs archives à la fois que lorsque l'URL est un bucket listable ou une page d'index de répertoire. Aucun des deux ne s'applique ici, importez donc les liens un par un.
Téléchargez une archive, décompressez-la dans le répertoire des instantanés
(FLAWED_HOST_SNAPSHOT_DIR, ou ./flawed-snapshots par défaut), et elle apparaît
dans la liste des instantanés, prête à être restaurée.
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'import ne fait que déposer le paquet sur le disque. Sa restauration, qui remplace le déploiement actuel, s'effectue séparément depuis la page des instantanés.
| Doc | Contenu |
|---|---|
docs/architecture.md | Composants, flux de données, disposition du stockage |
docs/pipeline.md | Les étapes, la sémantique des itérations, la disposition des conteneurs |
docs/security-model.md | Politique réseau par étape, sandboxing, modèle de menace |
docs/bug-specs.md | Contrat d'entrée, composition des prompts, versionnage |
docs/cli.md | Référence de la commande flawed + variables d'environnement |
docs/webapp.md | Visite de l'interface |
docs/notebook.md | Intégration JupyterLab + le module d'assistance 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)
| Tâche | Commande |
|---|---|
| Synchroniser toutes les dépendances Python + Node | make dev |
| Exécuter les tests | make test |
| Lint | make lint |
| Formatage automatique | make format |
| Serveur de développement web (port 5173) | make web-dev |
| Test de fumée E2E | make e2e |
Les tests nécessitent Docker. Ils démarrent leur propre Postgres via testcontainers.
FLAWED est publié sous la MIT License. Les contributions sont les bienvenues. Voir CONTRIBUTING.md, et veuillez signaler les problèmes de sécurité en privé conformément à SECURITY.md.
.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 |