
POC متاح قريباً
ثغرة حرجة في تنفيذ التعليمات البرمجية عن بُعد في متصفح Google Chrome (الإصدارات 123 وما قبلها) تؤثر على معالجة أنواع جمع القمامة (garbage-collection) في WebAssembly (WASM). يتسبب الخطأ في ارتباك الأنواع (type confusion) يمكن استغلاله للوصول إلى قراءة/كتابة عشوائية للذاكرة، وفي النهاية تنفيذ تعليمات برمجية.
ينبع هذا الخطأ من الارتباك بين معرّفات الأنواع الأساسية (canonical type IDs) المتساوية العودية في WASM وبين تمثيلات wasm::HeapType / wasm::ValueType المستخدمة في دوال التحويل من JavaScript إلى WASM.
والأهم من ذلك، أن معرّف النوع الأساسي غير مرتبط بـ kV8MaxWasmTypes بأي شكل — بل يمكن أن ينمو بقدر ما تدعمه ذاكرة المضيف.
تقوم فئة ValueType بترميز أنواع الكومة في حقل بعرض 20 بت، لكن معرّفات الأنواع الأساسية قد تتجاوز هذا الحد. عندما يتم اقتطاع معرّف نوع أساسي مثل:
tn = t0 + 0x100000 * n
إلى 20 بت، فإنه يتحول إلى اسم مستعار مع t0، مما يتيح هجوم ارتباك الأنواع.
بالإضافة إلى ذلك، فإن معرّفات الأنواع الأساسية المطابقة لـ kAny + 0x100000 * n (حيث kAny = 1000005) تتجاوز فحوصات الأنواع وتسمح بارتباك عشوائي لأنواع WASM.
يصف التقرير الاستغلال في ثلاث مراحل:
تؤدي صياغة وحدات WASM تحتوي على أكثر من 1,000,000 نوع إلى التفاف معرّفات الأنواع الأساسية، مما يتيح الارتباك بين أنواع البنى (struct types) وأنواع المراجع (reference types). وتتجاوز أنواع البنى المصممة لتكون اسمًا مستعارًا مع kAny فحوصات الأنواع من JS إلى WASM.
من خلال تعديل حقول التخزين الخلفي لـ ArrayBuffer، يحصل المهاجم على كتابة عشوائية في عنوان يكون فيه القيمة المكتوبة هي عنوان البيانات الوصفية. يستغل هذا هياكل SlotSpanMetadata لتسريب عناوين chrome.dll وتحقيق عمليات كتابة عشوائية للذاكرة.
يختطف الاستغلال CodePointerTable ويوجّه التنفيذ إلى سلسلة ROP تجعل مناطق الشيلكود قابلة للتنفيذ.
يوضح إثبات المفهوم ما يلي:
kAny لتجاوز فحوصات الأنواع من JS إلى WASM.هذا متغير من CVE-2024-2887، اكتشفه مانفريد بول (Manfred Paul) وعُرض في Pwn2Own Vancouver 2024. يستغل نقطة ضعف مماثلة في تعميم الأنواع (type-canonicalization) عبر ناقل مختلف.
Google Chrome 123 والإصدارات السابقة.
تم الإصلاح في Google Chrome 124.
Seunghyun Lee (Xion, @0x10n)، مشارك في TyphoonPWN 2024.