
A benchmark for LLM-driven bug discovery: 77 challenges across 43 open-source projects (C/C++/Java).
Бенчмарк для воспроизведения уязвимостей с помощью LLM на 77 реальных zero-day багах в 43 open-source проектах (C / C++ / Java).
Каждое задание даёт агенту только фаззинг-харнесс (цель) и исходники проекта на уязвимой ревизии — без патча, без фикс-коммита, без целевой строки. Агент должен найти входные данные, которые повторно вызывают сбой под сантайзером. Каждая оценка детерминирована (без LLM-судьи) и происходит внутри образа и офлайн: кандидат прогоняется через официальный харнесс с сантайзером, встроенный в контейнер задания, а результат оценивается по уникальным крашам, которые вызвал агент. Ничего не покидает машину, и никакой сервис поднимать не нужно.
| Заданий | Проектов | Языки | Оценка |
|---|---|---|---|
| 77 сквозных | 43 | C · C++ · Java | детерминированная — внутри образа, офлайн |
Ни в образах, ни в этом репозитории не раскрывается, в чём заключается баг —
задания названы нейтральными алиасами (<project>-NN, например avro-03), а
ключ ответа (PoC, ожидаемый сбой, собранная фикс-версия) отсутствует и там, и там:
он остаётся у мейнтейнера. Все 77: tools/sealed/CHALLENGES.md.
git clone https://github.com/fuzzingbrain/FuzzingBrain-Bench
cd FuzzingBrain-Bench
python3 -m venv .venv && source .venv/bin/activate # рекомендуется (и обязательно
# на Debian/Ubuntu, PEP 668)
pip install -e . # нужен Python ≥ 3.10 и Docker
# положите ключ(и) вашей модели в ./.env — подхватывается автоматически при каждом запуске, экспорт не нужен
cat > .env <<'EOF'
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
GEMINI_API_KEY=...
DEEPSEEK_API_KEY=sk-...
EOF
fb-bench list # 77 заданий (по алиасам)
fb-bench models # поддерживаемые модели + какие ключи загружены
(./.env читается автоматически; обычный export ANTHROPIC_API_KEY=... тоже работает.)
Повторно выполняйте
source .venv/bin/activateв каждой новой оболочке. Или пропустите venv сpip install --break-system-packages -e .(не рекомендуется).
fb-bench run скачивает публичный образ задания, запускает цикл агента на хосте
(вызывая API вашей модели) и оценивает каждого кандидата внутри этого образа —
без сети, ничего не нужно доставать. Требуются только Docker и ключ вашей модели,
а запуск оценивает уникальные краши, которые нашёл агент — идентичность краша
определяется типом сбоя сантайзера плюс его верхними кадрами стека, поэтому один
и тот же сбой, воспроизведённый двадцать раз, засчитывается один раз.
По умолчанию
--arm apiне требует ничего сверх перечисленного. Бэкенды--arm codexи--arm claudecodeтребуют дополнительных CLI от вендоров — опционально, устанавливаются отдельно (никогда не входят вpip install -e .); см. §4.
# Семейство Claude (haiku — самый дешёвый/быстрый; для сложных запусков меняйте на opus/sonnet)
fb-bench run avro-03 --model claude-haiku-4-5
# Семейство GPT
fb-bench run avro-03 --model gpt-5.5
# Семейство Gemini
fb-bench run avro-03 --model gemini-3.1-pro-preview
# Семейство DeepSeek (OpenAI-совместимый эндпоинт; нужен DEEPSEEK_API_KEY)
fb-bench run avro-03 --model deepseek-v4-flash
Модели: claude-haiku-4-5 · claude-sonnet-4-6 · claude-opus-4-8 ·
gpt-5.5 · gpt-5.4 · gpt-5 · gemini-3.1-pro-preview · gemini-2.5-flash ·
deepseek-v4-pro · deepseek-v4-flash
(любой id из каталога работает через --model; см. fb-bench models).
fb-bench run принимает один баг или много, одну модель или много. Одиночный
запуск — это просто матрица размером один, поэтому отдельной команды "sweep" нет:
# рекомендуемый полный запуск: одна модель на весь корпус, именованный вывод, PoC
# сохраняются (по умолчанию) для последующего просмотра. Агент продолжает охоту
# после первого краша, если не передать --stop-on-crash
fb-bench run all --model claude-haiku-4-5 --output run1 --max-turns 100
# курируемый кросс-модельный состав, все задания, 4 ячейки параллельно
fb-bench run all --model default-lineup --output sweep1 --jobs 4
# пара багов, по 3 сэмпла
fb-bench run avro-03,jq-01 --model gpt-5.5 --samples 3 --output probe
# просто перепечатать лидерборд из существующего запуска
fb-bench run all --model claude-haiku-4-5 --output run1 --report-only
<bugs> — это один алиас, список через запятую или all; --model — один id,
список через запятую, default-lineup или all. Результаты попадают в
output/<name>/<bug>/<model>/seed-N/ (score.json, episode.jsonl,
transcript.jsonl, cost.json, дистиллированный traj.md); в конце печатается
лидерборд. --output принимает простое имя (вложенное в output/) или путь
(используется как есть). Каждый запуск получает свою папку: опустите
--output — результат попадёт в output/run_<timestamp>; укажите имя уже
существующей папки — свежий запуск создаст <name>_<timestamp>, а не продолжит
в ней — так что два запуска никогда не делят результаты (--report-only —
единственный читатель, открывающий папку на месте).
run, выберите бэкенд через --armТри бэкенда агента используют одну точку входа. --arm выбирает, какой из
них ведёт задание; всё остальное (<bugs>, --jobs, --samples, --output,
папка запуска, лидерборд) одинаково для всех бэкендов.
fb-bench run avro-03 --model gpt-5.5 # --arm api (по умолчанию): модель провайдера
fb-bench run avro-03 --arm codex # OpenAI codex CLI (по умолчанию gpt-5.5)
fb-bench run avro-03 --arm claudecode --model sonnet --auth sub # Claude Code CLI
fb-bench run all --arm codex --jobs 4 # весь корпус, пакетно
--arm codex управляет codex exec от OpenAI через bench MCP-сервер.
--model задаёт модель codex (по умолчанию gpt-5.5), закреплённую через его config.toml.--arm claudecode управляет CLI Claude Code. --model выбирает модель
claude (sonnet/opus/haiku).Оба вендорских бэкенда принимают --auth {api,sub}: api = API-ключ
провайдера (OPENAI_API_KEY / ANTHROPIC_API_KEY, оплата по мере использования,
без троттлинга), sub = вход по подписке (codex: план ChatGPT
Plus/Pro/Business/Edu/Enterprise; claudecode: OAuth claude.ai). По умолчанию —
auto: предпочитает api, когда API-ключ присутствует, иначе переключается на sub.
Это опциональные дополнения и не устанавливаются через pip install -e ..
Бэкенду по умолчанию --arm api они никогда не нужны. Установите только тот CLI,
чей бэкенд вы планируете запускать (обоим нужен Node):
# --arm codex → OpenAI Codex CLI. Аутентифицируйтесь один раз, в соответствии с --auth:
npm install -g @openai/codex
# --auth api (по умолчанию, когда задан OPENAI_API_KEY):
printenv OPENAI_API_KEY | codex login --with-api-key
# --auth sub (нужен план ChatGPT Plus/Pro/Business/Edu/Enterprise; бесплатный
# аккаунт ChatGPT не может использовать модели codex):
codex login # войдите со своим планом ChatGPT
# --arm claudecode → Claude Code CLI.
npm install -g @anthropic-ai/claude-code
# --auth api (по умолчанию, когда задан ANTHROPIC_API_KEY): ничего делать не нужно
# --auth sub: одноразовый OAuth-вход claude.ai
claude