
LLM powered fuzzing via OSS-Fuzz.
Эта платформа генерирует фаззинг-таргеты для реальных проектов на C/C++/Java/Python с помощью различных больших языковых моделей (LLM) и проводит их бенчмаркинг на платформе OSS-Fuzz.
Более подробная информация доступна в статье Фаззинг на основе ИИ: разрушая барьер в охоте за ошибками:

Поддерживаемые в настоящее время модели:
Сгенерированные фаззинг-таргеты оцениваются по четырём метрикам на основе самых актуальных данных из производственной среды:
OSS-Fuzz.Ниже приведён пример результатов эксперимента от 31 января 2024 г. Эксперимент включал 1300+ бенчмарков из 297 проектов с открытым исходным кодом.

В целом, этой платформе удаётся успешно использовать LLM для генерации корректных фаззинг-таргетов (обеспечивающих ненулевой прирост покрытия) для 160 проектов на C/C++. Максимальный прирост построчного покрытия по сравнению с существующими написанными вручную таргетами составляет 29%.
Обратите внимание, что эти отчёты не являются публичными, поскольку могут содержать нераскрытые уязвимости.
Ознакомьтесь с подробным руководством по использованию — в нём описано, как запустить эту платформу и сформировать отчёты на основе результатов.
Вы также можете запускать или оценивать отдельных агентов без проведения полных экспериментов, используя встроенную среду выполнения агентов. Подробные инструкции по запуску отдельных агентов или последовательностей агентов приведены в документации платформы.
Интересуетесь исследовательскими или open-source коллаборациями? Пожалуйста, создавайте issue или пишите нам: [email protected].
На данный момент мы сообщили о 30 новых ошибках/уязвимостях, найденных с помощью автоматически сгенерированных таргетов, созданных этой платформой:
Эти ошибки можно было обнаружить только с помощью вновь сгенерированных таргетов. Они были недостижимы с помощью существующих таргетов OSS-Fuzz.
* «Всего строк в проекте» — это объём исходного кода тестируемого проекта, скомпилированного и скомпонованного ранее существовавшими написанными вручную фаззинг-таргетами из OSS-Fuzz.
* «Общий прирост покрытия» вычисляется с использованием «Всего строк в проекте» в качестве знаменателя. «Общий относительный прирост» — это увеличение покрытия по сравнению с прежним количеством покрытых строк.
* При компиляции новых фаззинг-таргетов может быть включён дополнительный код тестируемого проекта, что приводит к высоким процентным приростам.
Для получения сведений о цитировании нажмите кнопку 'Cite this repository', расположенную в правой части этой страницы GitHub.
| Проект | Ошибка | LLM | Конструктор промптов | Оракул таргета |
|---|
cJSON | Чтение вне границ | Vertex AI | Default | Дальняя достижимость, низкое покрытие |
libplist | Чтение вне границ | Vertex AI | Default | Дальняя достижимость, низкое покрытие |
hunspell | Чтение вне границ | Vertex AI | default | Дальняя достижимость, низкое покрытие |
zstd | Запись вне границ | Vertex AI | default | Дальняя достижимость, низкое покрытие |
gdbm | Недополнение буфера стека | Vertex AI | default | Дальняя достижимость, низкое покрытие |
hoextdown | Использование неинициализированной памяти | Vertex AI | default | Дальняя достижимость, низкое покрытие |
pjsip | Чтение вне границ | Vertex AI | Default | Низкое покрытие с ключевым словом fuzz + лёгкие параметры, дальняя достижимость |
pjsip | Чтение вне границ | Vertex AI | Default | Низкое покрытие с ключевым словом fuzz + лёгкие параметры, дальняя достижимость |
gpac | Чтение вне границ | Vertex AI | Default | Низкое покрытие с ключевым словом fuzz + лёгкие параметры, дальняя достижимость |
gpac | Чтение/запись вне границ | Vertex AI | Default | Все |
gpac | Чтение вне границ | Vertex AI | Default | Все |
gpac | Чтение вне границ | Vertex AI | Default | Все |
sqlite3 | Чтение вне границ | Vertex AI | Default | Все |
htslib | Чтение вне границ | Vertex AI | Default | Все |
libical | Чтение вне границ | Vertex AI | Default | Все |
croaring | Чтение вне границ | Vertex AI | Test-to-harness | Все |
openssl | CVE-2024-9143 - Чтение/запись вне границ | Vertex AI | Default | Все |
liblouis | Использование неинициализированной памяти | Vertex AI | Test-to-harness | Идентификатор теста |
libucl | Чтение вне границ | Vertex AI | Default | Низкое покрытие с ключевым словом fuzz + лёгкие параметры, дальняя достижимость |
openbabel | Использование после освобождения | Vertex AI | Default | Низкое покрытие с ключевым словом fuzz + лёгкие параметры, дальняя достижимость |
libyang | Чтение вне границ | Vertex AI | Default | Все |
openbabel | Чтение вне границ | Vertex AI | Default | Все |
exiv2 | Чтение вне границ | Vertex AI | Default | Все |
| Не раскрывается | Java RCE (ожидает рассмотрения мейнтейнером) | Vertex AI | Default | Дальняя достижимость, низкое покрытие |
| Не раскрывается | Regexp DoS (ожидает рассмотрения мейнтейнером) | Vertex AI | Default | Дальняя достижимость, низкое покрытие |
| Не раскрывается | Чтение вне границ | Vertex AI | Default | Все |
| Не раскрывается | Запись вне границ | Vertex AI | Default | Все |
| Не раскрывается | Чтение вне границ | Vertex AI | Default | Все |
| Не раскрывается | Чтение вне границ | Vertex AI | Default | Все |
| Не раскрывается | Использование после освобождения | Vertex AI | Agent prompt | Все |
| Проект | Общий прирост покрытия | Общий относительный прирост | Всего покрыто строк OSS-Fuzz-gen | Новые покрытые строки OSS-Fuzz-gen | Существующие покрытые строки | Всего строк в проекте |
|---|
| phmap | 98.42% | 205.75% | 1601 | 1181 | 574 | 1120 |
| usbguard | 97.62% | 26.04% | 24550 | 5463 | 20979 | 3564 |
| onednn | 96.67% | 7057.14% | 5434 | 5434 | 77 | 210 |
| avahi | 82.06% | 155.90% | 3358 | 2814 | 1805 | 3046 |
| pugixml | 72.98% | 194.95% | 9015 | 6646 | 3409 | 7662 |
| librdkafka | 66.88% | 845.57% | 5019 | 4490 | 531 | 1169 |
| casync | 66.75% | 903.23% | 1171 | 1120 | 124 | 1678 |
| tomlplusplus | 61.06% | 331.10% | 4755 | 3652 | 1103 | 5981 |
| astc-encoder | 59.35% | 177.88% | 2726 | 1745 | 981 | 2940 |
| mruby | 48.56% | 0.00% | 34493 | 34493 | 0 | 71038 |
| arduinojson | 42.10% | 85.80% | 3344 | 1800 | 2098 | 4276 |
| json | 41.13% | 66.51% | 5051 | 3339 | 5020 | 8119 |
| double-conversion | 40.40% | 88.12% | 1663 | 779 | 884 | 1928 |
| tinyobjloader | 38.26% | 77.01% | 1157 | 717 | 931 | 1874 |
| glog | 38.18% | 58.69% | 895 | 331 | 564 | 867 |
| cppitertools | 35.78% | 45.07% | 253 | 151 | 335 | 422 |
| eigen | 35.38% | 190.70% | 2643 | 1947 | 1021 | 5503 |
| glaze | 34.55% | 30.06% | 2920 | 2416 | 8036 | 6993 |
| rapidjson | 31.83% | 148.07% | 1585 | 958 | 647 | 3010 |
| libunwind | 30.58% | 83.25% | 2899 | 1342 | 1612 | 4388 |
| openh264 | 30.07% | 50.14% | 6607 | 5751 | 11470 | 19123 |