
Prueba de concepto del exploit para CVE-2020-8835, una vulnerabilidad del verificador BPF del kernel de Linux que permite acceso a memoria fuera de los límites y escalada de privilegios. Incluye instrucciones de compilación y pasos de mitigación basados en sysctl.
En el kernel de Linux 5.5.0 y posteriores, el verificador de BPF (kernel/bpf/verifier.c)
no restringe correctamente los límites de los registros para operaciones de 32 bits,
lo que provoca lecturas y escrituras fuera de los límites en la memoria del kernel.
Esta vulnerabilidad también afecta a la serie estable de Linux 5.4, a partir de v5.4.7,
ya que el commit que la introdujo fue retroportado a esa rama.
Esta vulnerabilidad fue corregida en 5.6.1, 5.5.14 y 5.4.29.
La mitigación para esta vulnerabilidad está disponible estableciendo el
sysctl 'kernel.unprivileged_bpf_disabled' a '1'.
Esto desactiva por completo el acceso no privilegiado a la syscall bpf().
Este problema también queda mitigado en sistemas que usan arranque
seguro, debido a la característica de bloqueo del kernel (lockdown) que impide
la carga de programas 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