
Toolchain de fuzzer eBPF para gerar programas eBPF aleatórios e validar o comportamento do verificador/runtime do kernel. Suporta fuzzing guiado por cobertura e rastreia CVEs descobertas.
Buzzer é uma toolchain de fuzzer que permite escrever estratégias de fuzzing eBPF.
Uma estratégia de fuzzing é uma forma de gerar Programas eBPF aleatórios e depois validar que eles não têm comportamento inesperado.
Para executar o fuzzer, siga os próximos passos
Instale o bazel.
Instale o clang
Configure corretamente as variáveis de ambiente CC e CXX
export CC=clang
export CXX=clang++
Execute
bazel build :buzzer
Execute o buzzer como root:
sudo ./bazel-bin/buzzer_/buzzer
OU com CAP_BPF:
sudo setcap CAP_BPF=eip bazel-bin/buzzer_/buzzer
./bazel-bin/buzzer_/buzzer
Encontrou um bug legal usando o Buzzer? Informe-nos por meio de um pull request! Gostaríamos de coletar todos os problemas descobertos com este framework nesta seção.
CVE-2023-2163: Um erro na lógica de poda de ramificações do verificador eBPF pode fazer com que caminhos inseguros não sejam explorados. Os caminhos podados inseguros são os caminhos reais percorridos em tempo de execução, o que causa uma discrepância entre o que o verificador acredita que são os valores de determinados registradores versus o que eles realmente são. Essa discrepância pode ser explorada para ler/gravar memória arbitrária no kernel usando os registradores confusos como registradores base para operações de memória.
CVE-2024-41003: Um bug no rastreamento de limites de registradores do verificador permite que um atacante engane o verificador fazendo-o pensar que um registrador contém um valor de 0 quando, em tempo de execução, esse registrador pode assumir um valor de 1. Isso pode então ser aproveitado para alcançar leitura/gravação arbitrária de memória do kernel e levar a uma escalada de privilégios local ou escape de contêiner.