
تحليل السبب الجذري واستغلال عملي لـ CVE-2026-78938، وهو خلط أنواع في V8 TurboFan يؤدي إلى قراءة/كتابة عشوائية داخل الكومة المضغوطة. يتضمن إثبات المفهوم للانهيار (PoC) وبدائيات معالجة عناوين وقت التشغيل.
تحليل السبب الجذري واستغلال لـ CVE-2026-78938، وهو التباس نوعي في إزالة التحميل في TurboFan الخاص بـ V8، وقد تم إصلاحه في Chrome 152.0.7977.64 (V8 15.2.124.18). تم الإبلاغ عن استغلال الثغرة في البرية.
يحوّل الاستغلال الثغرة إلى Float64Array خارج الحدود، ومن هناك إلى
addrof / fakeobj وقراءة/كتابة عشوائية عبر الكومة المضغوطة في V8.
كل ما بعد الكتابة الأولية يتم تحديده في وقت التشغيل — لا توجد
إزاحات كومة مكتوبة بشكل ثابت في مرحلة القراءة/الكتابة.
50597b0bb48a — "[compiler] Invalidate tracked fields on
CheckMaps with instance migration"تم اختباره على macOS arm64 ضد d8 مبني محليًا لكلا الإصدارين.
| الملف | ما هو |
|---|
pocs/crash.js | مشغّل أدنى. SIGBUS على البناء الثغري، خروج نظيف على البناء المُصلَح. |
pocs/rw_final.js | الاستغلال الكامل، المرحلة 1: المشغّل + مصفوفة خارج الحدود. مجمّد — انظر "إعادة الإنتاج" أدناه. |
pocs/logic_final.js | الاستغلال الكامل، المرحلة 2: addrof/fakeobj/قراءة وكتابة عشوائية، يتم تحميله في وقت التشغيل بواسطة المرحلة 1. |
WRITEUP.md | تحليل السبب الجذري الكامل وملاحظات الاستغلال. |
قم ببناء نسختي d8 (انظر WRITEUP.md للالتزامات الدقيقة ووسائط GN)،
ثم من جذر المستودع:
# PoC الانهيار: SIGBUS على الثغري، نظيف على المُصلَح
out/vuln/d8 --allow-natives-syntax --homomorphic-ic --max-valid-polymorphic-map-count=4 pocs/crash.js
out/patched/d8 --allow-natives-syntax --homomorphic-ic --max-valid-polymorphic-map-count=4 pocs/crash.js
# قراءة/كتابة كاملة: يعمل على الثغري، يخرج نظيفًا على المُصلَح
out/vuln/d8 --allow-natives-syntax --homomorphic-ic --max-valid-polymorphic-map-count=4 pocs/rw_final.js
المخرجات المتوقعة على البناء الثغري:
[+] OOB Float64Array len=0x7f000004
[+] after write: victim2.z = 2.5
[+] fakeobj(hn|1) typeof=number
[+] ALL PRIMITIVES VERIFIED
أمران مهمان:
--homomorphic-ic --max-valid-polymorphic-map-count=4 تشكّل التغذية الراجعة للخريطة متعددة الأشكال بحيث
يتم اتخاذ مسار الترحيل في الكود المُحسَّن. بدونها، لا يفعل المشغّل
شيئًا بهدوء.pocs/rw_final.js مجمّد بالبايت. الكتابة الفاسدة الوحيدة تهبط عند
إزاحة نسبية للكومة تعتمد على مكان تخصيص المصفوفة الضحية،
والذي يعتمد بدوره على البايتات الدقيقة للسيناريو ومساره. تعديل الملف
(أو إعادة تسميته) يُبطل الإزاحة المدمجة؛ يوثّق WRITEUP.md كيفية
إعادة المعايرة. يتم تحميل pocs/logic_final.js بعد إطلاق المشغّل، لذا
يمكن تعديله بحرية.pocs/rw_final.js، للأسباب
المذكورة أعلاه.هذا المستودع لأغراض البحث التعليمي والدفاعي. الثغرة مُصلَحة في Chrome الحالي؛ التفاصيل عامة في شجرة مصدر V8.