Encontraron una vulnerabilidad de ejecución especulativa que afecta a AMD
Hace poco el proyecto Grsecurity dio a conocer mediante una publicación los detalles y una demostración de un método de ataque para una nueva vulnerabilidad (ya catalogada como CVE-2021-26341) en procesadores AMD relacionada con la ejecución de instrucciones especulativas después de operaciones de salto hacia adelante incondicionales.
La vulnerabilidad permite que el procesador procese especulativamente la instrucción inmediatamente después de la instrucción de salto (SLS) en la memoria durante la ejecución especulativa. Al mismo tiempo, dicha optimización funciona no solo para operadores de salto condicional, sino también para instrucciones que implican un salto incondicional directo, como JMP, RET y CALL.
Las instrucciones de bifurcación incondicionales pueden ser seguidas por datos arbitrarios que no están destinados a la ejecución. Después de determinar que la bifurcación no implica la ejecución de la siguiente instrucción, el procesador simplemente revierte el estado y no tiene en cuenta la ejecución especulativa, pero el rastro de la ejecución de la instrucción permanece en el caché general y está disponible para su análisis utilizando métodos de recuperación de canal lateral.
AMD proporciona una actualización para una mitigación recomendada, la mitigación G-5, en el documento técnico «Técnicas de software para administrar la especulación en los procesadores AMD». La mitigación G-5 ayuda a abordar las posibles vulnerabilidades asociadas con el comportamiento especulativo de las instrucciones de bifurcación.
Los procesadores AMD pueden ejecutar instrucciones de forma transitoria siguiendo una bifurcación directa incondicional que puede resultar en una actividad de caché
Al igual que con la explotación de la vulnerabilidad Spectre-v1, un ataque requiere la presencia de ciertas secuencias de instrucciones (gadgets) en el núcleo, lo que lleva a una ejecución especulativa.
En este caso, bloquear una vulnerabilidad se reduce a identificar dichos dispositivos en el código y agregarles instrucciones adicionales que bloqueen la ejecución especulativa. Las condiciones para la ejecución especulativa también se pueden crear utilizando programas sin privilegios que se ejecutan en la máquina virtual eBPF.
Esta investigación resultó en el descubrimiento de una nueva vulnerabilidad, CVE-2021-26341 [1] , que discutiremos en detalle en este artículo. Como de costumbre, nos centraremos en los aspectos técnicos de la vulnerabilidad, las mitigaciones sugeridas por AMD y los aspectos de explotación.
Para bloquear la capacidad de construir dispositivos usando eBPF, se recomienda deshabilitar el acceso sin privilegios a eBPF en el sistema («sysctl -w kernel.unprivileged_bpf_disabled=1«).
La vulnerabilidad afecta a los procesadores basados en la microarquitectura Zen1 y Zen2:
Escritorio
- Procesador AMD Athlon™ X4
- Procesador AMD Ryzen™ Threadripper™ PRO
- Procesadores AMD Ryzen™ Threadripper™ de segunda generación
- Procesadores AMD Ryzen™ Threadripper™ de tercera generación
- APU AMD serie A de séptima generación
- Procesadores de escritorio AMD Ryzen™ serie 2000
- Procesadores de escritorio AMD Ryzen™ serie 3000
- Procesadores de escritorio AMD Ryzen™ serie 4000 con gráficos Radeon™
Móvil
- Procesador móvil AMD Ryzen™ serie 2000
- Procesadores móviles AMD Athlon™ serie 3000 con gráficos Radeon™
- Procesadores móviles AMD Ryzen™ serie 3000 o procesadores móviles AMD Ryzen™ de segunda generación con gráficos Radeon™
- Procesadores móviles AMD Ryzen™ serie 4000 con gráficos Radeon™
- Procesadores móviles AMD Ryzen™ serie 5000 con gráficos Radeon™
Chromebook
- Procesadores móviles AMD Athlon™ con gráficos Radeon™
Servidor
- Procesadores AMD EPYC™ de primera generación
- Procesadores AMD EPYC™ de segunda generación
Se menciona que si el ataque tiene éxito, la vulnerabilidad permite determinar el contenido de áreas de memoria arbitrarias.
Debido a esta vulnerabilidad, podría ser posible identificar construcciones de código benignas que en las CPU afectadas forman dispositivos SLS limitados, pero potencialmente explotables. Como se demostró con el ejemplo de eBPF, también es posible explotar la vulnerabilidad con dispositivos construidos manualmente y autoinyectados. El método presentado se puede usar, por ejemplo, para romper la mitigación KASLR del kernel de Linux.
Por ejemplo, los investigadores han preparado un exploit que le permite determinar el diseño de la dirección y eludir el mecanismo de protección KASLR (aleatorización de la memoria del núcleo) mediante la ejecución de código sin privilegios en el subsistema del núcleo eBPF, ademas de que no se descartan otros escenarios de ataque que puedan filtrar el contenido de la memoria del kernel.
Finalmente si estás interesado en poder conocer un poco más al respecto, puedes consultar los detalles en el siguiente enlace.