Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/borahll/cve-2021-21220
Analyse des VulnérabilitésExploitationExploitation d'Applications WebArticles et RechercheApprentissage et ÉducationExploitation de Binaires
GitHubborahll/cve-2021-21220

CVE-2021-21220

Présentation éducative détaillant l'exploitation de CVE-2021-21220, un bogue de confusion de type du compilateur JIT V8 menant à un accès hors limites, une lecture/écriture mémoire arbitraire et une exécution de code à distance via WebAssembly.

Voir le dépôt
il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Exploitation de CVE-2021-21220

Du comportement JIT incorrect à l'exécution de code à distance

Aperçu

Cette présentation explique l'exploitation de CVE-2021-21220, une vulnérabilité dans le moteur JavaScript V8 de Google Chrome causée par des hypothèses incorrectes du compilateur JIT lors de l'optimisation.

La présentation aborde les points suivants :

  • Comment V8 effectue la compilation Just-In-Time (JIT)
  • Comment un bug de confusion entre signé et non signé apparaît lors de l'optimisation
  • Comment le bug conduit à une primitive de dépassement de tableau (out-of-bounds, OOB)
  • Comment les attaquants peuvent exploiter l'accès OOB pour fuiter des adresses et obtenir des écritures mémoire arbitraires
  • Comment WebAssembly (Wasm) devient une cible pour l'exécution de code natif
  • Les mitigations existantes et les défenses des navigateurs modernes

Objectifs de la présentation

L'objectif de cette présentation est de montrer comment une erreur d'optimisation subtile dans un moteur JavaScript moderne peut dégénérer en :

  • Corruption mémoire
  • Primitives de lecture/écriture arbitraires
  • Modification de code natif
  • Exécution de code à distance potentielle (RCE)

La chaîne d'exploitation souligne comment les moteurs JIT équilibrent performance et sécurité, et comment des hypothèses d'optimisation incorrectes peuvent devenir exploitables.


Sujets abordés

1. Architecture de V8

La présentation présente les composants majeurs de V8 :

Interpréteur Ignition

  • Exécute le bytecode JavaScript
  • Collecte les retours d'exécution
  • Stocke les informations de type dans des vecteurs de rétroaction

Optimiseur TurboFan

  • Construit des graphes optimisés à partir des retours d'exécution
  • Insère des hypothèses spéculatives et des gardes
  • Effectue des passes d'optimisation agressives

Backend de code machine

  • Émet des instructions CPU natives
  • Produit du code machine optimisé pour les fonctions « chaudes »

Le diagramme d'architecture dans la présentation illustre comment JavaScript passe de :

root@kitploit:~
Analyse → Bytecode → Optimisation → Exécution

2. Pourquoi JavaScript est difficile à optimiser

JavaScript est difficile à exécuter avec des performances élevées car :

  • Les variables changent de type dynamiquement
  • Les tableaux changent de structure et de types d'éléments
  • Les opérateurs comme + peuvent avoir plusieurs significations
  • Les vérifications à l'exécution sont coûteuses

V8 utilise la compilation JIT pour optimiser les motifs d'exécution courants en spéculant sur le comportement à l'exécution.


3. Cause racine de CVE-2021-21220

La vulnérabilité provient d'une inadéquation entre entier signé et non signé lors de l'optimisation JIT.

Concepts clés présentés :

  • Uint32Array
  • Word32Xor
  • Propagation de type incorrecte
  • ChangeInt32ToInt64
  • Sélection d'instruction assembleur erronée

L'exploitation abuse de la valeur :

root@kitploit:~
0x80000000

qui définit le bit de signe d'un entier 32 bits.


4. Inadéquation d'optimisation

La vulnérabilité survient car TurboFan optimise :

root@kitploit:~
x ^ 0

en l'éliminant complètement.

Lors de cette optimisation :

  • L'opération XOR disparaît
  • L'information de type est perdue
  • Les valeurs signées sont interprétées comme non signées
  • Le comportement JIT diverge du comportement de l'interpréteur

