埋め込み欠陥を持つFix-Likeアーティファクト
Fix Like Artifacts with Embedded Defects
AIエージェントが脆弱性をどれだけうまく修正できるかを測定するための研究ハーネス。
クイックスタート · データセット · ドキュメント · セキュリティモデル · コントリビューション
FLAWEDは、既知の脆弱なコミット時点でオープンソースプロジェクトをチェックアウトし、AIエージェントにバグの説明を渡してパッチを書くよう依頼します。エージェントが実際のアップストリームの修正を目にすることはありません。
その後、すべてのパッチは隔離されたコンテナ内で検証、監査、採点されるため、モデルがバグを修正したかどうかだけでなく、その過程で新たなバグを混入させなかったかどうかも確認できます。
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]各ステージはそれぞれ独自のコンテナ内で実行されます。ネットワークアクセスを持つのはcloneだけです。それ以降のすべてのステージはLLMプロバイダーのAPIのみに制限されているため、エージェントは実行中にヒントやアップストリームの修正を取得できません。
FLAWEDはClaude、Codex、GeminiのCLIを同じ入力で直接対決させます。
[!WARNING] FLAWEDはDockerソケット(ホスト上ではroot相当)をマウントし、ステージコンテナ内で信頼できないサードパーティのコードを実行します。そのワークロードを処理できると信頼できるマシン上で実行してください。詳細は
docs/security-model.mdを参照してください。
Dockerが必要で、デーモンソケットにアクセスできる必要があります。
# 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
次に最初の実行を行います。
bugs/以下に同梱されています。Web UIのBug Specsページにドラッグするか、CLIを使用します。
./scripts/import-all-bugs.sh
[!NOTE] 大規模なアップストリーム(例: Chromium)に対する最初の実行は遅くなります。validateステージは、実際のアップストリームパッチと差分を取るためにリポジトリ全体を一度クローンします。クローンはキャッシュされ、その後再利用されます。
Docker、Node 20+、pnpm、uv、および@devcontainers/cli(npm i -g @devcontainers/cli)が必要です。NixユーザーはDocker以外のすべてをnix-shellで用意できます。
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
Webの開発ループには、2つ目のターミナルでmake web-devを実行します。UIをポート5173で提供し、/apiをflawed serveにプロキシします。
このリポジトリに対してAIコーディングエージェントを安全に実行するための隔離されたdevcontainerは、.devcontainer/README.mdに文書化されています。
バグスペックは入力の単位です。リポジトリ、脆弱なコミット、バグの説明、オプションの再現手順、およびバグが現実的にどのように報告されるかをモデル化した一連のプロンプトバリアント(SASTの検出結果、バグバウンティレポート、 embargoされたアドバイザリ、生のPoCなど)を保持します。スペックはバージョン管理され不変であるため、過去の実行のプロンプトと判定が黙って変わることはありません。
JSONコントラクトはbugs.schema.jsonにあり、docs/bug-specs.mdに文書化されています。同梱されているすべてのスペックは、公開開示され、アップストリームで修正された脆弱性を記述しています。
Postgresが唯一の信頼できる情報源です。実行メタデータおよびアーティファクトのバイト列(パッチ、判定、トランスクリプト、ログ)はデータベース内に存在するため、デプロイメントはそのDBによって完全に捕捉されます。data/ディレクトリは、ステージが実行時にマウントする一時的なスクラッチ領域です。
scripts/export_dataset.pyとscripts/import_dataset.pyで行います(Web UIからも利用可能)。scripts/export_artifacts.pyを使用します。uv run alembic upgrade headは起動時に自動的に実行されます)。すべてを自分で実行する代わりに、完了したキャンペーンをロードできるよう、事前構築済みのデータセットを公開しています。各データセットは1つの完全なスナップショットの.tar.gzで、**https://flawed.s3.us-east-1.amazonaws.com**でホストされています。
単一のバンドル内のすべてのキャンペーン。
| バンドル | アーカイブ |
|---|---|
| すべてのキャンペーン | full.tar.gz |
Snapshots → Import datasetsで、上記のアーカイブリンクのいずれかを貼り付け、Find archivesをクリックします。FLAWEDは直接の.tar.gzリンクをそのままインポートし、スナップショットに展開します。その後、スナップショットリストからリストアします(リストアは別の、明示的に確認されるステップです)。
インポートが複数のアーカイブを一度に検出するのは、URLがリスト可能なバケットまたはディレクトリインデックスページである場合のみです。ここではどちらにも該当しないため、リンクを1つずつインポートしてください。
アーカイブをダウンロードし、スナップショットディレクトリ(FLAWED_HOST_SNAPSHOT_DIR、デフォルトでは./flawed-snapshots)に展開すると、スナップショットリストに表示され、リストアできる状態になります。
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"
インポートはバンドルをディスク上にステージングするだけです。現在のデプロイメントを置き換えるリストアは、スナップショットページから別途行います。
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)
テストにはDockerが必要です。テストはtestcontainersを介して独自のPostgresを起動します。
FLAWEDはMIT Licenseの下でリリースされています。コントリビューションを歓迎します。CONTRIBUTING.mdを参照し、セキュリティ問題はSECURITY.mdに従って非公開で報告してください。
| 機能 | 得られるもの |
|---|
| 反復サンプリング | 1回の実行で同じ入力をN回反復するため、結果は逸話ではなく分布になります。 |
| キャンペーン | 1つのバグをパッチャーのバリアントとプロンプトスタイル(曖昧な*「これ直して」*から完全なアドバイザリまで)にわたってスイープし、ライブダッシュボードで結果を比較できます。 |
| 結果の採点 | すべてのパッチは5つのシナリオのいずれかに分類されます。S1(クリーンな修正)からS5(バグを修正せず、新たな脆弱性を混入させた)まで。 |
| クロスバリデーション | パッチは他のモデルによって再判定され、主要な数値は自己検証とクロスバリデーションの両方の視点を平均するため、単一の判定者のバイアスが支配的になることはありません。 |
| チート検出 | 監査者が、エージェントがバグ自体を解決する代わりにアップストリームの修正を見つけてしまった反復をフラグ付けします。 |
| キャンペーン | パッチャーモデル | サイズ | アーカイブ |
|---|
| 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 |
| ドキュメント | 内容 |
|---|
docs/architecture.md | コンポーネント、データフロー、ストレージレイアウト |
docs/pipeline.md | ステージ、反復のセマンティクス、コンテナレイアウト |
docs/security-model.md | ステージごとのネットワークポリシー、サンドボックス化、脅威モデル |
docs/bug-specs.md | 入力コントラクト、プロンプト構成、バージョン管理 |
docs/cli.md | flawedコマンドリファレンス + 環境変数 |
docs/webapp.md | UIツアー |
docs/notebook.md | JupyterLab統合 + flawedヘルパーモジュール |
| タスク | コマンド |
|---|
| すべてのPython + Node依存関係を同期 | make dev |
| テストを実行 | make test |
| リント | make lint |
| 自動フォーマット | make format |
| Web開発サーバー(ポート5173) | make web-dev |
| E2Eスモークテスト | make e2e |