Analyse de la valeur Sentinel dans le moteur V8 de Google Chrome et ses risques de sécurité
La valeur Sentinel est une valeur spéciale dans les algorithmes, souvent utilisée comme condition d'arrêt dans les boucles ou la récursion. Le code source de Chrome contient plusieurs valeurs Sentinel, dont certaines, si elles sont divulguées dans l'environnement JavaScript, peuvent poser des problèmes de sécurité. Cet article explorera les méthodes pour contourner le mécanisme HardenProtect de Chrome V8 en utilisant des objets Uninitialized Oddball divulgués.
Valeur Sentinel dans V8
Le fichier roots.h du code source V8 définit de nombreux objets natifs qui sont disposés en mémoire de manière séquentielle. Si ces objets natifs, qui ne devraient pas être exposés à JavaScript, sont divulgués, cela pourrait entraîner une évasion de sandbox. La fuite de l'objet TheHole est un exemple typique.
Pour vérifier le problème dans la dernière version de V8, vous pouvez modifier la fonction %TheHole() pour qu'elle retourne un objet Uninitialized Oddball :
javascript
print(%DebugPrint(%TheHole()));
// Sortie: Valeur non initialisée
Contourner la protection HardenType
Utiliser Uninitialized Oddball pour construire le code PoC suivant permettant une lecture arbitraire :
javascript
function read(obj, idx) {
return obj[idx];
}
let uninitialized = %TheHole();
let arr = [1.1];
%PréparerFonctionPourOptimisation(lire);
lire(arr, 0);
lire(arr, 0);
%OptimiserFonctionSurProchaineAppel(lire);
lire(arr, 0);
print(lire(non initialisé, 0x1234n));
La fonction read optimisée par désassemblage montre qu'elle ne vérifie pas strictement le type de valeur de obj.prop, calculant directement le décalage en fonction de la sémantique JavaScript et retournant un élément de tableau, ce qui entraîne une confusion de type permettant une lecture arbitraire.
La solution recommandée consiste à ajouter une vérification du tableau map lorsque la fonction optimisée renvoie des éléments du tableau, afin d'éviter de calculer directement la valeur de retour d'offset.
Alerte de risque PatchGap
L'analyse a révélé que certains logiciels comme Skype pourraient présenter un problème de PatchGap, qui n'a pas encore été corrigé. Les hackers pourraient exploiter cette vulnérabilité pour réaliser une chaîne d'exploitation complète en peu de temps.
De plus, après la publication de nouvelles méthodes de contournement, la difficulté d'exploitation de certaines vulnérabilités historiques ( telles que l'Issue1314616 et l'Issue1216437) a considérablement diminué. Il est conseillé aux fabricants de réévaluer les risques de sécurité liés à ces vulnérabilités.
Résumé
Il y a encore de nombreuses autres valeurs Sentinel dans V8 qui méritent d'être étudiées davantage. Il est conseillé d'envisager d'ajouter des variables telles que %TheHole/Uninitialized_Oddball dans le Fuzzer pour découvrir de nouveaux primitives d'exploitation. Peu importe si ce type de problème est officiellement classé comme un problème de sécurité, cela pourrait considérablement raccourcir le cycle d'exploitation complet des hackers.
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.
Analyse et exploitation des vulnérabilités de sécurité de la valeur Sentinel du moteur Chrome V8
Analyse de la valeur Sentinel dans le moteur V8 de Google Chrome et ses risques de sécurité
La valeur Sentinel est une valeur spéciale dans les algorithmes, souvent utilisée comme condition d'arrêt dans les boucles ou la récursion. Le code source de Chrome contient plusieurs valeurs Sentinel, dont certaines, si elles sont divulguées dans l'environnement JavaScript, peuvent poser des problèmes de sécurité. Cet article explorera les méthodes pour contourner le mécanisme HardenProtect de Chrome V8 en utilisant des objets Uninitialized Oddball divulgués.
Valeur Sentinel dans V8
Le fichier roots.h du code source V8 définit de nombreux objets natifs qui sont disposés en mémoire de manière séquentielle. Si ces objets natifs, qui ne devraient pas être exposés à JavaScript, sont divulgués, cela pourrait entraîner une évasion de sandbox. La fuite de l'objet TheHole est un exemple typique.
Pour vérifier le problème dans la dernière version de V8, vous pouvez modifier la fonction %TheHole() pour qu'elle retourne un objet Uninitialized Oddball :
javascript print(%DebugPrint(%TheHole())); // Sortie: Valeur non initialisée
Contourner la protection HardenType
Utiliser Uninitialized Oddball pour construire le code PoC suivant permettant une lecture arbitraire :
javascript function read(obj, idx) { return obj[idx]; }
let uninitialized = %TheHole(); let arr = [1.1]; %PréparerFonctionPourOptimisation(lire); lire(arr, 0); lire(arr, 0); %OptimiserFonctionSurProchaineAppel(lire); lire(arr, 0);
print(lire(non initialisé, 0x1234n));
La fonction read optimisée par désassemblage montre qu'elle ne vérifie pas strictement le type de valeur de obj.prop, calculant directement le décalage en fonction de la sémantique JavaScript et retournant un élément de tableau, ce qui entraîne une confusion de type permettant une lecture arbitraire.
La solution recommandée consiste à ajouter une vérification du tableau map lorsque la fonction optimisée renvoie des éléments du tableau, afin d'éviter de calculer directement la valeur de retour d'offset.
Alerte de risque PatchGap
L'analyse a révélé que certains logiciels comme Skype pourraient présenter un problème de PatchGap, qui n'a pas encore été corrigé. Les hackers pourraient exploiter cette vulnérabilité pour réaliser une chaîne d'exploitation complète en peu de temps.
De plus, après la publication de nouvelles méthodes de contournement, la difficulté d'exploitation de certaines vulnérabilités historiques ( telles que l'Issue1314616 et l'Issue1216437) a considérablement diminué. Il est conseillé aux fabricants de réévaluer les risques de sécurité liés à ces vulnérabilités.
Résumé
Il y a encore de nombreuses autres valeurs Sentinel dans V8 qui méritent d'être étudiées davantage. Il est conseillé d'envisager d'ajouter des variables telles que %TheHole/Uninitialized_Oddball dans le Fuzzer pour découvrir de nouveaux primitives d'exploitation. Peu importe si ce type de problème est officiellement classé comme un problème de sécurité, cela pourrait considérablement raccourcir le cycle d'exploitation complet des hackers.