Cela entraîne une génération de code machine incorrecte et des valeurs contrôlées par l'attaquant.


5. Construction d'une primitive OOB

L'exploitation convertit le résultat JIT incorrect en contrôle sur le comportement des tableaux.

La présentation démontre :

  1. Mauvaise valeur entière optimisée
  2. Conversion en variable de contrôle i
  3. Inadéquation entre l'exécution d'échauffement et celle de déclenchement
  4. Dépassement de capacité de la longueur de Array.shift()
  5. Création d'un tableau capable d'accès OOB

Concepts d'exploitation importants présentés :

  • Échauffement d'optimisation
  • Optimisation spéculative
  • Confusion de type
  • Corruption de la longueur du tableau

6. Accès hors limites (Out-of-Bounds)

Une fois la longueur du tableau devenue -1, l'attaquant obtient :

  • Lectures hors limites
  • Écritures hors limites
  • Accès aux objets V8 voisins sur le tas

L'exploitation démontre ensuite :

  • Fuite de pointeurs
  • Découverte d'adresses d'objets
  • Chevauchement de tableaux
  • Extraction de pointeurs V8 bruts

7. Abus de WebAssembly

La présentation explique comment les attaquants peuvent cibler :

  • Les pages de code compilé de WebAssembly
  • La mémoire exécutable native générée par V8

Flux d'attaque :

  1. Créer une fonction Wasm
  2. Localiser la mémoire exécutable
  3. Remplacer le code machine compilé
  4. Réexécuter Wasm
  5. Obtenir une exécution native arbitraire

Cela montre comment un bug du moteur JavaScript peut déboucher sur une exécution de code au niveau du processus.


Défenses et mitigations

La dernière section couvre les défenses modernes des navigateurs :

Pointeurs compressés

Réduire l'exposition directe des pointeurs et la prédictibilité du tas.

Indirection des pointeurs

Empêcher l'accès direct aux adresses mémoire brutes.

Bac à sable du tas (Heap Sandboxing)

Isoler les régions mémoire et réduire l'impact de l'exploitation.

W^X (Write XOR Execute)

Empêcher les pages d'être à la fois inscriptibles et exécutables.

La présentation inclut également le diff du patch V8 montrant le correctif pour le problème d'extension de signe.


Points clés à retenir

Cette présentation montre comment :

  • De petites erreurs d'optimisation peuvent devenir des vulnérabilités critiques
  • Les compilateurs JIT augmentent considérablement la complexité de la surface d'attaque
  • La spéculation à l'exécution peut introduire des incohérences dangereuses
  • WebAssembly change le paysage de l'exploitation
  • Les navigateurs modernes nécessitent plusieurs couches de défense

Technologies abordées

  • JavaScript
  • Moteur Google V8
  • TurboFan
  • Ignition
  • WebAssembly (Wasm)
  • Compilation JIT
  • Corruption mémoire
  • Accès hors limites
  • Exploitation de navigateur

Objectif pédagogique

Ce matériel est destiné strictement à :

  • La recherche en sécurité
  • Les démonstrations éducatives
  • L'apprentissage des internes des navigateurs
  • L'analyse de vulnérabilités

N'utilisez pas ces informations contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas l'autorisation de tester.


Référence

  • CVE-2021-21220
  • Moteur Google Chrome V8
  • Internes du compilateur TurboFan
  • Sécurité de l'exécution de WebAssembly
  • https://www.zerodayinitiative.com/blog/2021/12/15/exploitation-of-cve-2021-21220-from-incorrect-jit-behavior-to-rce
  • https://www.zerodayinitiative.com/blog/2021/12/8/understanding-the-root-cause-of-cve-2021-21220-a-chrome-bug-from-pwn2own-2021
  • https://www.zerodayinitiative.com/blog/2021/12/8/understanding-the-root-cause-of-cve-2021-21220-a-chrome-bug-from-pwn2own-2021
Télécharger l’outil