La sociĂ©tĂ© Google a publiĂ© plusieurs prototypes d'exploits montrant la possibilitĂ© d'exploiter les vulnĂ©rabilitĂ©s de la classe Spectre lors de l'exĂ©cution de code JavaScript dans le navigateur, contournant ainsi les mĂ©thodes de protection prĂ©cĂ©demment mises en place. Les exploits peuvent ĂȘtre utilisĂ©s pour accĂ©der Ă la mĂ©moire du processus traitant le contenu web dans l'onglet actuel. Pour tester le fonctionnement de l'exploit, le site leaky.page a Ă©tĂ© lancĂ©, et le code dĂ©crivant la logique de travail est disponible sur GitHub.
Le prototype proposé est conçu pour réaliser une attaque sur des systÚmes avec des processeurs Intel Core i7-6500U dans un environnement avec Linux et Chrome 88. Des modifications sont nécessaires pour utiliser l'exploit dans d'autres environnements. La méthode d'exploitation n'est pas spécifique aux processeurs Intel : aprÚs adaptations appropriées, l'exploit a été confirmé sur des systÚmes avec des CPU d'autres fabricants, y compris les Apple M1 basés sur l'architecture ARM. AprÚs quelques ajustements mineurs, l'exploit fonctionne également sur d'autres systÚmes d'exploitation et dans d'autres navigateurs basés sur le moteur Chromium.
Dans un environnement basĂ© sur Chrome 88 et des processeurs Intel Skylake, une fuite de donnĂ©es a Ă©tĂ© obtenue Ă partir du processus responsable du traitement du contenu web dans l'onglet actuel de Chrome (renderer process), Ă une vitesse de 1 kilooctet par seconde. De plus, des prototypes alternatifs ont Ă©tĂ© dĂ©veloppĂ©s, par exemple, un exploit qui permet d'augmenter la vitesse de fuite Ă 8kB/s en rĂ©duisant la stabilitĂ© en utilisant un timer performance.now() avec une prĂ©cision de 5 microsecondes (0,005 millisecondes). Un variant fonctionnant avec une prĂ©cision de timer d'une milliseconde a Ă©galement Ă©tĂ© prĂ©parĂ©, qui pouvait ĂȘtre utilisĂ© pour accĂ©der Ă la mĂ©moire d'un autre processus Ă une vitesse d'environ 60 octets par seconde.
Le code de démonstration publié se compose de trois parties. La premiÚre partie effectue l'étalonnage du timer pour évaluer le temps d'exécution des opérations nécessaires à la récupération des données restantes dans le cache du processeur en raison de l'exécution spéculative des instructions du CPU. La deuxiÚme partie détermine la disposition de la mémoire utilisée lors du placement d'un tableau JavaScript.
La troisiĂšme partie exploite directement la vulnĂ©rabilitĂ© Spectre pour dĂ©terminer le contenu de la mĂ©moire du processus actuel en crĂ©ant des conditions pour l'exĂ©cution spĂ©culative de certaines opĂ©rations, dont les rĂ©sultats sont rejetĂ©s par le processeur aprĂšs la dĂ©tection d'une prĂ©vision Ă©chouĂ©e, mais les traces d'exĂ©cution s'accumulent dans le cache gĂ©nĂ©ral et peuvent ĂȘtre rĂ©cupĂ©rĂ©es Ă l'aide de mĂ©thodes de dĂ©termination du contenu du cache par des canaux latĂ©raux, analysant le changement du temps d'accĂšs aux donnĂ©es mises en cache et non mises en cache.
La technique d'exploitation proposée permet de se passer de minuteries de haute précision, accessibles via l'API performance.now(), et sans supporter le type SharedArrayBuffer, qui permet de créer des tableaux en mémoire partagée. L'exploit comprend un gadget Spectre, entraßnant une exécution spéculative contrÎlée d'un code, et un analyseur de fuite par canaux latéraux, déterminant les données mises en cache obtenues lors de l'exécution spéculative.
Le gadget est implantĂ© Ă lâaide dâun tableau JavaScript, dans lequel une tentative d'accĂšs Ă une zone en dehors des limites du tampon est rĂ©alisĂ©e, affectant l'Ă©tat du bloc de prĂ©diction des branches Ă cause d'un contrĂŽle de taille de tampon ajoutĂ© par le compilateur (le processeur effectue spĂ©culativement l'accĂšs, mais rĂ©tablit l'Ă©tat aprĂšs vĂ©rification). Pour analyser le contenu du cache en raison d'une prĂ©cision insuffisante du minuteur, une mĂ©thode trompant la stratĂ©gie d'Ă©viction de donnĂ©es du cache Tree-PLRU utilisĂ©e dans les processeurs est proposĂ©e, permettant d'augmenter considĂ©rablement la diffĂ©rence de temps lors de la restitution d'une valeur du cache par rapport Ă une absence de valeur dans le cache en raison d'un nombre accru de cycles.
Il est Ă noter que Google a publiĂ© un prototype d'exploit afin de montrer la rĂ©alitĂ© des attaques utilisant des vulnĂ©rabilitĂ©s de la classe Spectre et pour inciter les dĂ©veloppeurs web Ă appliquer des techniques minimisant les risques de telles attaques. Google estime qu'il est impossible de crĂ©er des exploits universels, prĂȘts non seulement pour la dĂ©monstration, mais aussi pour une utilisation gĂ©nĂ©ralisĂ©e, sans une refonte substantielle du prototype proposĂ©.
Pour rĂ©duire les risques, il est recommandĂ© aux propriĂ©taires de sites d'utiliser les en-tĂȘtes rĂ©cemment mis en Ćuvre tels que la Cross-Origin Opener Policy (COOP), la Cross-Origin Embedder Policy (COEP), la Cross-Origin Resource Policy (CORP), le Fetch Metadata Request, les X-Frame-Options, les X-Content-Type-Options et le SameSite Cookie. Ces mĂ©canismes ne protĂšgent pas directement contre les attaques, mais ils permettent d'isoler les donnĂ©es du site pour Ă©viter leur fuite dans des processus pouvant exĂ©cuter du code JavaScript malveillant (la fuite provient de la mĂ©moire du processus actuel, oĂč, en plus du code malveillant, des donnĂ©es d'un autre site ouvert dans le mĂȘme onglet peuvent ĂȘtre traitĂ©es). L'idĂ©e principale est de sĂ©parer l'exĂ©cution du code du site des codes externes provenant de sources non fiables, par exemple, ceux intĂ©grĂ©s via des iframe.

Source : opennet.ru
