Analyse des exploits de la vulnérabilité Sentinel Value du moteur Chrome V8 : exécution de code à distance (RCE) réalisable sans études supplémentaires.
Analyse de l'exploitation de la vulnérabilité de la valeur sentinelle dans le moteur Chrome V8
La valeur sentinel est une valeur spéciale dans les algorithmes, généralement utilisée comme condition de terminaison dans les algorithmes de boucle ou de récursion. Il existe de nombreuses valeurs sentinel dans le code source de Chrome. Des recherches antérieures ont montré qu'il était possible d'exécuter n'importe quel code dans le bac à sable de Chrome en divulguant l'objet TheHole. L'équipe de Google a ensuite corrigé les vulnérabilités associées.
Cependant, il existe d'autres objets natifs dans V8 qui ne devraient pas être divulgués à JS. Cet article traite de l'objet Uninitialized Oddball, dont la divulgation peut conduire à des méthodes de contournement de sandbox qui sont encore disponibles dans la dernière version de V8.
Il convient de noter que cette méthode présente une certaine généralité :
CVE-2021-30551 Le PoC initial était la fuite d'un oddball interne non initialisé.
Le PoC de CVE-2022-1486 a également directement révélé UninitializedOddball.
Issue1352549 ( fournit des détails sur la méthode d'exploitation de CVE) non attribué.
Ces cas montrent qu'il est important de prêter attention à la possibilité d'attaques utilisant l'exploitation de l'Uninitialized Oddball.
Valeur sentinelle dans V8
La plupart des objets natifs de V8 sont définis dans le fichier v8/src/roots/roots.h, et ils sont organisés de manière contiguë en mémoire. Une fois que ces objets natifs, qui ne devraient pas être divulgués, sont exposés à JavaScript, il est possible d'exécuter n'importe quel code dans le sandbox.
Pour vérifier cela, vous pouvez modifier la valeur de retour de la fonction native %TheHole() de V8 en Uninitialized Oddball.
Contourner la protection HardenType
Le code de contournement complet est donné dans l'issue 1352549. La logique de base simplifiée est la suivante :
javascript
fonction lire(objet, idx) {
return obj[idx];
}
let uninitialized = %TheHole();
let arr = [1.1];
let res = read(non initialisé, 0x12345);
%DebugPrint(res);
Ce code peut toujours réaliser une lecture relativement arbitraire dans la dernière version V8 11.0.0.
En analysant le code d'assemblage de la fonction read optimisée, on peut constater qu'elle ne vérifie que si la propriété prop de l'objet obj est correcte, mais ne vérifie pas la valeur de obj.prop en tant que clé. Cela entraîne une confusion de type lors du calcul, permettant une lecture arbitraire.
Lorsqu'un uninitialized_oddball est passé, le calcul commence à partir de obj à partir d'une instruction spécifique, et se termine finalement par l'instruction vmovsd xmm0,[r9+r11*8+0x7] qui effectue une lecture arbitraire, les données étant stockées dans le registre xmm0.
La méthode de correction 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 l'offset pour retourner les valeurs du tableau.
Avertissement PatchGap
Lors de l'examen des logiciels susceptibles de présenter un PatchGap, il a été constaté que Skype n'avait pas encore corrigé cette vulnérabilité. Dans l'architecture x86, en raison de l'absence de compression d'adresse, la lecture et l'écriture arbitraires se font directement par rapport à l'ensemble du processus.
Bien que Skype ait activé l'ASLR, en raison de la taille importante de ses fichiers, placés directement dans 4 Go de mémoire, un attaquant n'a qu'à lire ou écrire à une adresse fixe pour avoir une forte probabilité d'accéder au contenu des fichiers de Skype. En combinant cela avec des méthodes traditionnelles telles que l'analyse PE, il est possible de compléter toute la chaîne d'exploitation de la vulnérabilité.
Cette fois, PatchGap concerne non seulement l'Issue1352549, mais a également considérablement réduit la difficulté d'exploitation de problèmes similaires à l'Issue1314616 et à l'Issue1216437. Les hackers n'ont presque pas besoin de recherches supplémentaires pour réaliser une exploitation complète de toute fuite d'une vulnérabilité uninitialized_oddball.
Résumé
Cet article présente une méthode pour réaliser une lecture arbitraire en révélant un uninitialized_Oddball dans la valeur Sentinel. Il existe également d'autres valeurs Sentinel dans V8 qui pourraient causer des problèmes similaires. Cela nous donne les enseignements suivants :
D'autres fuites uninitialized_Oddball peuvent-elles également permettre une exécution de code à distance (RCE) facile dans V8.
Il existe encore un débat sur la question de savoir si de tels problèmes doivent être traités officiellement comme des problèmes de sécurité.
Dans le fuzzer, il peut être envisagé d'ajouter des valeurs Sentinel telles que %TheHole/uninitialized_Oddball en tant que variables pour explorer d'autres primitives d'exploitation.
Quoi qu'il en soit, ce type de problème raccourcira considérablement le délai dans lequel les hackers peuvent exploiter pleinement.
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.
9 J'aime
Récompense
9
5
Reposter
Partager
Commentaire
0/400
CoffeeNFTrader
· 07-22 08:13
Encore une vulnérabilité de sécurité, cela panique tout le monde.
Voir l'originalRépondre0
Hash_Bandit
· 07-21 21:23
l'exploitation minière du moteur js vient de devenir réelle... la difficulté d'exploitation est au maximum
Voir l'originalRépondre0
ConsensusDissenter
· 07-20 00:25
Un autre trou noir de code est apparu, c'est trop effrayant.
Voir l'originalRépondre0
Blockblind
· 07-20 00:19
v8 a aussi une si grande vulnérabilité ? Je meurs de rire
Voir l'originalRépondre0
BlockchainTalker
· 07-20 00:12
je suis en fait surpris que V8 ait encore du mal avec ça... p.s. où est mon isolation d'exécution fam ?
Analyse des exploits de la vulnérabilité Sentinel Value du moteur Chrome V8 : exécution de code à distance (RCE) réalisable sans études supplémentaires.
Analyse de l'exploitation de la vulnérabilité de la valeur sentinelle dans le moteur Chrome V8
La valeur sentinel est une valeur spéciale dans les algorithmes, généralement utilisée comme condition de terminaison dans les algorithmes de boucle ou de récursion. Il existe de nombreuses valeurs sentinel dans le code source de Chrome. Des recherches antérieures ont montré qu'il était possible d'exécuter n'importe quel code dans le bac à sable de Chrome en divulguant l'objet TheHole. L'équipe de Google a ensuite corrigé les vulnérabilités associées.
Cependant, il existe d'autres objets natifs dans V8 qui ne devraient pas être divulgués à JS. Cet article traite de l'objet Uninitialized Oddball, dont la divulgation peut conduire à des méthodes de contournement de sandbox qui sont encore disponibles dans la dernière version de V8.
Il convient de noter que cette méthode présente une certaine généralité :
CVE-2021-30551 Le PoC initial était la fuite d'un oddball interne non initialisé.
Le PoC de CVE-2022-1486 a également directement révélé UninitializedOddball.
Issue1352549 ( fournit des détails sur la méthode d'exploitation de CVE) non attribué.
Ces cas montrent qu'il est important de prêter attention à la possibilité d'attaques utilisant l'exploitation de l'Uninitialized Oddball.
Valeur sentinelle dans V8
La plupart des objets natifs de V8 sont définis dans le fichier v8/src/roots/roots.h, et ils sont organisés de manière contiguë en mémoire. Une fois que ces objets natifs, qui ne devraient pas être divulgués, sont exposés à JavaScript, il est possible d'exécuter n'importe quel code dans le sandbox.
Pour vérifier cela, vous pouvez modifier la valeur de retour de la fonction native %TheHole() de V8 en Uninitialized Oddball.
Contourner la protection HardenType
Le code de contournement complet est donné dans l'issue 1352549. La logique de base simplifiée est la suivante :
javascript fonction lire(objet, idx) { return obj[idx]; }
let uninitialized = %TheHole(); let arr = [1.1]; let res = read(non initialisé, 0x12345); %DebugPrint(res);
Ce code peut toujours réaliser une lecture relativement arbitraire dans la dernière version V8 11.0.0.
En analysant le code d'assemblage de la fonction read optimisée, on peut constater qu'elle ne vérifie que si la propriété prop de l'objet obj est correcte, mais ne vérifie pas la valeur de obj.prop en tant que clé. Cela entraîne une confusion de type lors du calcul, permettant une lecture arbitraire.
Lorsqu'un uninitialized_oddball est passé, le calcul commence à partir de obj à partir d'une instruction spécifique, et se termine finalement par l'instruction vmovsd xmm0,[r9+r11*8+0x7] qui effectue une lecture arbitraire, les données étant stockées dans le registre xmm0.
La méthode de correction 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 l'offset pour retourner les valeurs du tableau.
Avertissement PatchGap
Lors de l'examen des logiciels susceptibles de présenter un PatchGap, il a été constaté que Skype n'avait pas encore corrigé cette vulnérabilité. Dans l'architecture x86, en raison de l'absence de compression d'adresse, la lecture et l'écriture arbitraires se font directement par rapport à l'ensemble du processus.
Bien que Skype ait activé l'ASLR, en raison de la taille importante de ses fichiers, placés directement dans 4 Go de mémoire, un attaquant n'a qu'à lire ou écrire à une adresse fixe pour avoir une forte probabilité d'accéder au contenu des fichiers de Skype. En combinant cela avec des méthodes traditionnelles telles que l'analyse PE, il est possible de compléter toute la chaîne d'exploitation de la vulnérabilité.
Cette fois, PatchGap concerne non seulement l'Issue1352549, mais a également considérablement réduit la difficulté d'exploitation de problèmes similaires à l'Issue1314616 et à l'Issue1216437. Les hackers n'ont presque pas besoin de recherches supplémentaires pour réaliser une exploitation complète de toute fuite d'une vulnérabilité uninitialized_oddball.
Résumé
Cet article présente une méthode pour réaliser une lecture arbitraire en révélant un uninitialized_Oddball dans la valeur Sentinel. Il existe également d'autres valeurs Sentinel dans V8 qui pourraient causer des problèmes similaires. Cela nous donne les enseignements suivants :
D'autres fuites uninitialized_Oddball peuvent-elles également permettre une exécution de code à distance (RCE) facile dans V8.
Il existe encore un débat sur la question de savoir si de tels problèmes doivent être traités officiellement comme des problèmes de sécurité.
Dans le fuzzer, il peut être envisagé d'ajouter des valeurs Sentinel telles que %TheHole/uninitialized_Oddball en tant que variables pour explorer d'autres primitives d'exploitation.
Quoi qu'il en soit, ce type de problème raccourcira considérablement le délai dans lequel les hackers peuvent exploiter pleinement.