Analyse technique du contournement de Chrome V8 HardenProtect par la valeur Sentinel
La valeur sentinelle est une valeur spéciale dans les algorithmes, souvent utilisée comme condition d'arrêt dans les algorithmes de boucle ou de récursion. Il existe de nombreuses valeurs sentinelles dans le code source de Chrome. Des recherches récentes ont montré qu'il était possible d'exécuter du code arbitraire dans le sandbox en divulguant l'objet TheHole, ce qui permettrait d'exploiter les vulnérabilités CVE-2021-38003 et CVE-2022-1364. L'équipe de Google a ensuite mis à jour ces deux vulnérabilités trouvées sur le terrain.
En plus de l'objet TheHole, il existe d'autres objets natifs dans V8 qui ne doivent pas être divulgués à JavaScript. Cet article traite de l'objet Uninitialized Oddball, dont cette méthode d'évasion peut encore être utilisée dans la dernière version de V8.
La plupart des objets natifs de V8 sont définis dans le fichier v8/src/roots/roots.h, ces objets étant disposés de manière adjacente en mémoire. Une fois qu'un objet natif qui ne devrait pas être divulgué est exposé à JavaScript, il pourrait permettre l'exécution de code arbitraire dans le sandbox.
Pour valider cette méthode, il est possible de modifier la fonction native de V8 pour faire fuiter l'Uninitialized Oddball dans JavaScript. Plus précisément, on peut modifier le décalage relatif de la fonction %TheHole() par rapport à l'isolate, afin qu'elle renvoie l'Uninitialized Oddball.
L'utilisation d'Uninitialized Oddball permet d'effectuer des lectures et écritures relativement arbitraires. La fonction de lecture JavaScript optimisée calculera directement le décalage selon la sémantique JavaScript, déterminant ainsi la valeur du tableau, ce qui entraîne une confusion de type et permet une lecture arbitraire.
La solution de réparation suggérée consiste à ajouter une vérification du tableau map lors du retour des éléments du tableau par la fonction optimisée, afin d'éviter de calculer directement le décalage pour retourner les valeurs du tableau.
Il convient de noter que cette méthode s'applique non seulement à Chrome, mais que d'autres logiciels utilisant le moteur V8 peuvent également être affectés. Par exemple, Skype n'a pas encore corrigé cette vulnérabilité. Sous x86, en raison de l'absence de compression d'adresse, la lecture/écriture arbitraire est directement relative à l'ensemble du processus.
Dans l'ensemble, la fuite de uninitialized_Oddball dans la valeur Sentinel permet de réaliser des lectures arbitraires. Il existe d'autres valeurs Sentinel dans V8 qui pourraient entraîner des problèmes similaires. Il est recommandé d'ajouter ces valeurs Sentinel en tant que variables dans le fuzzer, afin de découvrir davantage de primitives d'exploitation potentielles. Que cela soit officiellement considéré comme un problème de sécurité ou non, ce type de problème réduit considérablement le temps nécessaire aux hackers pour réaliser une exploitation complète.
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
11 J'aime
Récompense
11
4
Partager
Commentaire
0/400
TommyTeacher
· 07-20 16:35
C'est effectivement un peu dangereux, hein.
Voir l'originalRépondre0
BrokeBeans
· 07-20 16:22
Penser à creuser des trous toute la journée, n'est-ce pas plus agréable de faire des exercices avec les mains ?
Analyse et défense des vulnérabilités de fuite de valeur Sentinel du moteur Chrome V8
Analyse technique du contournement de Chrome V8 HardenProtect par la valeur Sentinel
La valeur sentinelle est une valeur spéciale dans les algorithmes, souvent utilisée comme condition d'arrêt dans les algorithmes de boucle ou de récursion. Il existe de nombreuses valeurs sentinelles dans le code source de Chrome. Des recherches récentes ont montré qu'il était possible d'exécuter du code arbitraire dans le sandbox en divulguant l'objet TheHole, ce qui permettrait d'exploiter les vulnérabilités CVE-2021-38003 et CVE-2022-1364. L'équipe de Google a ensuite mis à jour ces deux vulnérabilités trouvées sur le terrain.
En plus de l'objet TheHole, il existe d'autres objets natifs dans V8 qui ne doivent pas être divulgués à JavaScript. Cet article traite de l'objet Uninitialized Oddball, dont cette méthode d'évasion peut encore être utilisée dans la dernière version de V8.
La plupart des objets natifs de V8 sont définis dans le fichier v8/src/roots/roots.h, ces objets étant disposés de manière adjacente en mémoire. Une fois qu'un objet natif qui ne devrait pas être divulgué est exposé à JavaScript, il pourrait permettre l'exécution de code arbitraire dans le sandbox.
Pour valider cette méthode, il est possible de modifier la fonction native de V8 pour faire fuiter l'Uninitialized Oddball dans JavaScript. Plus précisément, on peut modifier le décalage relatif de la fonction %TheHole() par rapport à l'isolate, afin qu'elle renvoie l'Uninitialized Oddball.
L'utilisation d'Uninitialized Oddball permet d'effectuer des lectures et écritures relativement arbitraires. La fonction de lecture JavaScript optimisée calculera directement le décalage selon la sémantique JavaScript, déterminant ainsi la valeur du tableau, ce qui entraîne une confusion de type et permet une lecture arbitraire.
La solution de réparation suggérée consiste à ajouter une vérification du tableau map lors du retour des éléments du tableau par la fonction optimisée, afin d'éviter de calculer directement le décalage pour retourner les valeurs du tableau.
Il convient de noter que cette méthode s'applique non seulement à Chrome, mais que d'autres logiciels utilisant le moteur V8 peuvent également être affectés. Par exemple, Skype n'a pas encore corrigé cette vulnérabilité. Sous x86, en raison de l'absence de compression d'adresse, la lecture/écriture arbitraire est directement relative à l'ensemble du processus.
Dans l'ensemble, la fuite de uninitialized_Oddball dans la valeur Sentinel permet de réaliser des lectures arbitraires. Il existe d'autres valeurs Sentinel dans V8 qui pourraient entraîner des problèmes similaires. Il est recommandé d'ajouter ces valeurs Sentinel en tant que variables dans le fuzzer, afin de découvrir davantage de primitives d'exploitation potentielles. Que cela soit officiellement considéré comme un problème de sécurité ou non, ce type de problème réduit considérablement le temps nécessaire aux hackers pour réaliser une exploitation complète.