Descubrieron una vulnerabilidad en el subsistema eBPF de Linux
Hace poco se dio a conocer la noticia de que fue identificada una vulnerabilidad (CVE-2021-29154) en el subsistema eBPF, que permite ejecutar el seguimiento, el análisis del subsistema y los controladores de control de tráfico que se ejecutan dentro del kernel de Linux en una máquina virtual JIT especial que permite a un usuario local ejecutar su código a nivel de kernel.
Según los investigadores que identificaron la vulnerabilidad, pudieron desarrollar un prototipo funcional de un exploit para sistemas x86 de 32 y 64 bits que puede ser utilizado por un usuario sin privilegios.
Al mismo tiempo, Red Hat señala que la gravedad del problema depende de la disponibilidad de la llamada al sistema eBPF para el usuario. Por ejemplo, en RHEL y la mayorÃa de las otras distribuciones de Linux en la configuración predeterminada, la vulnerabilidad se puede aprovechar cuando BPF JIT está habilitado y el usuario tiene derechos CAP_SYS_ADMIN.
Se ha descubierto un problema en el kernel de Linux del que pueden abusar
usuarios locales sin privilegios para escalar privilegios.El problema es cómo calculan los compiladores BPF JIT para algunas arquitecturas
Desplazamientos de rama al generar código de máquina. Esto se puede abusar
para crear un código de máquina anómalo y ejecutarlo en el modo Kernel,
donde el flujo de control es secuestrado para ejecutar código inseguro.
Y es que detallan que el problema se debe a un error que se genera al calcular el desplazamiento de las instrucciones de bifurcación durante el compilador JIT que genera el código de máquina.
En particular se menciona que al generar las instrucciones de bifurcación, no se tiene en cuenta que el desplazamiento puede llegar a cambiar después de pasar por la etapa de optimización con lo cual esta falla puede usarse para poder generar código de máquina anómalo y ejecutarlo a nivel del kernel.
Cabe destacar que esta no es la única vulnerabilidad en el subsistema eBPF que se ha dado a conocer en los últimos años, ya que a finales de marzo, se identificaron dos vulnerabilidades más en el kernel (CVE-2020-27170, CVE-2020-27171), que brindan la capacidad de usar eBPF para poder eludir la protección contra vulnerabilidades de clase Spectre, que permiten determinar el contenido de la memoria del kernel y que da como resultado de la creación de condiciones para la ejecución especulativa de ciertas operaciones.
El ataque Spectre requiere la presencia de una secuencia especÃfica de comandos en el código privilegiado, lo que lleva a la ejecución especulativa de instrucciones. En eBPF, se han encontrado varias formas de generar tales instrucciones mediante manipulaciones con programas BPF transmitidos para su ejecución.
- La vulnerabilidad CVE-2020-27170 es causada por manipulaciones con punteros en el verificador BPF, que hacen que las operaciones especulativas accedan a un área fuera del búfer.
- La vulnerabilidad CVE-2020-27171 está relacionada con un error de subdesbordamiento de enteros cuando se trabaja con punteros, lo que conduce a un acceso especulativo a los datos fuera del búfer.
Estos problemas ya se han solucionado en las versiones del kernel 5.11.8, 5.10.25, 5.4.107, 4.19.182 y 4.14.227, y se han incluido en las actualizaciones del kernel para la mayorÃa de las distribuciones de Linux. Los investigadores han preparado un prototipo de explotación que permite a un usuario sin privilegios recuperar datos de la memoria del kernel.
En cuanto a una de las soluciones que proponen dentro de Red Hat es:
Mitigación:
Este problema no afecta a la mayorÃa de los sistemas de forma predeterminada. Un administrador tendrÃa que haber habilitado el BPF JIT para que se vea afectado.
Se puede deshabilitar inmediatamente con el comando:
# echo 0 > /proc/sys/net/core/bpf_jit_enableO se puede deshabilitar para todos los arranques posteriores del sistema estableciendo un valor en /etc/sysctl.d/44-bpf -jit-disable
## start file ## net.core.bpf_jit_enable=0</em> end file ##
Finalmente si estás interesado en conocer más al respecto sobre esta vulnerabilidad, puedes consultar los detalles en el siguiente enlace.
Cabe mencionar que problema persiste hasta la versión 5.11.12 (inclusive) y aún no se ha solucionado en la mayorÃa de las distribuciones, aun que la corrección ya está disponible como parche.