BHI: una nueva vulnerabilidad de clase Spectre que afecta a Intel y ARM
Investigadores de la Universidad Libre de Ámsterdam dieron a conocer hace poco que encontraron una nueva vulnerabilidad que es una versión extendida de la vulnerabilidad Spectre-v2 en los procesadores Intel y ARM.
Esta nueva vulnerabilidad, a la que han bautizado como BHI (Branch History Injection, CVE-2022-0001), BHB (Branch History Buffer, CVE-2022-0002) y Spectre-BHB (CVE-2022-23960), se caracteriza por permitir eludir los mecanismos de protección eIBRS y CSV2 agregados a los procesadores.
La vulnerabilidad se describe en diferentes manifestaciones del mismo problema, ya que BHI es un ataque que afecta a diferentes niveles de privilegio, por ejemplo, un proceso de usuario y el kernel, mientras que BHB es un ataque al mismo nivel de privilegio, por ejemplo, eBPF JIT y el kernel.
Sobre la vulnerabilidad
Conceptualmente, BHI es una variante extendida del ataque Spectre-v2, en el que eludir la protección adicional (Intel eIBRS y Arm CSV2) y organizar la fuga de datos, la sustitución de valores en el búfer con un historial de rama global (Búfer de historial de rama ), que se utiliza en la CPU para mejorar la bifurcación de la precisión de la predicción teniendo en cuenta el historial de transiciones pasadas.
En el curso de un ataque a través de manipulaciones con el historial de transiciones, se crean condiciones para la predicción incorrecta de la transición y la ejecución especulativa de las instrucciones necesarias, cuyo resultado se deposita en el caché.
Con la excepción de usar un búfer de historial de versión en lugar de un búfer de objetivo de versión, el nuevo ataque es idéntico a Spectre-v2. La tarea del atacante es crear tales condiciones que la dirección, al realizar una operación especulativa, se tome del área de los datos que se están determinando.
Después de realizar un salto indirecto especulativo, la dirección de salto leída de la memoria permanece en la memoria caché, después de lo cual se puede usar uno de los métodos para determinar el contenido de la memoria caché para recuperarlo en función de un análisis del cambio en el tiempo de acceso a la memoria caché y datos no almacenados en caché.
Los investigadores han demostrado un exploit funcional que permite que el espacio del usuario extraiga datos arbitrarios de la memoria del kernel.
Por ejemplo, se muestra cómo, usando el exploit preparado, es posible extraer de los buffers del kernel una cadena con un hash de la contraseña del usuario root, cargada desde el archivo /etc/shadow.
El exploit demuestra la capacidad de explotar la vulnerabilidad dentro de un único nivel de privilegio (ataque de kernel a kernel) utilizando un programa eBPF cargado por el usuario. Tampoco se descarta la posibilidad de utilizar los gadgets de Spectre existentes en el código del kernel, secuencias de comandos que conducen a la ejecución especulativa de instrucciones.
La vulnerabilidad aparece en la mayoría de los procesadores Intel actuales, con la excepción de la familia de procesadores Atom y en varios de los procesadores ARM.
Según la investigación, la vulnerabilidad no se manifiesta en los procesadores AMD. Para solucionar el problema, se han propuesto varios métodos de software para bloquear la vulnerabilidad, que pueden usarse antes de la aparición de la protección de hardware en futuros modelos de CPU.
Para bloquear ataques a través del subsistema eBPF, se recomienda deshabilitar por defecto la capacidad de cargar programas eBPF por parte de usuarios sin privilegios escribiendo 1 en el archivo «/proc/sys/kernel/unprivileged_bpf_disabled» o ejecutando el comando «sysctl -w kernel .unprivileged_bpf_disabled=1».
Para bloquear ataques a través de gadgets, se recomienda utilizar la instrucción LFENCE en secciones de código que potencialmente conduzcan a una ejecución especulativa. Es de destacar que la configuración predeterminada de la mayoría de las distribuciones de Linux ya contiene las medidas de protección necesarias suficientes para bloquear el ataque eBPF demostrado por los investigadores.
Las recomendaciones de Intel para deshabilitar el acceso sin privilegios a eBPF también se aplican de forma predeterminada a partir del kernel de Linux 5.16 y se adaptarán a ramas anteriores.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.