GitHub Security Lab отдала фаззинг C/C++ агенту: от репозитория до отчёта о баге

GitHub Security Lab разобрала Fuzzing Taskflow — автономный фаззинг C/C++ на Taskflow Agent: достаточно slug репозитория на GitHub, дальше пайплайн сам ищет точки входа, разбирает сборку, пишет harness, крутит AFL++, читает отчёты покрытия и оформляет отчёт по каждому уникальному крашу. Агент забирает цикл «снять coverage → дописать обвязку», который раньше делали вручную по LCOV.
Запуск — Codespace репозитория GitHubSecurityLab/seclab-taskflows-fuzzing и скрипт ./scripts/fuzzing/run_fuzzing.sh owner/repo. Для дымового теста в примере — DaveGamble/cJSON, для полной цели можно указать, например, tukaani-project/xz. Модель по умолчанию — Claude Sonnet 5 в src/seclab_taskflows_fuzzing/configs/model_config.yaml. Предупреждение жёсткое: afl-fuzz, clang и произвольные команды сборки идут на хост без контейнера, поэтому только одноразовая среда вроде Codespace.
Как устроено
- Оболочка
run_fuzzing.shсвязывает этапы. - YAML taskflow на шаг — промпты для агента.
- MCP-тулы выполняют примитивы: AFL, компиляция harness, чтение coverage, сохранение краша.
Агент принимает решения, тулы только исполняют. Состояние лежит в SQLite fuzz_context.db — этапы не передают данные в памяти. Каждая обвязка собирается дважды: .afl с инструментацией AFL и санитайзерами для фаззинга и .cov с профилем покрытия; очередь AFL потом прогоняют по нему для построчного отчёта.
Цикл по покрытию
На каждой итерации агент гоняет AFL с бюджетом времени, снимает реальное покрытие с .cov и смотрит непокрытые ветки. Дальше — новый seed, правка harness, обогащение словаря AFL константами из guard или пропуск «холодного» пути. Бюджеты удваиваются: 30 с → 60 → 120 → 240 → 480 → 960 с — около 32 минут на target. Остановка по plateau: две итерации подряд прирост line coverage меньше 1% — и пайплайн переключается.
Краши и дашборд
После кампании краши минимизируют через afl-tmin, воспроизводят под ASan и дедуплицируют по хешу верхних кадров стека. Агент выставляет вердикт — vulnerability, harness_bug, library_hardening и другие — с root-cause, file:line, диффом фикса и наброском регресс-теста; патчи помечены как требующие ревью. Параллельно поднимается HTML-дашборд на порту 8765 с пульсом по harness, трендом coverage и таймлайном итераций.
Источник: AI-powered fuzzing with the GitHub Security Lab Taskflow Agent.