Do infrastruktury pro nepřetržité fuzzingové testování OSS-Fuzz byla přidána možnost testování projektů napsaných v jazyce Lua, kromě dříve podporovaných jazyků C/C++, Go, Swift, Rust, Python, JavaScript a Java. Integrace byla realizována pomocí projektu luzer, který vyvíjí specializovaný nástrojový balík pro fuzzingové testování kódu v jazyce Lua a rozšíření pro Lua napsaná v C/C++.
Projekt používá knihovnu libFuzzer a může být použit společně s nástroji AddressSanitizer, MemorySanitizer, LeakSanitizer, ThreadSanitizer a Undefined Behavior Sanitizer, které na základě zjištěných problémů během fuzzingového testování určují přítomnost typických zranitelností vyvolaných přetečením bufferu, celočíselnými přetečeními, přístupem k neinitializovaným a uvolněným oblastem, úniky paměti, dereferencováním ukazatelů a problémy s nastavováním zámků. Kód projektu je dostupný pod licencí ISC.
Během práce luzer prochází možné kombinace vstupních dat a generuje zprávu o všech zjištěných selháních a nechycených výjimkách. Například při kontrole v luzer knihovny pro analýzu formátu MsgPack antirez/lua-cmsgpack bylo zjištěno, že data s velkým počtem polí mohou vést k přetečení zásobníku.
V rámci projektu lunapark se nástroj luzer používá pro testování PUC Rio Lua, trasovacího kompilátoru LuaJIT a vysoce výkonné databáze a serveru aplikací Tarantool, stejně jako pro testování třetích stran Lua modulů.
Vývojáři otevřených projektů mohou přidat své repozitáře pro testování tím, že připraví šablonu fuzzingového testování a odešlou speciální žádost prostřednictvím pull-requestu. Při nalezení chyb jsou vývojáři automaticky informováni a je vytvořena soukromá žádost na opravu (aby se předešlo předčasnému úniku informací o zranitelnostech, je tiket vytvářen v systému sledování chyb s omezeným přístupem). OSS Fuzz sleduje stav opravy chyby a automaticky uzavírá tiket, pokud přestane být reprodukovatelný. Informace o problému se stává veřejně dostupnou po 7 dnech od opravy nebo po 90 dnech od zjištění chyby, pokud problém zůstává neopravena.
Zdroj: opennet.ru
