Explorer l'utilisation de la valeur sentinelle pour contourner le mécanisme de protection de Chrome V8
La valeur Sentinel est une valeur spéciale dans un algorithme, généralement utilisée comme condition d'arrêt pour les algorithmes de boucle ou de récursion. Il existe plusieurs valeurs Sentinel dans le code source de Chrome. Des études antérieures ont montré que l'exposition de l'objet TheHole pouvait permettre l'exécution de code arbitraire dans le sandbox pour certains CVE. L'équipe de Google a rapidement mis à jour les CVE concernés sur GitHub environ une semaine après que nous avons publié notre article expliquant le contournement de cette atténuation.
On peut voir dans le code source de Chrome un correctif de mitigation visant à l'objet TheHole qui permet l'exécution de code arbitraire. Mais en réalité, il existe encore de nombreux autres objets natifs dans V8 qui ne devraient pas être divulgués au JS. Cet article discutera de l'objet Uninitialized Oddball, dont la méthode d'échappement a été vue pour la première fois dans l'Issue1352549. Il convient de noter qu'actuellement, cette méthode est toujours utilisable dans la dernière version de V8, et Google n'a pas encore publié de correctif à ce sujet.
Cette méthode possède une grande polyvalence :
L'POC présenté pour la première fois dans l'issue 1216437( CVE-2021-30551) est la fuite d'un internal uninitialized oddball.
L'issue 1314616( CVE-2022-1486) contenait également un POC qui a directement divulgué UninitializedOddball.
L'impact de l'émission 1352549( NoCVE ) ne doit pas être sous-estimé.
Tout cela démontre clairement qu'il est nécessaire de réexaminer les logiciels susceptibles d'être affectés par PatchGap.
Valeur Sentinel dans V8
La plupart des objets natifs de V8 sont définis dans le fichier v8/src/roots/roots.h, et ils sont disposé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, cela peut entraîner l'exécution de n'importe quel code dans le bac à sable.
Pour vérifier l'efficacité de cette méthode dans la dernière version de V8, nous pouvons modifier la fonction native de V8 %TheHole() pour qu'elle retourne Uninitialized Oddball.
Contournement de HardenType
L'issue 1352549 fournit le code complet. Après extraction et simplification, nous avons testé dans V8 11.0.0 et avons pu toujours réaliser une lecture relativement arbitraire.
En déassemblant la fonction read JavaScript optimisée, on peut voir que lors de la vérification de obj.prop, il n'y a pas de vérification de la valeur avec obj.prop comme clé, mais on calcule directement le décalage pour obtenir la valeur du tableau selon la sémantique JavaScript. Cela entraîne une confusion de types lors du calcul, permettant une lecture arbitraire.
Lorsqu'un uninitialized_oddball est passé, le calcul commence à partir de obj et se termine par l'instruction vmovsd xmm0,[r9+r11*8+0x7] qui réalise une lecture arbitraire, les données étant stockées dans le registre xmm0.
Étant donné que uninitialized_oddball est classé en haut dans la mémoire V8 et est plus primitif, il est plus facile de le falsifier, ce qui en fait la méthode de contournement privilégiée. Pour une écriture arbitraire, vous pouvez vous référer à l'analyse de construction de l'Issue1352549.
La suggestion de correction est d'ajouter une vérification de la carte du tableau lors du retour des éléments du tableau par la fonction optimisée, afin d'éviter de calculer directement le décalage pour renvoyer les valeurs du tableau.
Avertissement PatchGap
Après avoir analysé le problème 1352549, nous avons examiné les logiciels susceptibles de présenter un PatchGap et avons constaté que Skype n'a pas encore corrigé cette vulnérabilité. La lecture et l'écriture arbitraires sous x86 sont légèrement différentes, car il n'y a pas de compression d'adresse, c'est directement relatif à l'ensemble du processus.
Dans l'utilisation de Skype, bien que ASLR soit activé, en raison de la taille excessive des fichiers, un pirate peut simplement lire et écrire à une adresse fixe, ce qui peut très probablement lui permettre de lire et d'écrire le contenu des fichiers Skype. En combinant cela avec des approches traditionnelles comme l'analyse PE, il n'est pas difficile de compléter toute la chaîne d'exploitation de la vulnérabilité.
Cette fois, PatchGap concerne non seulement l'Issue1352549, mais la divulgation de la nouvelle méthode d'esquive a également considérablement réduit la difficulté d'exploitation des problèmes similaires à l'Issue1314616 et l'Issue1216437. Les hackers peuvent presque réaliser une exploitation complète de toute fuite de la vulnérabilité uninitialized_oddball sans coût d'étude.
Résumé
Cet article discute brièvement de l'exécution d'une lecture arbitraire via la fuite de uninitialized_Oddball. Il existe de nombreuses autres valeurs Sentinel dans V8, et il est également facile de rencontrer des plantages non int3 lors des tests. Étant donné qu'Uninitialized_Oddball et TheHole peuvent contourner la protection de V8, d'autres valeurs Sentinel pourraient également présenter des problèmes similaires.
Cela nous donne quelques enseignements :
D'autres fuites uninitialized_Oddball peuvent-elles également permettre d'atteindre une exécution de code à distance (RCE) dans V8 ?
Google a rapidement corrigé le contournement de TheHole, mais le problème d'utilisation du ramasse-miettes pour contourner l'ASLR reste en suspens depuis longtemps, ce qui montre que la question de savoir si des problèmes similaires sont considérés comme des problèmes de sécurité officiels demeure floue.
Si cela est considéré comme un problème de sécurité formel, est-il nécessaire d'envisager d'inclure des valeurs Sentinelles telles que %TheHole/uninitialized_Oddball comme variables dans le fuzzer, afin d'explorer d'autres primitives d'exploitation.
Quelles que soient les questions de ce type, qu'elles soient officiellement considérées comme des problèmes de sécurité ou non, elles réduiront considérablement le temps nécessaire aux hackers pour exploiter complètement.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
16 J'aime
Récompense
16
6
Partager
Commentaire
0/400
OptionWhisperer
· Il y a 9h
Cette vulnérabilité est méchante, les petits détails peuvent être fatals.
Voir l'originalRépondre0
OnchainFortuneTeller
· Il y a 9h
Ce bug est incroyable.
Voir l'originalRépondre0
ExpectationFarmer
· Il y a 9h
Les vulnérabilités sont vraiment difficiles à prévenir !
Voir l'originalRépondre0
MysteryBoxBuster
· Il y a 9h
v8 a encore échoué, c'est brûlant!
Voir l'originalRépondre0
BlockchainFries
· Il y a 9h
J'ai eu un vertige en jetant un coup d'œil au titre.
Exploration de la vulnérabilité Sentinel Value du moteur V8 : Contournement de la protection pour réaliser une exécution de code arbitraire
Explorer l'utilisation de la valeur sentinelle pour contourner le mécanisme de protection de Chrome V8
La valeur Sentinel est une valeur spéciale dans un algorithme, généralement utilisée comme condition d'arrêt pour les algorithmes de boucle ou de récursion. Il existe plusieurs valeurs Sentinel dans le code source de Chrome. Des études antérieures ont montré que l'exposition de l'objet TheHole pouvait permettre l'exécution de code arbitraire dans le sandbox pour certains CVE. L'équipe de Google a rapidement mis à jour les CVE concernés sur GitHub environ une semaine après que nous avons publié notre article expliquant le contournement de cette atténuation.
On peut voir dans le code source de Chrome un correctif de mitigation visant à l'objet TheHole qui permet l'exécution de code arbitraire. Mais en réalité, il existe encore de nombreux autres objets natifs dans V8 qui ne devraient pas être divulgués au JS. Cet article discutera de l'objet Uninitialized Oddball, dont la méthode d'échappement a été vue pour la première fois dans l'Issue1352549. Il convient de noter qu'actuellement, cette méthode est toujours utilisable dans la dernière version de V8, et Google n'a pas encore publié de correctif à ce sujet.
Cette méthode possède une grande polyvalence :
L'POC présenté pour la première fois dans l'issue 1216437( CVE-2021-30551) est la fuite d'un internal uninitialized oddball.
L'issue 1314616( CVE-2022-1486) contenait également un POC qui a directement divulgué UninitializedOddball.
L'impact de l'émission 1352549( NoCVE ) ne doit pas être sous-estimé.
Tout cela démontre clairement qu'il est nécessaire de réexaminer les logiciels susceptibles d'être affectés par PatchGap.
Valeur Sentinel dans V8
La plupart des objets natifs de V8 sont définis dans le fichier v8/src/roots/roots.h, et ils sont disposé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, cela peut entraîner l'exécution de n'importe quel code dans le bac à sable.
Pour vérifier l'efficacité de cette méthode dans la dernière version de V8, nous pouvons modifier la fonction native de V8 %TheHole() pour qu'elle retourne Uninitialized Oddball.
Contournement de HardenType
L'issue 1352549 fournit le code complet. Après extraction et simplification, nous avons testé dans V8 11.0.0 et avons pu toujours réaliser une lecture relativement arbitraire.
En déassemblant la fonction read JavaScript optimisée, on peut voir que lors de la vérification de obj.prop, il n'y a pas de vérification de la valeur avec obj.prop comme clé, mais on calcule directement le décalage pour obtenir la valeur du tableau selon la sémantique JavaScript. Cela entraîne une confusion de types lors du calcul, permettant une lecture arbitraire.
Lorsqu'un uninitialized_oddball est passé, le calcul commence à partir de obj et se termine par l'instruction vmovsd xmm0,[r9+r11*8+0x7] qui réalise une lecture arbitraire, les données étant stockées dans le registre xmm0.
Étant donné que uninitialized_oddball est classé en haut dans la mémoire V8 et est plus primitif, il est plus facile de le falsifier, ce qui en fait la méthode de contournement privilégiée. Pour une écriture arbitraire, vous pouvez vous référer à l'analyse de construction de l'Issue1352549.
La suggestion de correction est d'ajouter une vérification de la carte du tableau lors du retour des éléments du tableau par la fonction optimisée, afin d'éviter de calculer directement le décalage pour renvoyer les valeurs du tableau.
Avertissement PatchGap
Après avoir analysé le problème 1352549, nous avons examiné les logiciels susceptibles de présenter un PatchGap et avons constaté que Skype n'a pas encore corrigé cette vulnérabilité. La lecture et l'écriture arbitraires sous x86 sont légèrement différentes, car il n'y a pas de compression d'adresse, c'est directement relatif à l'ensemble du processus.
Dans l'utilisation de Skype, bien que ASLR soit activé, en raison de la taille excessive des fichiers, un pirate peut simplement lire et écrire à une adresse fixe, ce qui peut très probablement lui permettre de lire et d'écrire le contenu des fichiers Skype. En combinant cela avec des approches traditionnelles comme l'analyse PE, il n'est pas difficile de compléter toute la chaîne d'exploitation de la vulnérabilité.
Cette fois, PatchGap concerne non seulement l'Issue1352549, mais la divulgation de la nouvelle méthode d'esquive a également considérablement réduit la difficulté d'exploitation des problèmes similaires à l'Issue1314616 et l'Issue1216437. Les hackers peuvent presque réaliser une exploitation complète de toute fuite de la vulnérabilité uninitialized_oddball sans coût d'étude.
Résumé
Cet article discute brièvement de l'exécution d'une lecture arbitraire via la fuite de uninitialized_Oddball. Il existe de nombreuses autres valeurs Sentinel dans V8, et il est également facile de rencontrer des plantages non int3 lors des tests. Étant donné qu'Uninitialized_Oddball et TheHole peuvent contourner la protection de V8, d'autres valeurs Sentinel pourraient également présenter des problèmes similaires.
Cela nous donne quelques enseignements :
D'autres fuites uninitialized_Oddball peuvent-elles également permettre d'atteindre une exécution de code à distance (RCE) dans V8 ?
Google a rapidement corrigé le contournement de TheHole, mais le problème d'utilisation du ramasse-miettes pour contourner l'ASLR reste en suspens depuis longtemps, ce qui montre que la question de savoir si des problèmes similaires sont considérés comme des problèmes de sécurité officiels demeure floue.
Si cela est considéré comme un problème de sécurité formel, est-il nécessaire d'envisager d'inclure des valeurs Sentinelles telles que %TheHole/uninitialized_Oddball comme variables dans le fuzzer, afin d'explorer d'autres primitives d'exploitation.
Quelles que soient les questions de ce type, qu'elles soient officiellement considérées comme des problèmes de sécurité ou non, elles réduiront considérablement le temps nécessaire aux hackers pour exploiter complètement.