Analyse des problèmes de sécurité causés par la fuite de la valeur Sentinel dans le moteur Chrome v8
La valeur Sentinel est une valeur spéciale dans les algorithmes, généralement utilisée comme condition d'arrêt dans les algorithmes de boucle ou de récursion. Il existe plusieurs valeurs Sentinel dans le code source de Chrome, dont certaines, si elles sont divulguées dans l'environnement JavaScript, pourraient poser des problèmes de sécurité.
Des études antérieures ont montré qu'il était possible d'exécuter n'importe quel code dans le sandbox Chrome via la fuite de l'objet TheHole. L'équipe de Google a rapidement corrigé le CVE associé. Cependant, en plus de l'objet TheHole, il existe d'autres objets natifs dans v8 qui ne devraient pas être exposés à JS. Cet article discutera de l'objet Oddball non initialisé, cette méthode de contournement est encore utilisable dans la dernière version de V8.
Il est à noter que cette méthode a une certaine universalité :
Dans le CVE-2021-30551, le POC initial était la fuite d'un oddball interne non initialisé.
Dans CVE-2022-1486, le POC a également directement divulgué UninitializedOddball.
L'issue 1352549( fournit le code d'exploitation complet pour le CVE) non attribué.
Ces cas montrent que la fuite d'Uninitialized Oddball peut entraîner de graves problèmes de sécurité.
Valeur Sentinel dans V8
La plupart des objets natifs de 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. Si des objets natifs qui ne devraient pas être divulgués sont divulgués à JavaScript, cela pourrait permettre l'exécution de n'importe quel code dans le bac à sable.
Pour vérifier cela, nous pouvons modifier la fonction native de V8 pour révéler Uninitialized Oddball dans JavaScript. Plus précisément, nous pouvons modifier le décalage relatif de la fonction %TheHole() par rapport à l'isolate, afin qu'elle retourne Uninitialized Oddball.
Contourner la protection HardenType
L'utilisation d'Uninitialized Oddball permet de réaliser des lectures relativement arbitraires. Le code clé est le suivant :
javascript
fonction lire(obj, idx) {
retourner obj[idx];
}
let uninitialized_oddball = %TheHole();
let ab = new ArrayBuffer(8);
let fa = new Float64Array(ab);
let ia = new BigInt64Array(ab);
let val = read(uninitialized_oddball, "prop");
fa[0] = val;
console.log(ia[0]);
Dans le code assembleur optimisé, le décalage est calculé directement selon la sémantique JavaScript et la valeur du tableau est renvoyée, sans vérifier que obj.prop est la valeur de key. Cela a conduit à une confusion de type, permettant ainsi une lecture arbitraire.
Étant donné que Uninitialized Oddball est trié en premier dans la mémoire V8 et est plus primitif, il est plus facile à falsifier que l'objet TheHole, ce qui en fait la méthode préférée pour contourner HardenType.
La solution de réparation recommandé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.
Alerte PatchGap
Après analyse de l'Issue1352549, il a été constaté que certains logiciels pourraient présenter un problème de PatchGap. Par exemple, Skype n'a pas encore corrigé cette vulnérabilité. Sur la plateforme x86, en raison de l'absence de compression d'adresse, la lecture et l'écriture arbitraires sont relatives à l'ensemble du processus.
Bien que Skype ait activé l'ASLR, en raison de la taille importante des fichiers, un hacker peut facilement lire ou écrire à une adresse fixe, ce qui augmente fortement la 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 réaliser toute la chaîne d'exploitation de la vulnérabilité.
Cette fois, le PatchGap concerne non seulement l'Issue1352549, mais il va également considérablement réduire la difficulté d'exploitation de vulnérabilités similaires telles que CVE-2022-1486 et CVE-2021-30551. Les hackers n'ont presque pas besoin de recherches supplémentaires pour réaliser une exploitation complète.
Résumé
Cet article aborde brièvement les méthodes pour réaliser des lectures arbitraires en exploitant la fuite de Uninitialized Oddball. Il existe de nombreuses autres valeurs Sentinel dans V8, qui pourraient présenter des vulnérabilités similaires. Cela nous donne les enseignements suivants :
D'autres fuites d'Uninitialized Oddball peuvent-elles également permettre une exécution de code à distance (RCE) sur V8 ?
La question de savoir si ce type de problème doit être officiellement considéré comme un problème de sécurité reste controversée.
Est-il nécessaire d'inclure des variables comme %TheHole/Uninitialized Oddball dans Fuzzer pour découvrir de nouveaux primitives d'exploitation ?
Quoi qu'il en soit, ce type de problème réduira considérablement le cycle d'exploitation complet pour les hackers, ce qui mérite notre attention particulière.
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.
6 J'aime
Récompense
6
5
Partager
Commentaire
0/400
HallucinationGrower
· Il y a 11h
Oh mince, comment cela peut-il encore être divulgué ?
Voir l'originalRépondre0
CodeAuditQueen
· Il y a 11h
Encore un surface d'attaque de variante CVE, tsk tsk.
Voir l'originalRépondre0
WhaleWatcher
· Il y a 11h
Google joue avec le feu ? Recul historique.
Voir l'originalRépondre0
BearMarketSurvivor
· Il y a 11h
Il y a vraiment des bugs qui ne peuvent jamais être corrigés.
Voir l'originalRépondre0
CryptoAdventurer
· Il y a 11h
C'est encore le bon moment de payer la taxe sur l'intelligence ? Ceux qui comprennent, comprennent.
La fuite de la valeur Sentinel du moteur V8 entraîne des risques de sécurité. Un Oddball non initialisé devient un nouveau vecteur d'attaque.
Analyse des problèmes de sécurité causés par la fuite de la valeur Sentinel dans le moteur Chrome v8
La valeur Sentinel est une valeur spéciale dans les algorithmes, généralement utilisée comme condition d'arrêt dans les algorithmes de boucle ou de récursion. Il existe plusieurs valeurs Sentinel dans le code source de Chrome, dont certaines, si elles sont divulguées dans l'environnement JavaScript, pourraient poser des problèmes de sécurité.
Des études antérieures ont montré qu'il était possible d'exécuter n'importe quel code dans le sandbox Chrome via la fuite de l'objet TheHole. L'équipe de Google a rapidement corrigé le CVE associé. Cependant, en plus de l'objet TheHole, il existe d'autres objets natifs dans v8 qui ne devraient pas être exposés à JS. Cet article discutera de l'objet Oddball non initialisé, cette méthode de contournement est encore utilisable dans la dernière version de V8.
Il est à noter que cette méthode a une certaine universalité :
Dans le CVE-2021-30551, le POC initial était la fuite d'un oddball interne non initialisé.
Dans CVE-2022-1486, le POC a également directement divulgué UninitializedOddball.
L'issue 1352549( fournit le code d'exploitation complet pour le CVE) non attribué.
Ces cas montrent que la fuite d'Uninitialized Oddball peut entraîner de graves problèmes de sécurité.
Valeur Sentinel dans V8
La plupart des objets natifs de 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. Si des objets natifs qui ne devraient pas être divulgués sont divulgués à JavaScript, cela pourrait permettre l'exécution de n'importe quel code dans le bac à sable.
Pour vérifier cela, nous pouvons modifier la fonction native de V8 pour révéler Uninitialized Oddball dans JavaScript. Plus précisément, nous pouvons modifier le décalage relatif de la fonction %TheHole() par rapport à l'isolate, afin qu'elle retourne Uninitialized Oddball.
Contourner la protection HardenType
L'utilisation d'Uninitialized Oddball permet de réaliser des lectures relativement arbitraires. Le code clé est le suivant :
javascript fonction lire(obj, idx) { retourner obj[idx]; }
let uninitialized_oddball = %TheHole(); let ab = new ArrayBuffer(8); let fa = new Float64Array(ab); let ia = new BigInt64Array(ab);
let evil = [1.1, 2.2, 3.3]; evil.prop = 1;
%PréparerFonctionPourOptimisation(lire); lire(mal, 0); lire(mal, 1); %OptimizeFunctionOnNextCall(lire); lire(mal, 0);
let val = read(uninitialized_oddball, "prop"); fa[0] = val; console.log(ia[0]);
Dans le code assembleur optimisé, le décalage est calculé directement selon la sémantique JavaScript et la valeur du tableau est renvoyée, sans vérifier que obj.prop est la valeur de key. Cela a conduit à une confusion de type, permettant ainsi une lecture arbitraire.
Étant donné que Uninitialized Oddball est trié en premier dans la mémoire V8 et est plus primitif, il est plus facile à falsifier que l'objet TheHole, ce qui en fait la méthode préférée pour contourner HardenType.
La solution de réparation recommandé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.
Alerte PatchGap
Après analyse de l'Issue1352549, il a été constaté que certains logiciels pourraient présenter un problème de PatchGap. Par exemple, Skype n'a pas encore corrigé cette vulnérabilité. Sur la plateforme x86, en raison de l'absence de compression d'adresse, la lecture et l'écriture arbitraires sont relatives à l'ensemble du processus.
Bien que Skype ait activé l'ASLR, en raison de la taille importante des fichiers, un hacker peut facilement lire ou écrire à une adresse fixe, ce qui augmente fortement la 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 réaliser toute la chaîne d'exploitation de la vulnérabilité.
Cette fois, le PatchGap concerne non seulement l'Issue1352549, mais il va également considérablement réduire la difficulté d'exploitation de vulnérabilités similaires telles que CVE-2022-1486 et CVE-2021-30551. Les hackers n'ont presque pas besoin de recherches supplémentaires pour réaliser une exploitation complète.
Résumé
Cet article aborde brièvement les méthodes pour réaliser des lectures arbitraires en exploitant la fuite de Uninitialized Oddball. Il existe de nombreuses autres valeurs Sentinel dans V8, qui pourraient présenter des vulnérabilités similaires. Cela nous donne les enseignements suivants :
D'autres fuites d'Uninitialized Oddball peuvent-elles également permettre une exécution de code à distance (RCE) sur V8 ?
La question de savoir si ce type de problème doit être officiellement considéré comme un problème de sécurité reste controversée.
Est-il nécessaire d'inclure des variables comme %TheHole/Uninitialized Oddball dans Fuzzer pour découvrir de nouveaux primitives d'exploitation ?
Quoi qu'il en soit, ce type de problème réduira considérablement le cycle d'exploitation complet pour les hackers, ce qui mérite notre attention particulière.