Die Infrastruktur für kontinuierliches Fuzz-Testing von OSS-Fuzz hat die Möglichkeit zur Testung von Projekten, die in Lua geschrieben sind, zusätzlich zu den bereits unterstützten Sprachen C/C++, Go, Swift, Rust, Python, JavaScript und Java, hinzugefügt. Die Integration erfolgt über das Projekt luzer, das spezielle Werkzeuge für das Fuzz-Testing von Lua-Code und C/C++-Erweiterungen entwickelt.
Das Projekt nutzt die Bibliothek libFuzzer und kann zusammen mit Werkzeugen wie AddressSanitizer, MemorySanitizer, LeakSanitizer, ThreadSanitizer und Undefined Behavior Sanitizer verwendet werden, die es ermöglichen, basierend auf den während des Fuzz-Testings erkannten Problemen, typische Sicherheitsanfälligkeiten wie Buffer Overflows, Integer Overflows, Zugriff auf nicht initialisierte und freigegebene Bereiche, Speicherlecks, Dereferenzierung von Zeigern und Probleme mit Locking zu identifizieren. Der Code des Projekts steht unter der ISC-Lizenz zur Verfügung.
Während der Ausführung durchläuft luzer mögliche Kombinationen von Eingabedaten und erstellt einen Bericht über alle festgestellten Fehler und nicht abgefangenen Ausnahmen. Zum Beispiel wurde beim Testen der MsgPack-Parsing-Bibliothek antirez/lua-cmsgpack in luzer festgestellt, dass Daten mit einer hohen Anzahl von Arrays zu einem Stack-Overflow führen können.
Im Rahmen des Projekts lunapark wird das Werkzeug luzer zur Testung von PUC Rio Lua, dem Trace-Compiler LuaJIT, einer leistungsstarken Datenbank und сервера Tarantool-Anwendungen sowie zur Testung von Drittanbieter-Lua-Modulen eingesetzt.
Entwickler von Open-Source-Projekten können ihre Repositories zum Testen hinzufügen, indem sie eine Vorlage für Fuzzing-Tests erstellen und einen speziellen Antrag über einen Pull-Request einreichen. Bei Entdeckung von Fehlern erhalten die Entwickler automatisch eine Benachrichtigung und es wird ein privater Antrag zur Behebung erstellt (um eine vorzeitige Offenlegung von Informationen über Schwachstellen zu vermeiden, wird das Ticket in einem fehlerverfolgenden System mit eingeschränktem Zugang erstellt). OSS Fuzz überwacht den Status der Fehlerbehebung und schließt das Ticket, wenn der Fehler nicht mehr reproduzierbar ist. Informationen über das Problem werden 7 Tage nach der Behebung oder nach 90 Tagen nach der Entdeckung des Fehlers öffentlich zugänglich gemacht, falls das Problem nicht behoben wird.
Quelle: opennet.ru
