
Артефакты, похожие на исправления, со встроенными дефектами
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 |