Descubrimos varias vulnerabilidades que afectan la cadena de arranque de varios dispositivos Samsung. Encadenadas, nos permiten ejecutar código en el cargador de arranque, obtener acceso root en Android con persistencia y, por último, filtrar cualquier cosa de la memoria de Secure World, incluidas las claves del almacén de claves de Android
Introducción
Nos centramos en el dispositivo de gama media Samsung Galaxy A225F, sobre el que habíamos recopilado un buen conocimiento sobre su proceso de arranque durante nuestra investigación anterior en la que analizamos el esquema de cifrado basado en archivos de Android . Las vulnerabilidades afectan a dos componentes críticos del sistema: Little Kernel, que es el tercer gestor de arranque responsable de arrancar el sistema operativo Android, y Secure Monitor, que es el software que se ejecuta con los privilegios más altos en el dispositivo. Otros dispositivos de la familia Galaxy A también se ven afectados por algunas de estas vulnerabilidades.
En BlackHat USA 2024, presentamos cómo descubrimos y explotamos estas vulnerabilidades . También está disponible un informe técnico que describe el trabajo realizado .
Junto con esta publicación de blog, publicamos la prueba de concepto de las 4 vulnerabilidades que descubrimos en Github .
Pequeño núcleo
Las dos vulnerabilidades en Little Kernel son las siguientes:
- CVE-2024-20832 (SVE-2023-2079): Desbordamiento de pila en Little Kernel
Samsung agregó un analizador JPEG personalizado en Little Kernel que se utiliza para mostrar logotipos y mensajes de error durante el arranque. El código responsable de cargar el archivo JPEG lo colocará en una estructura de tamaño fijo en el montón, pero nunca verifica el tamaño del archivo, lo que provoca un desbordamiento del montón.
Y gracias a la simplicidad del algoritmo heap y la falta de mitigación, es posible explotar esta vulnerabilidad y lograr la ejecución de código en Little Kernel, con persistencia (debería sobrevivir a reinicios y restablecimientos de fábrica).
Es interesante notar que la partición que contiene los JPEG (llamada
up_param) no se verifica durante el arranque, lo que permite que un atacante con la capacidad de modificar la memoria interna del dispositivo los cambie y active la vulnerabilidad.
- CVE-2024-20865 (SVE-2024-0234): omisión de autenticación de Odin en Little Kernel
Sin embargo, hemos descubierto una vulnerabilidad que nos permite eludir la autenticación. Little Kernel utiliza dos tablas de particiones: la GPT (GUID Partition Table) y la PIT (Partition Information Table), que utiliza Odin. Resulta que la GPT se puede flashear a través de Odin sin autenticación. Aprovechamos este problema para modificar la PIT y permitirnos flashear otra partición sin autenticación. Gracias a este problema, podemos flashear datos arbitrarios en la memoria interna del dispositivo a través de USB, que incluye la partición up_paramque contiene los JPEG necesarios para explotar la vulnerabilidad anterior.
Odin es el sistema de recuperación implementado por Samsung en Little Kernel, y nos permite flashear particiones a través de USB. Odin autentificará las imágenes que se flasheen, por lo que las imágenes deben estar firmadas (y no debería ser posible flashear imágenes personalizadas).
Al encadenar estas dos vulnerabilidades podemos, a través de USB, ejecutar código en Little Kernel con persistencia. Y como Little Kernel es el responsable de verificar y arrancar Android, usamos nuestro exploit para parchear el código y deshabilitar la verificación de la boot imagen. De esa manera podemos arrancar un sistema Android modificado (en este caso, rooteado).
A estas alturas ya podemos hacer muchas cosas con nuestros privilegios root en Android (como acceder a la mayoría de los datos del usuario). Pero, por diseño, algunos componentes como las claves del Android Keystore no son accesibles, ni siquiera por root, ya que están protegidas con Secure World. Para conseguirlas, necesitamos elevar privilegios…
Monitor seguro
El Monitor Seguro (también llamado Firmware Confiable ARM) es el componente con mayor privilegio que se ejecuta en el dispositivo. Se puede acceder a él desde los núcleos del mundo normal y seguro a través de instrucciones SMC y permite que ambos mundos se comuniquen entre sí. Esto hace que este componente sea particularmente interesante para la investigación de vulnerabilidades. Nos centramos en los controladores SMC accesibles desde el núcleo de Linux y descubrimos dos vulnerabilidades:
- CVE-2024-20820 (SVE-2023-2215): Lectura fuera de límites en Secure Monitor
Hay una lectura fuera de límites en un controlador específico (correspondiente al id
0xc2000526), lo que nos permite filtrar la memoria completa virtualmente mapeada en el Monitor Seguro.
- CVE-2024-20021 : Asignación de memoria física arbitraria a memoria virtual
Otro controlador (que corresponde al id
0x8200022a) nos permite mapear direcciones físicas arbitrarias (hasta 1 MB a la vez) en las mismas direcciones virtuales en el Monitor Seguro. Como no hay forma de mapear las direcciones, estamos limitados a 8 mapeos consecutivos que representan 8 MB de datos.
Es posible encadenar estas dos vulnerabilidades para filtrar cualquier cosa de la memoria del sistema, incluido el Secure World. La única restricción es el número de mapas mmap consecutivos, limitado a 8.
Implementamos una pequeña demostración que muestra cómo usamos estas vulnerabilidades para filtrar una clave del almacén de claves de Android.
Conclusión
La cadena de 4 bugs que presentamos nos permitió ejecutar código en Little Kernel desde USB, obtener acceso root en Android con persistencia y, finalmente, filtrar cualquier cosa de la memoria de Secure World, incluidas las claves del Android Keystore. El dispositivo en el que realizamos esta investigación e implementamos los exploits es un Samsung Galaxy A225F, pero la mayoría de los dispositivos Samsung basados en un SoC Mediatek son vulnerables, al menos, a las vulnerabilidades de Little Kernel.
Puede encontrar más detalles sobre estas vulnerabilidades y exploits en el documento técnico o viendo la charla que dimos en BlackHat USA 2024 (que se publicará pronto).
Los exploits para las 4 vulnerabilidades se pueden encontrar en nuestro repositorio de Github .
Reconocimiento
Un enorme agradecimiento a los otros dos colaboradores de esta investigación: Damiano Melotti y Gabrielle Viala, y a nuestros colegas que revisaron esta publicación.
Tomado y traducido de: quarkslab.com








