
Toolchain de fuzzing eBPF para generar programas eBPF aleatorios y validar el comportamiento del verificador/tiempo de ejecución del kernel. Admite fuzzing guiado por cobertura y realiza seguimiento de las CVEs descubiertas.
Buzzer es un conjunto de herramientas de fuzzing que permite escribir estrategias de fuzzing para eBPF.
Una estrategia de fuzzing es una forma de generar programas eBPF aleatorios y luego validar que no tengan un comportamiento inesperado.
Para ejecutar el fuzzer sigue los siguientes pasos
Instala bazel.
Instala clang
Configura las variables de entorno CC y CXX correctas
export CC=clang
export CXX=clang++
Ejecuta
bazel build :buzzer
Ejecuta buzzer como root:
sudo ./bazel-bin/buzzer_/buzzer
O con CAP_BPF:
sudo setcap CAP_BPF=eip bazel-bin/buzzer_/buzzer
./bazel-bin/buzzer_/buzzer
¿Encontraste un bug interesante usando Buzzer? ¡Haznoslo saber mediante un pull request! Nos gustaría recopilar todos los problemas descubiertos con este framework en esta sección.
CVE-2023-2163: Un error en la lógica de poda de ramas del verificador eBPF puede provocar que rutas inseguras no sean exploradas. Las rutas podadas inseguras son las rutas reales tomadas en tiempo de ejecución, lo que causa un desajuste entre lo que el verificador cree que son los valores de ciertos registros y lo que realmente son. Este desajuste puede ser aprovechado para leer/escribir memoria arbitraria en el kernel usando los registros confundidos como registros base para operaciones de memoria.
CVE-2024-41003: Un bug en el seguimiento del límite de registros del verificador permite a un atacante engañar al verificador para que piense que un registro contiene un valor de 0 cuando en tiempo de ejecución este registro podría tomar un valor de 1. Esto puede ser aprovechado para lograr lectura/escritura arbitraria de memoria del kernel y conducir a una escalada de privilegios local o escape de contenedor.