Les mesures d'atténuation matérielles introduites ces dernières années dans les processeurs Intel et ARM pour corriger la fameuse faille Spectre ne sont pas aussi solides qu'on le pensait. Des chercheurs ont mis au point une méthode d'attaque capable de déjouer les défenses, mais son exploitation n'est pas aussi aisée qu'avec la faille originale. Découverte par des chercheurs du groupe de Sécurité des systèmes et des réseaux de l'université d'Amsterdam (VUSec), cette attaque est appelée Spectre-BHI, pour Branch History Injection, ou Spectre-BHB, pour Branch History Buffer, Intel et ARM lui ayant attribué des noms différents. Selon l'équipe de recherche, il s'agit d'une extension de l'attaque Spectre version 2 de 2017, également connue sous le nom de Spectre-BTI (Branch Target Injection, par Injection cible de branche) et, comme pour Spectre v2, elle peut entraîner la fuite d'informations sensibles de l'espace mémoire privilégié du noyau.

L'exploit de preuve de concept créé par les chercheurs de VUSec fait fuir le hachage du mot de passe root du fichier /etc/shadow en utilisant un compte non privilégié. Le fichier /etc/shadow est un fichier système sous Linux, accessible uniquement par le compte administrateur root. Essentiellement, l'exploit force le noyau à charger le fichier en mémoire, où il serait normalement protégé de l'accès par des processus non privilégiés, mais il tire ensuite parti de l'attaque Spectre-BHI pour accéder à son contenu et le divulguer. C’est une violation majeure de la frontière de sécurité fondamentale des systèmes d'exploitation modernes qui sépare les applications et l'espace mémoire en mode utilisateur de l'espace mémoire privilégié du noyau.

Exploitation de la faille Spectre

Spectre fait référence à une catégorie de vulnérabilités de sécurité, divulguées à l'origine en janvier 2017, qui découlent d'une fonctionnalité dite d’exécution spéculative des processeurs modernes liée aux performances, dans laquelle le processeur tente de prédire à l'avance le chemin que prendra l'exécution d'un programme quand il atteindra une branche conditionnelle et d'exécuter les instructions sur ce chemin à l'avance. Si la prédiction, qui repose sur des algorithmes internes, n’est pas bonne, les résultats stockés dans les caches temporaires du CPU sont rejetés. Les attaques par exécution spéculative comme Spectre, et bien d'autres attaques qui ont suivi, trompent ce mécanisme pour faire fuiter des informations des caches temporaires qui agissent comme des canaux latéraux. « À l'époque où Spectre a été découvert, il était facile d'exploiter l'injection cible de branche (BTI ou Spectre-v2), la variante la plus dangereuse de Spectre, à travers les niveaux de privilèges », ont expliqué les chercheurs de VUSec. « Par exemple, un attaquant non privilégié de l'espace utilisateur pourrait introduire n'importe quelle cible de branche dans le prédicteur de branche indirect de l'espace utilisateur et inciter le noyau à sauter de manière spéculative dans l'emplacement du code cible injecté et à exécuter le code qui s'y trouve ». 

Pour atténuer le risque, des fournisseurs de logiciels comme Google et des développeurs du noyau Linux ont proposé des solutions logicielles comme retpoline. Si ces solutions étaient efficaces, elles entraînaient une baisse significative des performances. Les fournisseurs de processeurs ont donc développé des défenses matérielles comme l’eIBRS d'Intel et le CSV2 d'ARM. « Ces solutions sont complexes - l'article en anglais - explique le BHI en détail - mais l'essentiel, c’est que le prédicteur garde en quelque sorte la trace du niveau de privilège (utilisateur/noyau) dans lequel une cible est exécutée », expliquent encore les chercheurs de VUSec. « Et, comme on peut s’y attendre, si la cible appartient à un niveau de privilège inférieur, l'exécution du noyau ne l'utilisera pas (c'est-à-dire qu'il n'y aura plus d'emplacements de code arbitraires fournis par l'attaquant pour détourner de manière spéculative le flux de contrôle du noyau) ».

Atténuation de la vulnérabilité Spectre-BHI 

Le problème, cependant, c’est que le prédicteur du CPU s'appuie sur un historique global pour sélectionner les entrées cibles à exécuter de manière spéculative et, comme l'ont prouvé les chercheurs de VUSec, cet historique global peut être compromis. En d'autres termes, alors que la version originale de Spectre v2 permettait aux attaquants d'injecter des emplacements de code cible et de tromper le noyau pour qu'il exécute ce code, l’attaque Spectre-BHI/BHB ne peut que forcer le noyau à se tromper et à exécuter des gadgets ou des bribes de code intéressants qui existent déjà dans l'historique et ont été exécutés dans le passé, mais qui pourraient entraîner une fuite de données. « Ce qui revient à dire que l’eIBRS d’Intel et le CSV2 d’ARM sont cassés », ont encore déclaré les chercheurs. « Donc, les mesures d'atténuation fonctionnent comme prévu, mais la surface d'attaque résiduelle est beaucoup plus importante que ce que les fournisseurs avaient initialement supposé. [...] Cependant, il est plus difficile qu'auparavant de trouver des sources exploitables puisque l'attaquant ne peut pas injecter directement des cibles prédictives à travers les frontières de privilèges ».

Intel suit la vulnérabilité Spectre-BHI sous la référence CVE-2022-0001, pour la variante avec privilèges croisés et CVE-2022-0002 pour la variante avec privilèges identiques. ARM la classe sous la référence CVE- 2022-23960 pour les deux variantes. Selon Intel, la plupart de ses processeurs sont affectés, à l'exception de ceux de la famille Atom. Pour ARM, les architectures CPU vulnérables sont le Cortex-A15, Cortex-A57, Cortex-A72, Cortex-A73, Cortex-A75, Cortex-A76, Cortex-A76AE, Cortex-A77, Cortex-A78, Cortex-A78AE, Cortex-A78C, Cortex-X1, Cortex-X2, Cortex-A710, Neoverse N1, Neoverse N2, et Neoverse V1. Les deux entreprises ont publié des avis et mettront à disposition des logiciels d'atténuation pour le moment. ARM propose cinq mesures d'atténuation différentes en fonction du système. Pour leur exploit Linux, les chercheurs de VUSec ont utilisé eBPF, une technologie disponible depuis le noyau 4.4 qui permet d'exécuter des programmes en sandbox dans le noyau d'un système d'exploitation. Même si l'eBPF n’est pas impliqué dans le problème sous-jacent et que l’on peut trouver d'autres gadgets de code pour fuiter les données, la présence d'un eBPF non privilégié « facilite énormément l'exécution spéculative (et d'autres) attaques », ont précisé les chercheurs. C'est pourquoi ils recommandent de le désactiver et certaines distributions Linux ont commencé à le désactiver par défaut.