
Preuve de concept d'exploit pour CVE-2020-8835, une vulnérabilité du vérificateur BPF du noyau Linux permettant un accès mémoire hors limites et une escalade de privilèges. Inclut des instructions de compilation et des étapes d'atténuation basées sur sysctl.
Dans le noyau Linux 5.5.0 et versions ultérieures, le vérificateur BPF
(kernel/bpf/verifier.c) ne restreint pas correctement les bornes des
registres pour les opérations 32 bits, ce qui entraîne des lectures et
écritures hors limites dans la mémoire du noyau.
Cette vulnérabilité affecte également la série stable Linux 5.4, à
partir de v5.4.7, car le commit ayant introduit le problème a été
rétroporté sur cette branche. Cette vulnérabilité a été corrigée dans
les versions 5.6.1, 5.5.14 et 5.4.29.
Une atténuation pour cette vulnérabilité est disponible en définissant
le sysctl 'kernel.unprivileged_bpf_disabled' à '1'.
Cela désactive complètement l'accès non privilégié à l'appel système
bpf().
Ce problème est également atténué sur les systèmes utilisant un
démarrage sécurisé (Secure Boot), grâce à la fonction de verrouillage
(lockdown) du noyau qui bloque le chargement des programmes BPF.
gcc -o exploit ./exploit.c
$ sudo sysctl kernel.unprivileged_bpf_disabled=1
$ echo kernel.unprivileged_bpf_disabled=1 | \
sudo tee /etc/sysctl.d/90-CVE-2020-8835.conf
$ sysctl -w kernel.unprivileged_bpf_disabled=1