Vulnerabilidade no subsistema eBPF que permite a execución de código a nivel do núcleo de Linux

Identificouse unha vulnerabilidade (CVE-2021-4204) no subsistema eBPF, que lle permite executar controladores dentro do núcleo de Linux nunha máquina virtual especial con JIT, o que permite que un usuario local sen privilexios alcance a escalada de privilexios e execute o seu código no Nivel de kernel de Linux. O problema aparece dende o núcleo de Linux 5.8 e segue sen solucionarse (incluída a versión 5.16). O estado das actualizacións que se xeran para solucionar o problema nas distribucións pódese seguir nestas páxinas: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Anunciuse que se creou un exploit que funciona, que está previsto que se publique o 18 de xaneiro (os usuarios e desenvolvedores teñen unha semana para solucionar a vulnerabilidade).

A vulnerabilidade é causada pola verificación incorrecta dos programas eBPF transmitidos para a súa execución. O subsistema eBPF proporciona funcións auxiliares, cuxo uso correcto é verificado por un verificador especial. Algunhas funcións requiren pasar un valor PTR_TO_MEM como argumento e, para evitar posibles desbordamentos do búfer, o verificador debe coñecer o tamaño da memoria asociada ao argumento. Para as funcións bpf_ringbuf_submit e bpf_ringbuf_discard, os datos sobre o tamaño da memoria transferida non foron informados ao verificador, que podería usarse para sobrescribir áreas de memoria máis aló do límite do búfer ao executar código eBPF deseñado especialmente.

Para levar a cabo un ataque, o usuario debe poder cargar o seu propio programa BPF, e moitas distribucións recentes de Linux bloquean esta capacidade por defecto (incluíndo o acceso sen privilexios a eBPF agora está prohibido por defecto no propio núcleo, a partir da versión 5.16). Por exemplo, a vulnerabilidade pódese explotar na configuración predeterminada en Ubuntu 20.04 LTS, pero nos entornos Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 e Fedora 33 só aparece se o administrador estableceu o parámetro kernel.unprivileged_bpf_disabled a 0. Como solución alternativa para bloquear a vulnerabilidade, pode evitar a execución de programas BPF por usuarios sen privilexios co comando "sysctl -w kernel.unprivileged_bpf_disabled=1".

Fonte: opennet.ru

Engadir un comentario