Il y a quelques jours, un groupe de chercheurs a publié des informations sur une vulnérabilité qu’ils ont détectée (déjà cataloguée sous CVE-2023-20569) et qui affecte les processeurs AMD basés sur les microarchitectures EPYC et Ryzen via un article de blog .
Il est mentionné que la vulnérabilité, nommée “Inception”, permet à un utilisateur local non privilégié de déterminer le contenu de la mémoire des processus d’autres utilisateurs lors de l’utilisation de systèmes de virtualisation, ce qui permet essentiellement d’extraire des informations d’autres systèmes invités.
Qu’est-ce qu’Inception et comment est-il exploité ?
Concernant Inception, il est mentionné que cette vulnérabilité est une combinaison de :
- Spéculation fantôme : nous pouvons déclencher une mauvaise prédiction sans aucune branche à la source de la mauvaise prédiction.
- Entraînement à l’exécution transitoire : nous pouvons manipuler de futures prédictions erronées grâce à une prédiction erronée précédente que nous déclenchons.
Puisqu’il est possible de générer le débordement de pile d’adresses de retour (RAS) dans une structure qui est mise à jour en mode spéculatif dans une étape dans laquelle le processeur prédit uniquement un éventuel appel à l’instruction CALL.
La pile RAS a une taille fixe et est circulaire, c’est-à-dire qu’elle boucle et après le dernier élément, elle revient au début. Un attaquant peut créer des conditions dans lesquelles le prédicteur de branche exécute de manière spéculative un grand nombre d’appels prédits de manière incorrecte, suffisamment pour déborder la pile RAS et écraser les points de retour correctement prédits placés en haut de la pile.
De ce fait, les éléments initiaux de la pile peuvent être écrasés par des valeurs choisies par l’attaquant, ce qui conduira alors à l’utilisation de ces valeurs remplacées lors de l’exécution spéculative de l’instruction RET dans le cadre d’une autre processus.
Il est mentionné qu’après cela, le processeur déterminera que la prédiction de branche n’était pas justifiée et ramènera l’opération à son état d’origine, mais les données traitées lors de l’exécution spéculative resteront dans le cache et les tampons de microarchitecture. Si un bloc exécuté par erreur effectue un accès mémoire, son exécution spéculative conduira à l’installation dans le cache général et à la lecture des données de la mémoire.
Pour « empoisonner » la prédiction de branchement, on utilise la vulnérabilité Phantom (CVE-2022-23825) identifiée par les mêmes chercheurs, qui permet de créer des conditions pour prédire un branchement fictif sans instruction de branchement et d’influencer le tampon de prédiction de branchement sans l’instruction ret. .
Pour initier une prédiction erronée et un débordement de pile RAS, l’instruction XOR habituelle est utilisée, dont l’effet sur le tampon de prédiction de branche lors d’une attaque fantôme est similaire à un appel récursif à l’instruction CALL. Pour la substitution contrôlée de la valeur requise au début de la pile RAS, la méthode TTE (Training in Transient Execution) est proposée, qui permet d’influencer la prédiction future des transitions à partir de prédictions erronées précédentes.
Il convient de mentionner que pour la démonstration, les chercheurs ont préparé un exploit el cual puede ser utilizado por un usuario local sin privilegios para determinar el hash de la contraseña del usuario root, almacenado en el archivo /etc/shadow y cargado en la memoria al realizar la autenticación dans le système.
L’attaque a été démontrée sur un système Ubuntu 22.04 entièrement mis à niveau avec un noyau 5.1. noyau 5.1 9 sur un ordinateur équipé d’un processeur de la famille AMD Zen 4. La performance de fuite de données de l’exploit est de 39 octets par seconde. Le contenu de /etc/shadow a été déterminé avec succès dans 6 des 10 tentatives d’exploitation de la vulnérabilité. Chaque tentative a duré environ 40 minutes.
Comme déjà mentionné au début, Inception affecte les processeurs basés sur les microarchitectures EPYC et Ryzen, dont les microarchitectures Zen1 et Zen2, protection basée sur les instructions IBPB (utilisée pour se protéger contre les attaques Spectre), peuvent être utilisées pour bloquer la manifestation d’une vulnérabilité . Alors que pour les processeurs de la famille Zen3 et Zen4, il n’y a pas de correctifs de protection et une mise à jour du microcode est nécessaire pour bloquer la vulnérabilité en eux.
Enfin, il est mentionné que les correctifs Inception et la mise à jour du micrologiciel sont déjà inclus dans les versions récentes du noyau Linux , bien qu’après la distribution des correctifs, une version révisée plus efficace des correctifs ait également été proposée, ce qu’ils ont jusqu’à présent pas été accepté dans le noyau.
Si vous souhaitez en savoir plus à ce sujet, vous pouvez consulter les détails dans le lien suivant.