
Proof-of-concept und technische Analyse für CVE-2026-85046, eine V8-Typverwechslung im Inline-`Array.prototype.sort`, einschließlich Root Cause, Patch-Diff und Exploitation-Kette für Chrome < 152.0.7977.82.
| Feld | Wert |
|---|
| CVSS | 8.8 (Hoch) |
| CWE | CWE-843 (Typverwechslung) |
| Komponente | V8-JavaScript-Engine -- Maglev/Turbofan-Inline-Sortierung |
| Betroffen | Chrome < 152.0.7977.82, alle Chromium-basierten Browser |
| Behoben | Chrome 152.0.7977.82 (2026-09-03) |
| Fix-Commit | e0562d87ad9c17042b581582c99237d798572e67 |
| CISA KEV | Hinzugefügt 2026-09-04, Frist 2026-09-18 |
| Ausnutzung in freier Wildbahn | Ja (von Google bestätigt) |
| Melder | Salvatore Gulizia (Serotav) |
Die Inline-Sortieroptimierung akzeptiert polymorphes Element-Kind-Feedback (PACKED_SMI_ELEMENTS + PACKED_ELEMENTS). Wenn der Komparator arr.fill(0) aufruft, migriert V8 die Receiver-Map rückwärts von PACKED_ELEMENTS zu PACKED_SMI_ELEMENTS. Die Map-Prüfung nach der Sortierung besteht, da PACKED_SMI_ELEMENTS im ursprünglichen Feedback-Satz enthalten war. Das Zurückschreiben (Copy-back) schreibt Objektzeiger in ein Array, dessen Map nur SMI-Elemente beansprucht.
Der Fix fügt eine Vorbedingung hinzu, die verlangt, dass alle Receiver-Maps im Feedback dieselbe elements_kind aufweisen, bevor die Sortierung inline eingebettet wird.
| Datei | Beschreibung |
|---|---|
patch-analysis.md | Vollständige Patch-Diff-Analyse mit Grundursache, Auslösemechanismus und Bewertung der Ausnutzungsprimitive |
patch-analysis.json | Strukturierte Daten: Commit-Hashes, CWE, betroffene Versionen, Ausnutzungsprimitive |
v8-research.md | V8-Element-Kind-Tiefenanalyse, frühere PoCs (CVE-2020-6418, CVE-2025-2135, CVE-2024-4947 usw.), Sandbox-Architektur, Escape-Techniken |
poc-minimal.js | Minimaler Typverwechslungs-Auslöser für d8 (d8 --allow-natives-syntax poc-minimal.js) |
poc.html | Vollständige Ausnutzungskette: Typverwechslung, addrof-Primitive, Heap-Spray, fakeobj über Backing-Store-Überlappung, Informationsleck |
exploit-notes.md | Technische Dokumentation: Schritt-für-Schritt-Kette, Heap-Layout-Diagramme, Zeigerkomprimierung, Sandbox-Auswirkungen, Erkennungsindikatoren, Abhilfemaßnahmen |
# Mit V8-Debug-Hilfsfunktionen
d8 --allow-natives-syntax poc-minimal.js
# Ohne (heuristische Verifizierung über String())
d8 poc-minimal.js
Öffnen Sie poc.html in Chrome < 152.0.7977.82. Der Exploit läuft automatisch und protokolliert jede Stufe auf der Seite und in der Entwicklerkonsole. Stufen:
arr.fill(0) im Sortier-Komparatoraddrof-Primitive -- leakt komprimierte Heap-Zeiger als Ganzzahlenfakeobj über Überlappung -- erzeugt Objektreferenzen aus kontrollierten GanzzahlenTraining (2000 Iter.)
|
v
Typverwechslung: PACKED_ELEMENTS-Map -> PACKED_SMI_ELEMENTS-Map
(Backing Store enthält weiterhin Objektzeiger)
|
v
addrof: String(confused_array) leakt Zeiger als Ganzzahlen
|
v
fakeobj: Double-/Objekt-Array-Überlappung schreibt kontrollierten Zeiger
|
v
Fake-JSArray mit kontrolliertem Elements-Zeiger -> beliebiges R/W (intra-cage)
|
v
Codeausführung innerhalb der V8-Sandbox (erfordert Sandbox-Escape für vollständiges RCE)
kMaxInlineSortLength)arr.fill() mit SMI-Werten aufrufen, um die rückwärtige Map-Migration auszulösenPACKED_SMI- als auch PACKED_ELEMENTS-Arrays müssen während des Trainings übergeben werden