
Prueba de concepto y análisis técnico para CVE-2026-85046, una confusión de tipos en V8 en el método inline Array.prototype.sort, que incluye la causa raíz, el diff del parche y la cadena de explotación para Chrome < 152.0.7977.82.
| Campo | Valor |
|---|
| CVSS | 8.8 (Alto) |
| CWE | CWE-843 (Confusión de tipos) |
| Componente | Motor JavaScript V8 -- sort inline Maglev/Turbofan |
| Afectados | Chrome < 152.0.7977.82, todos los navegadores basados en Chromium |
| Corregido | Chrome 152.0.7977.82 (2026-09-03) |
| Commit de corrección | e0562d87ad9c17042b581582c99237d798572e67 |
| CISA KEV | Añadido 2026-09-04, fecha límite 2026-09-18 |
| Explotación activa | Sí (confirmado por Google) |
| Reportero | Salvatore Gulizia (Serotav) |
La optimización de sort inline acepta retroalimentación polimórfica de element-kind (PACKED_SMI_ELEMENTS + PACKED_ELEMENTS). Cuando el comparador llama a arr.fill(0), V8 migra el mapa del receptor hacia atrás de PACKED_ELEMENTS a PACKED_SMI_ELEMENTS. La comprobación del mapa posterior al sort pasa porque PACKED_SMI_ELEMENTS estaba en el conjunto de retroalimentación original. La escritura de copia de vuelta escribe punteros a objetos en un array cuyo mapa afirma elementos solo-SMI.
La corrección añade una condición previa que requiere que todos los mapas del receptor en la retroalimentación compartan el mismo elements_kind antes de inline del sort.
| Archivo | Descripción |
|---|---|
patch-analysis.md | Análisis completo del diff del parche con causa raíz, mecanismo de activación y evaluación de primitivas de explotación |
patch-analysis.json | Datos estructurados: hashes de commits, CWE, versiones afectadas, primitivas de explotación |
v8-research.md | Inmersión profunda en element kinds de V8, PoCs de arte previo (CVE-2020-6418, CVE-2025-2135, CVE-2024-4947, etc.), arquitectura de sandbox, técnicas de escape |
poc-minimal.js | Activador mínimo de confusión de tipos para d8 (d8 --allow-natives-syntax poc-minimal.js) |
poc.html | Cadena de explotación completa: confusión de tipos, primitiva addrof, heap spray, fakeobj mediante solapamiento de backing store, fuga de información |
exploit-notes.md | Informe técnico: cadena paso a paso, diagramas de diseño del heap, compresión de punteros, impacto del sandbox, indicadores de detección, remediación |
# Con ayudas de depuración de V8
d8 --allow-natives-syntax poc-minimal.js
# Sin ellas (verificación heurística mediante String())
d8 poc-minimal.js
Abra poc.html en Chrome < 152.0.7977.82. El exploit se ejecuta automáticamente y registra cada etapa en la página y en la consola del desarrollador. Etapas:
arr.fill(0) en el comparador del sortaddrof -- filtra punteros comprimidos del heap como enterosfakeobj mediante solapamiento -- forja referencias a objetos a partir de enteros controladosEntrenamiento (2000 iter)
|
v
Confusión de tipos: mapa PACKED_ELEMENTS -> mapa PACKED_SMI_ELEMENTS
(el backing store aún contiene punteros a objetos)
|
v
addrof: String(confused_array) filtra punteros como enteros
|
v
fakeobj: el solapamiento double/object array escribe puntero controlado
|
v
JSArray falso con puntero de elements controlado -> R/W arbitrario (intra-cage)
|
v
Ejecución de código dentro del sandbox de V8 (requiere escape del sandbox para RCE completo)
kMaxInlineSortLength)arr.fill() con valores SMI para la migración hacia atrás del mapaPACKED_SMI como PACKED_ELEMENTS deben pasarse durante el entrenamiento