
Problema de seguridad en el firmware del hipervisor de algunos conjuntos de chips antiguos de Qualcomm
CVE-2022-22063 es un problema de seguridad en el firmware del hipervisor de algunos conjuntos de chips antiguos de Qualcomm. Un componente de hardware desprotegido (el "boot remapper") puede ser abusado para obtener acceso completo de lectura/escritura al hipervisor desde un sistema operativo modificado (escalada de privilegios). Explotar el problema es trivial en las plataformas afectadas, ya que no se requiere conocimiento sobre la versión específica del firmware (por ejemplo, direcciones o variables).
Nota: Aunque Qualcomm ha proporcionado correcciones a los clientes (con suficiente tiempo para lanzar actualizaciones), muchos dispositivos afectados ya son bastante antiguos y pueden no recibir la corrección del fabricante. El problema solo puede ser explotado desde un sistema operativo modificado o comprometido (usando otro problema de seguridad). Mantener el sistema operativo actualizado y seguro podría ser suficiente incluso si el firmware es vulnerable.
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HEl problema también fue publicado en [Qualcomm's December 2022 Security Bulletin].
El problema depende de una combinación de hardware y software que se ejecuta en el objetivo afectado:
hyp del almacenamiento interno).APCS_BOOT_START_ADDR_NSEC), que no está protegida por el hipervisor y, por lo tanto, es accesible por el núcleo del sistema operativo con menos privilegios (por ejemplo, Linux).Hay varios conjuntos de chips más que probablemente tengan el hardware afectado (por ejemplo, MSM8909 y MSM8953), pero no tienen un firmware de hipervisor separado que pueda ser comprometido.
Escalada de privilegios: Dado un núcleo del sistema operativo ya comprometido (por ejemplo, Linux), el problema permite elevar trivialmente los privilegios al nivel del hipervisor (EL1 -> EL2 en ARM). Toda la memoria gestionada por el hipervisor puede ser leída o escrita. Esto rompe el aislamiento de diferentes dominios de seguridad o máquinas virtuales gestionadas por el hipervisor (si las hay, según la configuración).
(Consulte también: [An introduction to Access Control on Qualcomm Snapdragon Platforms])
Arranque seguro: La mayoría de los dispositivos Qualcomm disponibles en producción utilizan arranque seguro para evitar la modificación no autorizada del firmware. El firmware está firmado criptográficamente y verificado por la cadena de arranque. El problema permite modificar o incluso reemplazar completamente el firmware del hipervisor cargado en tiempo de ejecución desde un sistema operativo modificado (ya sea a través de un "desbloqueo del gestor de arranque" compatible oficialmente u otro exploit).
(Consulte también: [Qualcomm Secure Boot and Image Authentication Technical Overview (v1.0)] y (v2.0))
Nota: El problema se encontró originalmente en la plataforma Qualcomm Snapdragon 410 (MSM8916). Algunas de las siguientes explicaciones podrían ser específicas de MSM8916, por ejemplo:
Sin embargo, el concepto general se aplica de manera similar a todas las plataformas afectadas.
La arquitectura ARMv8-A de 64 bits define 4 niveles de privilegio ("niveles de excepción", EL). Hay niveles separados que se utilizan típicamente para aplicaciones, núcleos de sistemas operativos y un hipervisor:
La CPU cambia entre los niveles durante las excepciones, por ejemplo, debido a una interrupción entrante. También es posible cambiar entre algunos de los niveles usando instrucciones especiales, como la Llamada al hipervisor (hvc).
(Consulte también: [Modelo de excepción AArch64])
El hipervisor puede alojar una o múltiples máquinas virtuales con núcleos de sistema operativo separados. A cada máquina virtual se le puede dar su propia vista de la memoria utilizando la traducción de etapa 2. Todos los accesos a la memoria desde una máquina virtual pasan por dos etapas de traducción: la primera es gestionada por el sistema operativo (virtual), mientras que la segunda etapa es gestionada por el hipervisor. La memoria utilizada por el hipervisor u otras máquinas virtuales puede ocultarse omitiéndola de las tablas de traducción.
(Consulte también: [Virtualización AArch64], [Gestión de memoria AArch64])
El firmware del hipervisor de Qualcomm se ejecuta en EL2 y utiliza la traducción de etapa 2 para denegar el acceso a la memoria del hipervisor desde el núcleo del sistema operativo principal que se ejecuta en EL1 (generalmente Linux). Tenga en cuenta que en esta configuración, la traducción de etapa 2 se utiliza principalmente para la protección de la memoria, sin traducción de direcciones. El sistema operativo principal obtiene acceso directo a la mayoría de los componentes de hardware en el espacio de entrada/salida mapeado en memoria (MMIO), por ejemplo, el controlador SD o el subsistema de cámara. El acceso a la memoria que pertenece al hipervisor/EL2 (hyp) y al monitor seguro/EL3 (parte de tz) está restringido:
El boot remapper no está relacionado con la virtualización: es necesario durante el arranque temprano de un núcleo de CPU. En esta plataforma de hardware, los núcleos de CPU siempre comienzan la ejecución en la dirección 0x0. El boot remapper es un componente de hardware adicional construido alrededor de la CPU que reasigna los primeros 64 o 128 KiB (0x00000 - 0x20000) a una región de memoria configurable.
Por defecto, el boot remapper apunta a la ROM de arranque (el primer código que se ejecuta cuando se enciende el dispositivo). Más tarde, el mapeo se cambia para que los otros núcleos de CPU comiencen inmediatamente la ejecución en el firmware EL3 (parte de tz) que se cargó en la RAM:
Observe cómo la dirección a la que accede la CPU (dentro de tz) es accesible usando dos direcciones físicas diferentes: la dirección real en RAM (0x8650xxxx) y la dirección reasignada usando el boot remapper (0x0000xxxx).
En realidad, hay dos instancias separadas del boot remapper: