Contourner Chrome V8 HardenProtect en divulguant la valeur Sentinel
La valeur sentinelle est une valeur spéciale dans les algorithmes, souvent utilisée comme condition d'arrêt pour les algorithmes de boucle ou de récursion. Il existe plusieurs valeurs sentinelles dans le code source de Chrome. Des recherches précédentes ont montré comment utiliser l'objet TheHole pour provoquer une exécution de code arbitraire dans le bac à sable. Cet article discutera d'un autre objet natif de V8 - Uninitialized Oddball, qui peut encore être utilisé dans la dernière version de V8.
Cette méthode a une universalité :
Le problème 1216437 a d'abord introduit le concept de fuite d'un oddball interne non initialisé.
L'issue 1314616 a également révélé directement UninitializedOddball, même si la méthode d'exploitation n'était pas claire à l'époque.
L'issue 1352549 mérite d'être surveillée en raison de son impact potentiel.
Actuellement, certains logiciels n'ont toujours pas corrigé cette vulnérabilité.
La plupart des objets natifs dans V8 sont définis dans le fichier v8/src/roots/roots.h, et ces objets sont disposés de manière contiguë en mémoire. Une fois que des 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 valider cette méthode, vous pouvez modifier la fonction native de V8 pour divulguer Uninitialized Oddball dans JavaScript. En particulier, vous pouvez modifier le décalage relatif de la fonction %TheHole() par rapport à l'isolate.
Le code principal de cette méthode de contournement est le suivant :
javascript
function read(obj, prop) {
return obj[prop];
}
let uninitialized_oddball = %TheHole();
let arr = [1.1, 2.2, 3.3];
pour (let i = 0; i < 100000; i++) {
lire(arr, 0);
}
let val = read(uninitialized_oddball, 0);
console.log(val);
Dans V8 11.0.0, lors des tests, lorsque %TheHole() renvoie UninitializedOddball, une lecture relativement arbitraire peut toujours être réalisée.
L'assemblage clé de la fonction read optimisée est le suivant :
Lorsqu'un uninitialized_oddball est passé, le calcul commence à partir de 0x558b20004086 avec obj comme point de départ, et se termine finalement par une lecture arbitraire dans l'instruction vmovsd, les données étant stockées dans le registre xmm0.
La méthode de réparation suggérée consiste à ajouter une vérification du tableau map lors du retour des éléments du tableau dans la fonction optimisée, afin d'éviter de calculer directement le décalage pour retourner les valeurs du tableau.
Il est à noter que certains logiciels n'ont toujours pas corrigé cette vulnérabilité. Les méthodes d'exploitation sur la plateforme x86 sont légèrement différentes ; en raison de l'absence de compression d'adresse, la lecture et l'écriture arbitraires sont relatives à l'ensemble du processus. Même si ASLR est activé, en raison de la taille des fichiers, il y a toujours une probabilité élevée de lire et d'écrire le contenu cible.
Cette nouvelle méthode d'esquive réduit considérablement la difficulté d'exploitation des vulnérabilités similaires précédentes. Il est recommandé de réévaluer toutes les vulnérabilités qui divulguent uninitialized_oddball.
Il existe également d'autres valeurs Sentinel dans V8, qui peuvent également entraîner des problèmes similaires. Cela nous donne les enseignements suivants:
D'autres fuites uninitialized_Oddball sont-elles également faciles à réaliser V8 RCE.
Il reste controversé de savoir si de telles questions devraient être considérées comme des problèmes de sécurité.
Faut-il ajouter la valeur Sentinel en tant que variable dans Fuzzer pour découvrir de nouveaux primitives d'exploitation.
Quoi qu'il en soit, ce type de problème réduit considérablement le temps nécessaire aux hackers pour exploiter pleinement les vulnérabilités.
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.
10 J'aime
Récompense
10
5
Partager
Commentaire
0/400
ZKProofEnthusiast
· 07-09 11:53
Il est bien connu que V8 propulse le monde.
Voir l'originalRépondre0
SleepyValidator
· 07-06 23:01
Chrome n'est vraiment pas à prendre à la légère, c'est stable.
Voir l'originalRépondre0
FlashLoanLord
· 07-06 17:06
Comment se fait-il qu'un si grand bug n'ait toujours pas été corrigé ?
Voir l'originalRépondre0
ForkItAll
· 07-06 17:00
Cette vulnérabilité v8 est vraiment ybb.
Voir l'originalRépondre0
FudVaccinator
· 07-06 16:51
Une autre vulnérabilité majeure. Utiliser Firefox est vraiment agréable.
Le moteur Chrome V8 présente à nouveau une vulnérabilité de sécurité : la fuite de la valeur Sentinel peut contourner le sandbox.
Contourner Chrome V8 HardenProtect en divulguant la valeur Sentinel
La valeur sentinelle est une valeur spéciale dans les algorithmes, souvent utilisée comme condition d'arrêt pour les algorithmes de boucle ou de récursion. Il existe plusieurs valeurs sentinelles dans le code source de Chrome. Des recherches précédentes ont montré comment utiliser l'objet TheHole pour provoquer une exécution de code arbitraire dans le bac à sable. Cet article discutera d'un autre objet natif de V8 - Uninitialized Oddball, qui peut encore être utilisé dans la dernière version de V8.
Cette méthode a une universalité :
Le problème 1216437 a d'abord introduit le concept de fuite d'un oddball interne non initialisé.
L'issue 1314616 a également révélé directement UninitializedOddball, même si la méthode d'exploitation n'était pas claire à l'époque.
L'issue 1352549 mérite d'être surveillée en raison de son impact potentiel.
Actuellement, certains logiciels n'ont toujours pas corrigé cette vulnérabilité.
La plupart des objets natifs dans V8 sont définis dans le fichier v8/src/roots/roots.h, et ces objets sont disposés de manière contiguë en mémoire. Une fois que des 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 valider cette méthode, vous pouvez modifier la fonction native de V8 pour divulguer Uninitialized Oddball dans JavaScript. En particulier, vous pouvez modifier le décalage relatif de la fonction %TheHole() par rapport à l'isolate.
Le code principal de cette méthode de contournement est le suivant :
javascript function read(obj, prop) { return obj[prop]; }
let uninitialized_oddball = %TheHole(); let arr = [1.1, 2.2, 3.3];
pour (let i = 0; i < 100000; i++) { lire(arr, 0);
}
let val = read(uninitialized_oddball, 0); console.log(val);
Dans V8 11.0.0, lors des tests, lorsque %TheHole() renvoie UninitializedOddball, une lecture relativement arbitraire peut toujours être réalisée.
L'assemblage clé de la fonction read optimisée est le suivant :
0x558b20004086 mov r11,rdi 0x558b20004089 movzx edi,byte ptr [r11+0xb] 0x558b2000408d cmp edi,0x81 0x558b20004093 jnz 0x558b200040d8 0x558b20004095 mov r9,qword ptr [r11+0xf] 0x558b20004099 test esi,esi 0x558b2000409b js 0x558b200040d8 0x558b2000409d movsxd r11,esi 0x558b200040a0 cmp r11,qword ptr [r9+0xf] 0x558b200040a4 jae 0x558b200040d8 0x558b200040a6 vmovsd xmm0,[r9+r11*8+0x7]
Lorsqu'un uninitialized_oddball est passé, le calcul commence à partir de 0x558b20004086 avec obj comme point de départ, et se termine finalement par une lecture arbitraire dans l'instruction vmovsd, les données étant stockées dans le registre xmm0.
La méthode de réparation suggérée consiste à ajouter une vérification du tableau map lors du retour des éléments du tableau dans la fonction optimisée, afin d'éviter de calculer directement le décalage pour retourner les valeurs du tableau.
Il est à noter que certains logiciels n'ont toujours pas corrigé cette vulnérabilité. Les méthodes d'exploitation sur la plateforme x86 sont légèrement différentes ; en raison de l'absence de compression d'adresse, la lecture et l'écriture arbitraires sont relatives à l'ensemble du processus. Même si ASLR est activé, en raison de la taille des fichiers, il y a toujours une probabilité élevée de lire et d'écrire le contenu cible.
Cette nouvelle méthode d'esquive réduit considérablement la difficulté d'exploitation des vulnérabilités similaires précédentes. Il est recommandé de réévaluer toutes les vulnérabilités qui divulguent uninitialized_oddball.
Il existe également d'autres valeurs Sentinel dans V8, qui peuvent également entraîner des problèmes similaires. Cela nous donne les enseignements suivants:
D'autres fuites uninitialized_Oddball sont-elles également faciles à réaliser V8 RCE.
Il reste controversé de savoir si de telles questions devraient être considérées comme des problèmes de sécurité.
Faut-il ajouter la valeur Sentinel en tant que variable dans Fuzzer pour découvrir de nouveaux primitives d'exploitation.
Quoi qu'il en soit, ce type de problème réduit considérablement le temps nécessaire aux hackers pour exploiter pleinement les vulnérabilités.