|
В инфраструктуру для непрерывного фаззинг-тестирования OSS-Fuzz добавлена возможность тестирования проектов, написанных на языке Lua, в дополнение к ранее поддерживаемым языкам C/C++, Go, Swift, Rust, Python, JavaScript и Java. Интеграция реализована с помощью проекта luzer, развивающего специализированный инструментарий для фаззинг-тестирования кода на языке Lua и расширений для Lua, написанных на C/C++.
Проект использует библиотеку libFuzzer и может применяться совместно с инструментами AddressSanitizer, MemorySanitizer, LeakSanitizer, ThreadSanitizer и Undefined Behavior Sanitizer, позволяющих на основе выявленных в процессе фаззинг-тестирования проблем, определять наличие типовых уязвимостей, вызванных переполнениями буфера, целочисленными переполнениями, обращением к неинициализированным и освобождённым областям, утечками памяти, разыменованием указателей и проблемами с установкой блокировок. Код проекта доступен под лицензией ISC.
В процессе работы luzer перебирает возможные комбинации входных данных и генерирует отчёт о всех выявленных сбоях и неперехваченных исключениях. Например, при проверке в luzer библиотеки разбора формата MsgPack antirez/lua-cmsgpack было выявлено, что данные с большим количеством массивов могут привести к переполнению стека.
В рамках проекта lunapark инструментарий luzer применяется для тестирования PUC Rio Lua, трассирующего компилятора LuaJIT, высокопроизводительной СУБД и сервера приложений Tarantool, а также для тестирования сторонних Lua-модулей.
Разработчики открытых проектов могут добавить свои репозитории для тестирования, подготовив шаблон фаззинг-тестирования и отправив специальную заявку через pull-запрос. При обнаружении ошибок, разработчикам автоматически отправляется уведомление и создаётся приватная заявка на исправление (чтобы исключить преждевременной утечки сведений об уязвимостях, тикет создаётся в системе отслеживания ошибок с ограниченным доступом). OSS Fuzz отслеживает состояние исправления ошибки и сам закрывает тикет, если он перестал воспроизводиться. Информация о проблеме становится публично доступной спустя 7 дней после исправления или спустя 90 дней с момента выявления ошибки, если проблема остаётся не исправленной.
|