Ejecutando código del núcleo en un Pixel 8 con MTE habilitado: protección avanzada y optimización

Elena Digital López

En noviembre de 2023, se identificó una vulnerabilidad significativa en las unidades de procesamiento gráfico (GPU) Arm Mali, específicamente en la serie Pixel 7 y Pixel 8 de Google. Esta vulnerabilidad, catalogada como CVE-2023-6241, fue reportada a Arm el 15 de noviembre y se corrigió en la versión r47p0 del controlador Mali, disponible públicamente desde el 14 de diciembre de 2023. Posteriormente, la actualización de seguridad de marzo de Android también abordó este problema.

La vulnerabilidad permitiría a una aplicación maliciosa de Android obtener una ejecución arbitraria de código en el kernel y acceso root en el dispositivo. Afecta principalmente a dispositivos que utilizan la función Command Stream Frontend (CSF) de las GPUs Mali. La gravedad del problema radica en que es un error lógico en la unidad de gestión de memoria de la GPU, capaz de esquivar la Extensión de Etiquetado de Memoria (MTE), una potente mitigación contra la corrupción de memoria que debutó en el Pixel 8.

El investigador encargado de descubrir la vulnerabilidad demostró cómo aprovechar este fallo para ejecutar código arbitrario en el kernel del Pixel 8 desde una aplicación de usuario no confiable. El exploit, verificado incluso con el MTE del kernel habilitado, señala un importante desafío para esa tecnología supuestamente robusta contra la corrupción de memoria.

La MTE está diseñada para mejorar la seguridad de la memoria mediante la introducción de etiquetas en las direcciones de memoria para detectar accesos inválidos. Esta tecnología, integrada desde la versión v8.5a de la arquitectura Arm, parece insuficiente frente a ciertos tipos de ataques. La ejecución lógica errónea permite no solo eludirla, sino también aprovechar debilidades estructurales en la gestión de memoria GPU.

El fallo en la GPU Mali se relaciona con problemas anteriores, como el GHSL-2023-005, en el que exploits previos lograron obtener acceso no autorizado mediante manipulaciones en el tamaño físico y virtual de las regiones de memoria administradas por el controlador de la GPU. En ese caso, la gestión de la memoria JIT (Just In Time), que depende de comandos software y hardware administrados por la CPU del dispositivo, se vio comprometida.

En resumen, CVE-2023-6241 explota una carrera entre la asignación y la liberación de memoria en la GPU, permitiendo alterar estados esperados de mapeo de memoria. Este fenómeno se desencadena principalmente cuando se gestionan simultáneamente tareas de asignación y liberación de memoria, utilizando comandos GPU en piloto automático.

El exploit resultante efectivamente deja regiones de memoria accidentalmente mapeadas a direcciones ya liberadas, permitiendo el acceso a páginas de memoria previamente liberadas, lo que supone un alto riesgo de seguridad. Esta técnica involucra manipular las tablas de páginas globales (PGD) de los contextos de GPU para redirigir el acceso y, últimamente, modificar casi cualquier dirección de memoria del kernel, incluyendo código y datos del sistema.

Este incidente subraya la importancia de evaluar y mitigar continuamente posibles vulnerabilidades en coprocesadores y sus controladores, especialmente en un entorno donde la seguridad del sistema operativo es cada vez más robusta. La explotación de potenciales lagunas en los módulos de hardware muestra un futuro donde los ataques pueden dirigirse a componentes menos vigilados, pero igualmente críticos.

Scroll al inicio