Projekty integrują się przez pliki build (Dockerfile + build.sh) definiujące sposób budowania celów fuzzingowych. OSS-Fuzz kompiluje kod z wybranym silnikiem fuzzingu (libFuzzer/AFL++/Honggfuzz/Centipede) i sanityzerami (address/memory/undefined), a następnie uruchamia je masowo w rozproszonej infrastrukturze ClusterFuzz. Wykryte awarie są deduplikowane, minimalizowane i zgłaszane maintainerom w ramach procesu odpowiedzialnego ujawniania, a poprawki są automatycznie weryfikowane. Rozszerzenie OSS-Fuzz-Gen używa LLM-ów do generowania nowych harnessów fuzzingowych i ocenia je względem istniejących pod kątem kompilowalności, awarii w czasie wykonania i pokrycia kodu.
Krytyczne oprogramowanie open source było testowane fuzzingiem rzadko i doraźnie, przez co poważne podatności (np. Heartbleed) długo pozostawały niewykryte. OSS-Fuzz zapewnia stały, zautomatyzowany fuzzing na infrastrukturze Google z szybkim raportowaniem awarii i regresji do maintainerów.
Skalowalny backend uruchamiający cele fuzzingowe na dużej liczbie maszyn, deduplikujący i minimalizujący awarie oraz zarządzający ich cyklem życia.
libFuzzer, AFL++, Honggfuzz i Centipede — silniki generujące i mutujące dane wejściowe w poszukiwaniu awarii.
Oficjalna
AddressSanitizer, MemorySanitizer i UndefinedBehaviorSanitizer wykrywają błędy pamięci i niezdefiniowane zachowania podczas wykonywania celów fuzzingowych.
Oficjalna
Obrazy Docker z plikami build.sh definiują reprodukowalny sposób kompilacji celów fuzzingowych dla każdego projektu.
Framework wykorzystujący duże modele językowe (Gemini, GPT) do automatycznego pisania i oceny harnessów fuzzingowych dla projektów OSS-Fuzz.
Oficjalna
Google uruchamia OSS-Fuzz (ogłoszenie 1 grudnia 2016) po podatności Heartbleed, we współpracy z Core Infrastructure Initiative.
Google udostępnia OSS-Fuzz-Gen — framework wykorzystujący LLM do automatycznego generowania targetów fuzzingowych.
Targety wygenerowane przez LLM w OSS-Fuzz-Gen znalazły 30 nowych błędów, w tym CVE-2024-9143 w OpenSSL, nieosiągalnych dla wcześniejszych, ręcznych targetów.
Silnik generujący dane wejściowe dla celu fuzzingowego.
Instrumentacja wykrywająca błędy w czasie wykonania. Domyślnie address i undefined.
Język programowania fuzzowanego projektu.
Fuzzing jest zadaniem CPU-bound; OSS-Fuzz uruchamia cele na klastrach x86_64/i386 bez potrzeby akceleratorów.