من JavaScript إلى تنفيذ الشيفرة في المُصيّر: ثلاث ثغرات في V8 وعلمَا v8CTF
أساليب الهجوم وتقنياته2026-11-03, 07:34
باستخدام أداة
dfs-large1، كشف الباحثون عن ثلاث ثغرات في V8: ثغرتا فساد ذاكرة وثغرة هروب من الصندوق الرملي. جُمِعت في سلسلتي استغلال منفصلتين، وكلتاهما حققت تنفيذ شيفرة في عملية المُصيّر في Chrome.1. CVE-2026-78938 — ثغرة ارتباك أنواع في
Promise.prototype.finally. كانت الدوال المساعدة الداخلية غير صارمة وقابلة للإنشاء. أتاح استخدام .caller الحصول على مرجع لإحدى هذه الدوال، بينما استدعاؤها باستخدام new قد يُرجع رقمًا. افترض TurboFan أن نتيجة new دائمًا كائن وأزال التحقق. سمح ذلك بتفسير بتات أعداد صحيحة يتحكم بها المهاجم كمؤشر في شيفرة محسّنة.
2. CVE-2026-79236 — خطأ إزالة تحميل في TurboFan. احتفظ المحسّن بمؤشر إلى مصفوفة الخصائص القديمة بعد انتقال الكائن واستبدال تخزين خصائصه. استخدمت كتابة لاحقة المؤشر القديم، ما أدى إلى كتابة ذاكرة متحكَّم بها.
3. هروب من الصندوق الرملي، issue 546253900 — ثغرة تتعلق بذاكرة WebAssembly المشتركة. لم يتطابق مخزن الدعم المسجل مع الذي مُرّر فعليًا إلى العامل: مخزن الدعم A، بينما سُجّل مخزن الدعم B عالميًا. عند إنهاء العامل، فشلت روتين التنظيف في إزالة المرجع إلى Isolate الأصلي الخاص به من مخزن الدعم A، ما ترك مؤشرًا معلقًا. أدى استدعاء لاحق إلى memory.grow(0) إلى use-after-free أصلي خارج صندوق V8 الرملي.مسار الهجوم
• استُخدمت ثغرتا فساد الذاكرة في البداية للحصول على وصول متحكَّم به إلى الذاكرة داخل قفص ضغط المؤشرات، ثم استُخدم ذلك لبناء أوليات
addrof وfakeobj القياسية.
• للوصول إلى ذاكرة معيَّنة في مكان آخر داخل الصندوق الرملي، حُدّدت كائنات DataView حقيقية وأُعيد توجيه مؤشرات بياناتها المحصورة في الصندوق الرملي.
• بعد الهروب من الصندوق الرملي، أُعيد الاستيلاء على Isolate المحرَّر برسالة WebSocket تحمل حمولة بالحجم المناسب. جرى التحقق من عنوان الرسالة قبل إلغاء الإشارة إلى المؤشر المعلق.
• ثم تبع الاستغلال سلسلة من ردود النداء المتوافقة مع سلامة تدفق التحكم (CFI)، ووجّه المكدس إلى سلسلة ROP، وحقق تنفيذ شيفرة في عملية المُصيّر.