Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!
CVE-2021-21220 — Lehrpräsentation, die die Ausnutzung von CVE-2021-21220 detailliert beschreibt, eine V8-JIT-Typverwechslung, die zu OOB-Zugriff und RCE über WebAssembly führt, mit Analyse der Gegenmaßnahmen. | Kitploit
Lehrpräsentation, die die Ausnutzung von CVE-2021-21220 detailliert beschreibt, eine V8-JIT-Typverwechslung, die zu OOB-Zugriff und RCE über WebAssembly führt, mit Analyse der Gegenmaßnahmen.
Von falschem JIT-Verhalten zu Remote Code Execution
Übersicht
Diese Präsentation erklärt die Ausnutzung von CVE-2021-21220, einer Schwachstelle in Googles Chrome V8 JavaScript-Engine, die durch falsche JIT-Compiler-Annahmen während der Optimierung verursacht wurde.
Die Präsentation führt durch:
Wie V8 Just-In-Time (JIT)-Kompilierung durchführt
Wie ein Vorzeichen-/Vorzeichenlos-Typkonfusionsfehler während der Optimierung auftritt
Wie der Fehler zu einer Out-of-Bounds (OOB)-Array-Primitive führt
Wie Angreifer OOB-Zugriff nutzen können, um Adressen zu leaken und beliebige Speicherschreibvorgänge zu erreichen
Wie WebAssembly (Wasm) ein Ziel für native Codeausführung wird
Vorhandene Gegenmaßnahmen und moderne Browserabwehr
Präsentationsziele
Das Ziel dieser Präsentation ist es zu zeigen, wie ein subtiler Optimierungsfehler in einer modernen JavaScript-Engine eskalieren kann zu:
Speicherkorruption
Beliebigem Lesen/Schreiben
Native Code-Modifikation
Potenzieller Remote Code Execution (RCE)
Die Exploit-Kette verdeutlicht, wie JIT-Engines Leistung und Sicherheit ausbalancieren und wie falsche Optimierungsannahmen ausnutzbar werden können.
Behandelte Themen
1. V8-Architektur
Die Präsentation stellt die wichtigsten V8-Komponenten vor:
Ignition Interpreter
Führt JavaScript-Bytecode aus
Sammelt Laufzeit-Feedback
Speichert Typinformationen in Feedback-Vektoren
TurboFan Optimizer
Erstellt optimierte Graphen aus Laufzeit-Feedback
Fügt spekulative Annahmen und Guards ein
Führt aggressive Optimierungsdurchläufe durch
Machine Code Backend
Erzeugt native CPU-Befehle
Produziert optimierten Maschinencode für „heiße“ Funktionen
Das Architekturdiagramm in der Präsentation veranschaulicht, wie JavaScript sich bewegt von:
root@kitploit:~
Parsing → Bytecode → Optimization → Execution
2. Warum JavaScript schwer zu optimieren ist
JavaScript ist für Hochleistungsausführung herausfordernd, weil:
Variablen dynamisch ihren Typ ändern
Arrays ihre Struktur und Elementtypen ändern
Operatoren wie + mehrere Bedeutungen haben können
Laufzeitprüfungen teuer sind
V8 verwendet JIT-Kompilierung, um häufige Ausführungsmuster durch Spekulation über das Laufzeitverhalten zu optimieren.
3. Grundursache von CVE-2021-21220
Die Schwachstelle entsteht durch eine Nichtübereinstimmung zwischen vorzeichenbehafteten und vorzeichenlosen Integer-Werten während der JIT-Optimierung.
Schlüsselkonzepte, die gezeigt werden:
Uint32Array
Word32Xor
Falsche Typweiterleitung
ChangeInt32ToInt64
Falsche Auswahl von Assembler-Befehlen
Der Exploit missbraucht den Wert:
root@kitploit:~
0x80000000
der das Vorzeichenbit eines 32-Bit-Integer setzt.
4. Optimierungsfehler
Die Schwachstelle tritt auf, weil TurboFan die Operation:
root@kitploit:~
x ^ 0
vollständig weg optimiert.
Während dieser Optimierung:
Die XOR-Operation verschwindet
Typinformationen gehen verloren
Vorzeichenbehaftete Werte werden als vorzeichenlos interpretiert
Das JIT-Verhalten weicht vom Interpreter-Verhalten ab
Dies führt zu falscher Maschinencode-Generierung und angreiferkontrollierten Werten.
5. Aufbau einer OOB-Primitive
Der Exploit wandelt das falsche JIT-Ergebnis in Kontrolle über das Array-Verhalten um.
Die Präsentation zeigt:
Falscher optimierter Integer-Wert
Umwandlung in Kontrollvariable i
Unterschied zwischen Warmup und Trigger-Ausführung
Array.shift()-Längenunterlauf
Erstellung eines OOB-fähigen Arrays
Wichtige Exploit-Konzepte, die gezeigt werden:
Warmup-Optimierung
Spekulative Optimierung
Typkonfusion
Array-Längen-Korruption
6. Zugriff außerhalb der Grenzen
Sobald die Array-Länge -1 wird, erhält der Angreifer:
Lesezugriffe außerhalb der Grenzen
Schreibzugriffe außerhalb der Grenzen
Zugriff auf benachbarte V8-Heap-Objekte
Der Exploit demonstriert dann:
Pointer-Leaks
Objektadressen-Erkennung
Überlappende Arrays
Extraktion roher V8-Pointer
7. Missbrauch von WebAssembly
Die Präsentation erklärt, wie Angreifer Folgendes angreifen können:
Kompilierte WebAssembly-Codeseiten
Von V8 erzeugten nativen ausführbaren Speicher
Angriffsablauf:
Erstellen einer Wasm-Funktion
Lokalisieren des ausführbaren Speichers
Überschreiben des kompilierten Maschinencodes
Erneutes Ausführen von Wasm
Erreichen beliebiger nativer Codeausführung
Dies zeigt, wie ein JavaScript-Engine-Fehler zu Codeausführung auf Prozessebene eskalieren kann.
Verteidigung und Gegenmaßnahmen
Der letzte Abschnitt behandelt moderne Browserabwehr:
Compressed Pointers
Reduzieren direkte Pointer-Exposition und Heap-Vorhersagbarkeit.
Pointer Indirection
Verhindern direkten Zugriff auf rohe Speicheradressen.
Heap Sandboxing
Isolieren Speicherbereiche und verringern Exploit-Auswirkungen.
W^X (Write XOR Execute)
Verhindern, dass Seiten gleichzeitig beschreibbar und ausführbar sind.
Die Präsentation enthält auch den eigentlichen V8-Patch-Diff, der den Fix für das Vorzeichenerweiterungsproblem zeigt.
Wichtige Erkenntnisse
Diese Präsentation zeigt, wie:
Kleine Optimierungsfehler zu kritischen Schwachstellen werden können
JIT-Compiler die Komplexität der Angriffsfläche erheblich erhöhen
Laufzeitspekulation gefährliche Inkonsistenzen einführen kann
WebAssembly die Exploit-Landschaft verändert
Moderne Browser mehrere abgestufte Verteidigungen benötigen
Besprochene Technologien
JavaScript
Google V8 Engine
TurboFan
Ignition
WebAssembly (Wasm)
JIT Compilation
Memory Corruption
Out-of-Bounds Access
Browser Exploitation
Bildungszweck
Dieses Material ist ausschließlich bestimmt für:
Sicherheitsforschung
Bildungsdemonstrationen
Lernen über Browser-Interna
Schwachstellenanalyse
Verwenden Sie diese Informationen nicht gegen Systeme, die Sie nicht besitzen oder für die Sie keine Testberechtigung haben.