Google démontre l'exploitation des vulnérabilités de Spectre en exécutant JavaScript dans le navigateur

Google a publié plusieurs prototypes d'exploit montrant la possibilité d'exploiter les vulnérabilités de la classe Spectre lors de l'exécution de code JavaScript dans un navigateur, en contournant les méthodes de protection précédemment ajoutées. Les exploits peuvent être utilisés pour accéder à la mémoire d'un processus qui traite 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 du travail a été posté sur GitHub.

Le prototype proposé est conçu pour attaquer les systèmes équipés de processeurs Intel Core i7-6500U dans un environnement Linux et Chrome 88. Des modifications sont nécessaires pour appliquer l'exploit à d'autres environnements. La méthode d'exploitation n'est pas spécifique aux processeurs Intel - après une adaptation appropriée, l'exploit a été confirmé pour fonctionner sur des systèmes avec des processeurs d'autres fabricants, y compris l'Apple M1 basé sur l'architecture ARM. Après des ajustements mineurs, l'exploit fonctionne également sur d'autres systèmes d'exploitation et d'autres navigateurs basés sur le moteur Chromium.

Dans un environnement basé sur les processeurs standard Chrome 88 et Intel Skylake, des données ont été divulguées par le processus responsable du traitement du contenu Web dans l'onglet Chrome actuel (processus de rendu), à un taux de 1 kilo-octet par seconde. De plus, des prototypes alternatifs ont été développés, par exemple un exploit qui permet, au prix de réduire la stabilité, d'augmenter le taux de fuite à 8kB/s lors de l'utilisation du timer performance.now() avec une précision de 5 microsecondes (0.005 millisecondes) . Une variante a également été préparée, fonctionnant avec une précision de minuterie d'une milliseconde, qui pourrait être utilisée pour organiser l'accès à 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 calibre le temporisateur pour estimer le temps d'exécution des opérations requises pour restaurer les données laissées dans le cache du processeur à la suite 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 de l'allocation du tableau JavaScript.

La troisième partie exploite directement la vulnérabilité Spectre pour déterminer le contenu de la mémoire du processus en cours à la suite de la création de conditions pour l'exécution spéculative de certaines opérations, dont le résultat est rejeté par le processeur après avoir déterminé une prédiction infructueuse, mais l'exécution des traces sont déposées dans le cache général et peuvent être restaurées à l'aide de méthodes de détermination du contenu du cache par des canaux tiers qui analysent les changements de temps d'accès aux données en cache et non en cache.

La technique d'exploitation proposée élimine les temporisateurs de haute précision disponibles via l'API performance.now(), et sans prise en charge du type SharedArrayBuffer, qui permet de créer des tableaux en mémoire partagée. L'exploit comprend le gadget Spectre, qui provoque l'exécution de code spéculatif contrôlé, et un analyseur de fuite de canal latéral, qui détermine les données obtenues lors de l'exécution spéculative qui sont entrées dans le cache.

Le gadget est implémenté à l'aide d'un tableau JavaScript, dans lequel une tentative est faite pour accéder à une zone en dehors des limites du tampon, affectant l'état du bloc de prédiction de branche en raison de la vérification de la taille du tampon ajoutée par le compilateur (le processeur, regardant vers l'avenir , effectue l'accès de manière spéculative, mais annule l'état après la vérification). Pour analyser le contenu du cache dans des conditions de précision de temporisation insuffisante, il est proposé une méthode qui trompe la stratégie d'éviction du cache Tree-PLRU utilisée dans les processeurs et permet, en augmentant le nombre de cycles, d'augmenter significativement la différence de temps lors du retour d'un valeur du cache et lorsqu'il n'y a pas de valeur dans le cache.

On note que Google a publié un prototype d'exploit afin de montrer le réalisme des attaques utilisant les vulnérabilités de la classe Spectre et d'inciter les développeurs web à utiliser des techniques qui minimisent les risques de telles attaques. Dans le même temps, Google estime que sans une révision significative du prototype proposé, il est impossible de créer des exploits universels prêts non seulement pour la démonstration, mais également pour une utilisation généralisée.

Pour réduire les risques, les propriétaires de sites sont encouragés à utiliser la politique d'ouverture croisée (COOP) récemment mise en œuvre, la politique d'intégration croisée (COEP), la politique de ressources croisées (CORP), la demande de métadonnées Fetch, les options X-Frame, X - Options de type de contenu et cookies SameSite. Ces mécanismes ne protègent pas directement contre les attaques, mais permettent d'isoler les données du site des fuites vers des processus dans lesquels le code JavaScript de l'attaquant peut être exécuté (la fuite se produit à partir de la mémoire du processus en cours, dans lequel, en plus du code de l'attaquant, des données d'un autre site ouvert dans ce même onglet). L'idée principale est de séparer dans différents processus l'exécution du code du site du code tiers obtenu à partir de sources non fiables, par exemple, inclus via une iframe.



Source: opennet.ru

Ajouter un commentaire