
Chaîne d'outils de fuzzing eBPF pour générer des programmes eBPF aléatoires et valider le comportement du vérificateur et de l'exécution du noyau. Prend en charge le fuzzing guidé par couverture et suit les CVE découvertes.
Buzzer est une chaîne d'outils de fuzzing qui permet d'écrire des stratégies de fuzzing eBPF.
Une stratégie de fuzzing est une manière de générer des programmes eBPF aléatoires puis de valider qu'ils n'ont pas de comportement inattendu.
Pour exécuter le fuzzer, suivez les étapes suivantes
Installez bazel.
Installez clang
Définissez correctement les variables d'environnement CC et CXX
export CC=clang
export CXX=clang++
Exécutez
bazel build :buzzer
Exécutez buzzer soit en tant que root :
sudo ./bazel-bin/buzzer_/buzzer
OU avec CAP_BPF :
sudo setcap CAP_BPF=eip bazel-bin/buzzer_/buzzer
./bazel-bin/buzzer_/buzzer
Avez-vous trouvé un bug intéressant en utilisant Buzzer ? Faites-le-nous savoir via une pull request ! Nous aimerions collecter tous les problèmes découverts avec ce framework dans cette section.
CVE-2023-2163: Une erreur dans la logique d'élagage de branches du vérificateur eBPF peut faire que des chemins non sûrs ne soient pas explorés. Les chemins élagués non sûrs sont les chemins réellement empruntés à l'exécution, ce qui provoque une divergence entre ce que le vérificateur pense que valent certains registres et leurs valeurs réelles. Cette divergence peut être exploitée pour lire/écrire de la mémoire arbitraire dans le noyau en utilisant les registres confus comme registres de base pour les opérations mémoire.
CVE-2024-41003: Un bug dans le suivi des limites de registres du vérificateur permet à un attaquant de tromper le vérificateur en lui faisant croire qu'un registre contient la valeur 0 alors qu'au moment de l'exécution ce registre pourrait prendre la valeur 1. Cela peut ensuite être exploité pour réaliser une lecture/écriture arbitraire de la mémoire du noyau et conduire à une élévation de privilèges locale ou à une évasion de conteneur.