Vulnérabilité "SWAPGS", la nouvelle variante de Spectre

L’instruction SWAPGS permet au système d’exploitation de passer de l’espace mémoire accessible à l’utilisateur à l’espace mémoire accessible par le noyau. Cette instruction est utilisée par les attaquants dans trois scénarios. Le premier consiste à contourner KASLR (Kernel Address Space Layout Randomization), fonction servant à distribuer aléatoirement l’espace d’adressage mémoire des processus et ainsi compliquer la recherche d’espace mémoire accessibles par des processus à privilège. Le second scénario, permet à un attaquant de vérifier si une valeur existe à une adresse mémoire spécifique du kernel et ceci depuis l’espace mémoire utilisateur.

Le dernier scénario est le plus critique, il permet à un attaquant de récupérer le contenu d’adresse mémoire aléatoire du kernel. En outre, l’impact est identique à la précédente vulnérabilité Spectre.​

Présentation détaillée

La vulnérabilité Spectre exploitait une méthode conçue pour améliorer les performances d'un CPU. Pour rappel, cette méthode permet lors de l'évaluation des chemins d'instructions exécutées par le CPU, de faire une prévision sur le meilleur chemin. Ces processeurs « spéculent » sur le choix le plus probable sur une série de choix possible. Ces choix peuvent contenir des données privées et les mettre en cache. Un observateur attentif des temps d'accès peut déduire le contenu de ce cache.

Cependant, la famille de microprocesseurs x86 implémente une fonctionnalité appelée «segmentation de la mémoire », dans laquelle toutes les adresses de mémoire sont formées à partir d'une adresse de base de segment, plus un décalage dans ce segment. L'architecture définit des registres de segments (CS, DS, SS, ES, FS, GS) qui peuvent être utilisés pour créer une adresse mémoire complète ou être utilisés de manière implicite par certaines instructions. Les registres « FS » et « GS » peuvent être utilisés en mode 64 bits pour fournir un décalage dans les plages de mémoire réservées à des données spécifiques.

La technique du « SWAPGS» est utilisée sur des instructions 64 bits pour permuter la valeur « GS » du userspace avec la valeur destinée à être utilisée lors des prochaines opérations du noyau. Cette valeur « GS » récemment échangée est utilisée pour effectuer des accès sur les données du noyau. L'instruction « SWAPGS » a été ajoutée dans le cadre du mécanisme de transition entre le userspace et le noyau, ce qui détermine une convention permettant de rechercher des données du noyau tels que les données de la pile du noyau. Néanmoins, l'instruction SWAPGS est une instruction primitive et ne valide pas l'exactitude des valeurs qu'elle utilise.

Il existe des cas où le système peut entrer le code du noyau mais, ne nécessite pas d'échange (swap) ou peut entrer de nouveau en mode noyau alors qu'il est déjà exécuté en mode noyau. En raison de ces cas, il existe des vérifications dans le code d'entrée du noyau où des branches conditionnelles sont testées pour déterminer si l'échange (swap) est nécessaire.Par conséquent, il est possible que ces branches conditionnelles du code d'entrée du noyau Linux spéculent de manière erronée sur un code qui n'exécutera pas le SWAPGS, ce qui entraînera une fenêtre d'exécution spéculative au cours de laquelle la mauvaise « GS » sera utilisée pour les opérations de mémoire dépendante. Une analyse typique des canaux latéraux de style Spectre peut être effectuée par un attaquant qualifié et ainsi déterminer les résultats de synchronisation.

Informations
+

Risque 

  • Fuites d'informations

Criticité 

  • Score CVSS 5.9

Existence d’un code d’exploitation de la vulnérabilité

  • Aucun code d’exploitation n’est disponible

Composants et versions vulnérables

  • Tous les microprocesseurs Intel et AMD possédant une architecture x86 ou x64
  • Tous les systèmes d'exploitations Microsoft et Linux pouvant tourner sur une architecture x86 ou x64

CVE 


Recommandations
+

Mise en place de correctif de sécurité

Des correctifs de sécurité sont disponibles pour ces constructeurs

  • Microsoft
  • Linux Kernel
  • Google ChromeOS
  • Android
  • Intel

AMD n'a pas encore déployé de correctif de sécurité, mais pense qu'ils ne sont pas affectés

Solution de contournement

  • Aucune solution n'a été proposée.