Vulnerabilidad en el subsistema eBPF que permite la ejecución de código a nivel del kernel de Linux

Se ha identificado una vulnerabilidad (CVE-2021-4204) en el subsistema eBPF, que le permite ejecutar controladores dentro del kernel de Linux en una máquina virtual especial con JIT, lo que permite a un usuario local sin privilegios lograr una escalada de privilegios y ejecutar su código en el Nivel del kernel de Linux. El problema ha estado apareciendo desde el kernel de Linux 5.8 y sigue sin solucionarse (incluida la versión 5.16). El estado de las actualizaciones que se generan para solucionar el problema en las distribuciones se puede rastrear en estas páginas: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Se ha anunciado que se ha creado un exploit funcional, cuyo lanzamiento está previsto para el 18 de enero (se ha dado a los usuarios y desarrolladores una semana para corregir la vulnerabilidad).

La vulnerabilidad es causada por una verificación incorrecta de los programas eBPF transmitidos para su ejecución. El subsistema eBPF proporciona funciones auxiliares, cuyo uso correcto es verificado por un verificador especial. Algunas funciones requieren pasar un valor PTR_TO_MEM como argumento y, para evitar posibles desbordamientos del búfer, el verificador debe conocer el tamaño de la memoria asociada con el argumento. Para las funciones bpf_ringbuf_submit y bpf_ringbuf_discard, los datos sobre el tamaño de la memoria transferida no se informaron al verificador, lo que podría usarse para sobrescribir áreas de memoria más allá del límite del búfer al ejecutar código eBPF especialmente diseñado.

Para llevar a cabo un ataque, el usuario debe poder cargar su propio programa BPF, y muchas distribuciones recientes de Linux bloquean esta capacidad de forma predeterminada (incluido el acceso sin privilegios a eBPF ahora está prohibido de forma predeterminada en el propio kernel, a partir de la versión 5.16). Por ejemplo, la vulnerabilidad se puede explotar en la configuración predeterminada en Ubuntu 20.04 LTS, pero en los entornos Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 y Fedora 33 aparece solo si el administrador ha configurado el parámetro kernel.unprivileged_bpf_disabled a 0. Como solución alternativa para bloquear la vulnerabilidad, puede evitar la ejecución de programas BPF por parte de usuarios sin privilegios con el comando “sysctl -w kernel.unprivileged_bpf_disabled=1”.

Fuente: opennet.ru

Añadir un comentario