
Toolchain fuzzer eBPF per generare programmi eBPF casuali e validare il comportamento del verifier/runtime del kernel. Supporta il fuzzing guidato dalla copertura e tiene traccia delle CVE scoperte.
Buzzer è una toolchain di fuzzing che consente di scrivere strategie di fuzzing eBPF.
Una strategia di fuzzing è un modo per generare programmi eBPF casuali e poi verificare che non abbiano comportamenti imprevisti.
Per eseguire il fuzzer, segui i seguenti passaggi
Installa bazel.
Installa clang
Imposta le variabili d'ambiente CC e CXX corrette
export CC=clang
export CXX=clang++
Esegui
bazel build :buzzer
Esegui buzzer come root:
sudo ./bazel-bin/buzzer_/buzzer
OPPURE con CAP_BPF:
sudo setcap CAP_BPF=eip bazel-bin/buzzer_/buzzer
./bazel-bin/buzzer_/buzzer
Hai trovato un bug interessante usando Buzzer? Facci sapere tramite una pull request! Vorremmo raccogliere in questa sezione tutti i problemi scoperti con questo framework.
CVE-2023-2163: Un errore nella logica di pruning dei rami del verifier eBPF può far sì che i percorsi non sicuri non vengano esplorati. I percorsi potati non sicuri sono i percorsi effettivamente seguiti a runtime, il che causa una discrepanza tra i valori che il verifier ritiene abbiano alcuni registri e i loro valori reali. Questa discrepanza può essere sfruttata per leggere/scrivere memoria arbitraria nel kernel utilizzando i registri confusi come registri base per le operazioni di memoria.
CVE-2024-41003: Un bug nel tracciamento dei limiti dei registri del verifier consente a un attaccante di indurre il verifier a pensare che un registro contenga il valore 0 quando, a runtime, quel registro potrebbe assumere il valore 1. Questo può essere poi sfruttato per ottenere lettura/scrittura arbitraria della memoria del kernel e portare a un'escalation dei privilegi locale o alla fuga dal container.