
Proof-of-concept e analisi tecnica per CVE-2026-85046, una type confusion in V8 nell'inline di Array.prototype.sort, inclusi root cause, diff della patch e catena di sfruttamento per Chrome < 152.0.7977.82.
| Campo | Valore |
|---|
| CVSS | 8.8 (Alto) |
| CWE | CWE-843 (Confusione di tipo) |
| Componente | Motore JavaScript V8 -- sort inline Maglev/Turbofan |
| Interessati | Chrome < 152.0.7977.82, tutti i browser basati su Chromium |
| Corretto | Chrome 152.0.7977.82 (2026-09-03) |
| Commit di correzione | e0562d87ad9c17042b581582c99237d798572e67 |
| CISA KEV | Aggiunto 2026-09-04, scadenza 2026-09-18 |
| Sfruttamento in natura | Sì (confermato da Google) |
| Segnalatore | Salvatore Gulizia (Serotav) |
L'ottimizzazione del sort inline accetta feedback polimorfico del tipo di elementi (PACKED_SMI_ELEMENTS + PACKED_ELEMENTS). Quando il comparatore chiama arr.fill(0), V8 migra la mappa del ricevente all'indietro da PACKED_ELEMENTS a PACKED_SMI_ELEMENTS. Il controllo della mappa post-sort viene superato perché PACKED_SMI_ELEMENTS era nel set di feedback originale. La scrittura di ritorno scrive puntatori a oggetti in un array la cui mappa dichiara elementi solo SMI.
La correzione aggiunge una precondizione che richiede che tutte le mappe del ricevente nel feedback condividano lo stesso elements_kind prima di inlining del sort.
| File | Descrizione |
|---|---|
patch-analysis.md | Analisi completa del diff della patch con causa principale, meccanismo di attivazione e valutazione delle primitive di sfruttamento |
patch-analysis.json | Dati strutturati: hash dei commit, CWE, versioni interessate, primitive di sfruttamento |
v8-research.md | Approfondimento sui tipi di elementi V8, PoC precedenti (CVE-2020-6418, CVE-2025-2135, CVE-2024-4947, ecc.), architettura sandbox, tecniche di escape |
poc-minimal.js | Attivazione minima della confusione di tipo per d8 (d8 --allow-natives-syntax poc-minimal.js) |
poc.html | Catena di sfruttamento completa: confusione di tipo, primitiva addrof, heap spray, fakeobj tramite sovrapposizione del backing store, leak di informazioni |
exploit-notes.md | Documentazione tecnica: catena passo-passo, diagrammi del layout dell'heap, compressione dei puntatori, impatto della sandbox, indicatori di rilevamento, rimedio |
# Con helper di debug V8
d8 --allow-natives-syntax poc-minimal.js
# Senza (verifica euristica tramite String())
d8 poc-minimal.js
Aprire poc.html in Chrome < 152.0.7977.82. L'exploit viene eseguito automaticamente e registra ogni fase nella pagina e nella console sviluppatore. Fasi:
arr.fill(0) nel comparatore del sortaddrof -- rivela puntatori compressi dell'heap come interifakeobj tramite sovrapposizione -- forgia riferimenti a oggetti da interi controllatiAddestramento (2000 iter)
|
v
Confusione di tipo: mappa PACKED_ELEMENTS -> mappa PACKED_SMI_ELEMENTS
(il backing store contiene ancora puntatori a oggetti)
|
v
addrof: String(array_confuso) rivela puntatori come interi
|
v
fakeobj: la sovrapposizione double/object array scrive un puntatore controllato
|
v
JSArray falso con puntatore agli elementi controllato -> R/W arbitrario (intra-cage)
|
v
Esecuzione di codice all'interno della sandbox V8 (richiede escape dalla sandbox per RCE completo)
kMaxInlineSortLength)arr.fill() con valori SMI per la migrazione all'indietro della mappaPACKED_SMI che PACKED_ELEMENTS