
Problème de sécurité dans le firmware de l'hyperviseur de certains anciens chipsets Qualcomm
CVE-2022-22063 est un problème de sécurité dans le firmware hyperviseur de certains chipsets Qualcomm plus anciens. Un composant matériel non protégé (le « boot remapper ») peut être détourné pour obtenir un accès complet en lecture/écriture à l'hyperviseur à partir d'un système d'exploitation modifié (élévation de privilèges). L'exploitation du problème est triviale sur les plateformes concernées, car aucune connaissance de la version spécifique du firmware (par exemple adresses ou variables) n'est requise.
Remarque : Bien que Qualcomm ait fourni des correctifs à ses clients (avec largement le temps de publier des mises à jour), de nombreux appareils concernés sont déjà assez anciens et risquent de ne pas recevoir le correctif du vendeur. Le problème ne peut être exploité qu'à partir d'un système d'exploitation modifié ou compromis (en utilisant un autre problème de sécurité). Maintenir le système d'exploitation à jour et sécurisé peut être suffisant même si le firmware est vulnérable.
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HLe problème a également été publié dans [Qualcomm's December 2022 Security Bulletin].
Le problème dépend d'une combinaison de matériel et de logiciel s'exécutant sur la cible concernée :
hyp du stockage interne).APCS_BOOT_START_ADDR_NSEC), qui n'est pas protégée par l'hyperviseur et est donc accessible par le noyau du système d'exploitation moins privilégié (par exemple Linux).Plusieurs autres chipsets possèdent probablement le matériel concerné (par exemple MSM8909 et MSM8953), mais ils ne disposent pas d'un firmware hyperviseur distinct qui pourrait être compromis.
Élévation de privilèges : Étant donné un noyau de système d'exploitation déjà compromis (par exemple Linux), le problème permet d'élever trivialement les privilèges au niveau de l'hyperviseur (EL1 -> EL2 sur ARM). Toute la mémoire gérée par l'hyperviseur peut être lue ou écrite. Cela brise l'isolation des différents domaines de sécurité ou machines virtuelles gérés par l'hyperviseur (le cas échéant, selon la configuration).
(Voir aussi : [An introduction to Access Control on Qualcomm Snapdragon Platforms])
Démarrage sécurisé : La plupart des appareils Qualcomm disponibles en production utilisent le démarrage sécurisé pour empêcher toute modification non autorisée du firmware. Le firmware est signé cryptographiquement et vérifié par la chaîne de démarrage. Le problème permet de modifier ou même de remplacer entièrement le firmware hyperviseur chargé à l'exécution à partir d'un système d'exploitation modifié (soit via le « déverrouillage du bootloader » officiellement pris en charge, soit via un autre exploit).
(Voir aussi : [Qualcomm Secure Boot and Image Authentication Technical Overview (v1.0)] et (v2.0))
Remarque : Le problème a été initialement découvert sur la plateforme Qualcomm Snapdragon 410 (MSM8916). Certaines des explications suivantes peuvent être spécifiques à MSM8916, par exemple :
Cependant, le concept général s'applique de la même manière à toutes les plateformes concernées.
L'architecture ARMv8-A 64 bits définit 4 niveaux de privilèges (« niveaux d'exception », EL). Il existe des niveaux distincts qui sont généralement utilisés pour les applications, les noyaux de système d'exploitation et un hyperviseur :
Le CPU bascule entre les niveaux lors des exceptions, par exemple en raison d'une interruption entrante. Il est également possible de basculer entre certains niveaux à l'aide d'instructions spéciales, telles que l'appel hyperviseur (hvc).
(Voir aussi : [AArch64 Exception model])
L'hyperviseur peut héberger une ou plusieurs machines virtuelles avec des noyaux de système d'exploitation distincts. Chaque machine virtuelle peut avoir sa propre vue de la mémoire à l'aide de la traduction de deuxième étape. Tous les accès mémoire d'une machine virtuelle passent par deux étapes de traduction : la première est gérée par le système d'exploitation (virtuel), tandis que la seconde est gérée par l'hyperviseur. La mémoire utilisée par l'hyperviseur ou d'autres machines virtuelles peut être masquée en l'omettant des tables de traduction.
(Voir aussi : [AArch64 virtualization], [AArch64 memory management])
Le firmware hyperviseur de Qualcomm s'exécute en EL2 et utilise la traduction de deuxième étape pour interdire l'accès à la mémoire de l'hyperviseur depuis le noyau du système d'exploitation principal s'exécutant en EL1 (généralement Linux). Notez que dans cette configuration, la traduction de deuxième étape est principalement utilisée pour la protection de la mémoire, sans traduction d'adresse. Le système d'exploitation principal a un accès direct à la plupart des composants matériels de l'espace d'entrée/sortie mappé en mémoire (MMIO), par exemple le contrôleur SD ou le sous-système de caméra. L'accès à la mémoire appartenant à l'hyperviseur/EL2 (hyp) et au moniteur sécurisé/EL3 (partie de tz) est restreint :
Le boot remapper n'est pas lié à la virtualisation : il est nécessaire lors du démarrage précoce d'un cœur de CPU. Sur cette plateforme matérielle, les cœurs de CPU commencent toujours leur exécution à l'adresse 0x0. Le boot remapper est un composant matériel supplémentaire intégré autour du CPU qui réadresse les premiers 64 ou 128 KiB (0x00000 - 0x20000) vers une région mémoire configurable.
Par défaut, le boot remapper pointe vers la ROM de démarrage (le premier code qui s'exécute au démarrage de l'appareil). Plus tard, le mappage est modifié afin que les autres cœurs de CPU démarrent immédiatement leur exécution dans le firmware EL3 (partie de tz) qui a été chargé dans la RAM :
Notez comment l'adresse accédée par le CPU (dans tz) est accessible via deux adresses physiques différentes : l'adresse réelle dans la RAM (0x8650xxxx) et l'adresse réadressée à l'aide du boot remapper (0x0000xxxx).
Il existe en réalité deux instances distinctes du boot remapper :