Se ha descubierto una vulnerabilidad (CVE-2021-29154) en el subsistema eBPF que permite ejecutar controladores para seguimiento, análisis del funcionamiento de subsistemas y gestión del tráfico, ejecutándose dentro del núcleo de Linux en una máquina virtual especial con JIT, que permite a un usuario local lograr la ejecución de su código en nivel de kernel. El problema se manifiesta hasta la versión 5.11.12 (inclusive) y aún no se ha corregido en las distribuciones (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch). La corrección está disponible en forma de parche.
Según los investigadores que descubrieron la vulnerabilidad, han logrado desarrollar un prototipo funcional de exploit para sistemas de 32 y 64 bits x86, que puede ser utilizado por un usuario no privilegiado. Sin embargo, la empresa Red Hat señala que el peligro del problema depende de la disponibilidad para el usuario de la llamada al sistema eBPF. Por ejemplo, en RHEL y la mayoría de las otras distribuciones de Linux, en la configuración por defecto, la vulnerabilidad puede ser explotada si BPF JIT está habilitado y el usuario tiene derechos de CAP_SYS_ADMIN. Como medida de protección, se recomienda deshabilitar BPF JIT utilizando el comando: echo 0 > /proc/sys/net/core/bpf_jit_enable
El problema se debe a un error en el cálculo del desplazamiento para las instrucciones de ramificación durante la generación de código máquina por el compilador JIT. En particular, al generar instrucciones de ramificación no se considera que el desplazamiento puede cambiar después de la fase de optimización. Esta deficiencia puede ser utilizada para generar código máquina anómalo y ejecutarlo a nivel de núcleo.
Cabe destacar que esta no es la única vulnerabilidad en el subsistema eBPF en tiempos recientes. A finales de marzo se descubrieron otras dos vulnerabilidades (CVE-2020-27170, CVE-2020-27171) en el núcleo que permiten usar eBPF para eludir la protección contra vulnerabilidades de tipo Spectre, lo que permite determinar el contenido de la memoria del núcleo al establecer condiciones para la ejecución especulativa de ciertas operaciones. Para el ataque Spectre, se requiere que en el código privilegiado haya una determinada secuencia de comandos que conduzcan a la ejecución especulativa de instrucciones. Se han encontrado varias formas de generar tales instrucciones en eBPF mediante manipulaciones con los programas BPF que se pasan para su ejecución.
La vulnerabilidad CVE-2020-27170 se debe a la presencia de manipulaciones de punteros en el verificador BPF, que provocan operaciones especulativas que acceden a áreas fuera de los límites del búfer. La vulnerabilidad CVE-2020-27171 está relacionada con un error de aritmética entera (integer underflow) al trabajar con punteros, lo que lleva a un acceso especulativo a datos fuera del búfer. Los problemas mencionados ya han sido solucionados en las versiones del núcleo 5.11.8, 5.10.25, 5.4.107, 4.19.182 y 4.14.227, y también han sido incluidos en las actualizaciones del núcleo de la mayoría de las distribuciones de Linux. Los investigadores han preparado un prototipo de exploit que permite a un usuario sin privilegios extraer datos de la memoria del núcleo.
Fuente: opennet.ru
