
Exploit de prueba de concepto para CVE-2025-6554, una vulnerabilidad del motor JavaScript V8 que permite acceso no autorizado a valores 'Hole' no inicializados mediante encadenamiento opcional, posibilitando confusión de tipos y manipulación de memoria.
CVE-2025-6554 es una vulnerabilidad en el intérprete V8 de Chrome (Engine JavaScript) (verificación de 'Hole' - control inadecuado en variables no previstas dentro de expresiones con encadenamiento opcional. El POC (CVE-2025-6554-POC.JS) explora una falla en el mecanismo de verificación de 'Hole' en variables antes de su uso, permitiendo la lectura de valores no inicializados, un comportamiento que normalmente está bloqueado por una referencia.
function leak_hole() {
let x;
delete x?.[y]?.a;
return y;
let y;
}
function pwn() {
let hole = leak_hole();
%DebugPrint(hole);
}
pwn();
let x; y let y; declaran variables de ámbito local.delete x?.[y]?.a utiliza encadenamiento opcional para acceder de forma segura a una propiedad anidada.y se usa antes de ser declarada, lo que debería lanzar un error de referencia, pero en la versión anterior de V8, esto fallaba silenciosamente, permitiendo capturar el valor especial llamado "The Hole" (centinela para variables en TDZ - Zona Muerta Temporal).return y) en el código no debería ser accesible porque y aún está en TDZ. Pero la falla lo permite.ThrowReferenceErrorIfHole.delete x?.[y]?.y ya había sido verificada como "no siendo un agujero", pero esta verificación escapaba del ámbito controlado, y por lo tanto no se reevaluaba durante el return y.ThrowReferenceErrorIfHole en return y, asegurando que cualquier intento de acceder a y antes de la declaración lance correctamente un error.OilCheckEtScope, que se incluyó en todas las llamadas a OptionalChainNullLabelScope.delete x?.[y]?. → Intento de acceder a y (no inicializada) → Fallo en la verificación de "Hole"
→ y escapa como valor → return y; → Captura del valor "Hole" → DebugPrint lo revela
El atacante, al capturar este "Hole", puede inferir el estado interno del motor V8, facilitando ataques como: