
eBPF-Fuzzer-Toolchain zum Generieren zufälliger eBPF-Programme und zur Validierung des Verhaltens von Kernel-Verifier/Laufzeitumgebung. Unterstützt coverage-guided Fuzzing und verfolgt entdeckte CVEs.
Buzzer ist eine Fuzzer-Toolchain, mit der eBPF-Fuzzing-Strategien geschrieben werden können.
Eine Fuzzing-Strategie ist eine Möglichkeit, zufällige eBPF-Programme zu erzeugen und anschließend zu validieren, dass sie kein unerwartetes Verhalten aufweisen.
Um den Fuzzer auszuführen, folgen Sie den nächsten Schritten:
Installieren Sie bazel.
Installieren Sie clang
Setzen Sie die korrekten CC- und CXX-Umgebungsvariablen
export CC=clang
export CXX=clang++
Führen Sie Folgendes aus:
bazel build :buzzer
Führen Sie Buzzer entweder als root aus:
sudo ./bazel-bin/buzzer_/buzzer
ODER mit CAP_BPF:
sudo setcap CAP_BPF=eip bazel-bin/buzzer_/buzzer
./bazel-bin/buzzer_/buzzer
Haben Sie mit Buzzer einen coolen Bug gefunden? Lassen Sie es uns über einen Pull Request wissen! Wir möchten alle mit diesem Framework entdeckten Probleme in diesem Abschnitt sammeln.
CVE-2023-2163: Ein Fehler in der Branch-Pruning-Logik des eBPF-Verifiers kann dazu führen, dass unsichere Pfade nicht untersucht werden. Die unsicheren, beschnittenen Pfade sind die tatsächlich ausgeführten Pfade, die zur Laufzeit genommen werden, was zu einer Diskrepanz zwischen den vom Verifier angenommenen Werten bestimmter Register und ihren tatsächlichen Werten führt. Diese Diskrepanz kann ausgenutzt werden, um beliebigen Speicher im Kernel zu lesen/schreiben, indem die verwechselten Register als Basisregister für Speicheroperationen verwendet werden.
CVE-2024-41003: Ein Fehler in der Registerlimit-Verfolgung des Verifiers erlaubt es einem Angreifer, den Verifier zu täuschen, sodass dieser annimmt, ein Register enthalte den Wert 0, obwohl es zur Laufzeit den Wert 1 annehmen könnte. Dies kann dann ausgenutzt werden, um beliebiges Lesen/Schreiben von Kernel-Speicher zu erreichen und zu einer lokalen Privilegienausweitung oder einem Container-Escape zu führen.