
Артефакты, похожие на исправления, со встроенными дефектами
Fix Like Artifacts with Embedded Defects
Исследовательский стенд для измерения того, насколько хорошо ИИ-агенты исправляют уязвимости.
Быстрый старт · Наборы данных · Документация · Модель безопасности · Участие в разработке
FLAWED извлекает проект с открытым исходным кодом на коммите с известной уязвимостью, передаёт ИИ-агенту описание бага и просит написать патч. Агент никогда не видит настоящее исправление из upstream.
Затем каждый патч проверяется, аудируется и оценивается в изолированных контейнерах, так что вы видите не только то, исправила ли модель баг, но и не внесла ли она по пути новые.
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 есть
доступ к сети. Каждая последующая стадия ограничена доступом только к API
провайдера LLM, поэтому агенты не могут получить подсказки или исправление из
upstream во время выполнения.
| Возможность | Что она даёт |
|---|---|
| Повторная выборка | Запуск выполняет N итераций одного и того же ввода, поэтому результаты — это распределения, а не отдельные случаи. |
| Кампании | Прогон одного бага по вариантам патчеров и стилям промптов, от расплывчатого «пофикси это плз» до полного advisory, и сравнение результатов на живой панели. |
| Оценка результатов | Каждый патч попадает в один из пяти сценариев, от S1 (чистое исправление) до S5 (баг не исправлен и внесена новая уязвимость). |
| Перекрёстная проверка | Патчи переоцениваются другими моделями, а итоговые числа усредняют оценки самопроверки и перекрёстной проверки, чтобы предвзятость отдельного судьи не доминировала. |
| Обнаружение читерства | Аудитор помечает итерации, в которых агент нашёл исправление из upstream вместо самостоятельного решения бага. |
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/. Перетащите одну на страницу Bug Specs в веб-интерфейсе
или используйте CLI.
./scripts/import-all-bugs.sh
[!NOTE] Первый прогон против крупного upstream (например, Chromium) идёт медленно. Стадия validate клонирует весь репозиторий один раз, чтобы сравнить с настоящим патчем из upstream. Клон кэшируется и переиспользуется в дальнейшем.
Вам нужны Docker, Node 20+, pnpm, uv и
@devcontainers/cli (npm i -g @devcontainers/cli). Пользователи Nix могут
использовать nix-shell для всего, кроме 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
Для цикла веб-разработки запустите make web-dev во втором терминале. Он
обслуживает UI на порту 5173 и проксирует /api на flawed serve.
Изолированный devcontainer для безопасного запуска ИИ-агентов
программирования против этого репозитория описан в
.devcontainer/README.md.
Спецификация бага — это единица ввода. Она содержит репозиторий, уязвимый коммит, описание бага, необязательный воспроизводитель и набор вариантов промпта, моделирующих то, как баг мог бы реалистично быть описан (находка SAST, отчёт bug-bounty, embargoed advisory, сырой PoC, …). Спецификации версионированы и неизменяемы, поэтому промпт и вердикт исторического прогона никогда не меняются незаметно.
Контракт JSON находится в bugs.schema.json и описан в
docs/bug-specs.md. Все поставляемые спецификации
описывают публично раскрытые уязвимости, исправленные в upstream.
Postgres — единственный источник истины. Метаданные прогонов и байты
артефактов (патчи, вердикты, транскрипты, логи) хранятся в базе данных,
поэтому развёртывание полностью описывается его БД. Каталог data/ — это
временная рабочая область, которую стадии монтируют во время выполнения.
scripts/export_dataset.py и scripts/import_dataset.py (также доступно из
веб-интерфейса).scripts/export_artifacts.py.uv run alembic upgrade head
выполняется автоматически при запуске).Мы публикуем готовые наборы данных, чтобы вы могли загружать завершённые
кампании вместо того, чтобы запускать всё самостоятельно. Каждый набор данных
— это .tar.gz одного полного снимка, размещённый по адресу
https://flawed.s3.us-east-1.amazonaws.com.
Все кампании в одном пакете.
| Пакет | Архив |
|---|---|
| Все кампании | full.tar.gz |
| Кампания | Модель-патчер | Размер | Архив |
|---|---|---|---|
| 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, вставьте одну из ссылок на архив выше и
нажмите Find archives. FLAWED импортирует прямую ссылку .tar.gz как есть
и распаковывает её в ваши снимки. Затем восстановите её из списка снимков
(восстановление — это отдельный шаг с явным подтверждением).
Импорт обнаруживает несколько архивов сразу только тогда, когда URL — это доступный для листинга бакет или страница-индекс каталога. Ни то, ни другое здесь не применимо, поэтому импортируйте ссылки по одной.
Скачайте архив, распакуйте его в каталог снимков
(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"
Импорт лишь размещает пакет на диске. Восстановление, которое заменяет текущее развёртывание, выполняется отдельно со страницы снимков.
| Документ | Что в нём |
|---|---|
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 |
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)
| Задача | Команда |
|---|---|
| Синхронизировать все зависимости Python + Node | make dev |
| Запустить тесты | make test |
| Линтинг | make lint |
| Автоформатирование | make format |
| Сервер веб-разработки (порт 5173) | make web-dev |
| E2E smoke-тест | make e2e |
Тестам нужен Docker. Они поднимают собственный Postgres через testcontainers.
FLAWED выпущен под лицензией MIT. Мы приветствуем вклад. См. CONTRIBUTING.md, и, пожалуйста, сообщайте о проблемах безопасности приватно согласно 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 |