تعرف على المزيد عن كتاب بيني تشارني «الأمن السيبراني رأسًا على عقب»

اعرف أكثر
نستخدمُ الذكاء الاصطناعي في ترجمات الموقع، ومع أننا نسعى جاهدين لبلوغ الدقة قد لا تكون هذه الترجمات دقيقةً بنسبة 100% دائمًا. تفهّمك لهذا الأمر هو موضع تقدير لدينا.

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم

مدعوم من MetaDefender Endpoint
بقلم OPSWAT
معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم
المشاركون في برنامج زمالة OPSWAT

حول CVE-2024-0517

CVE-2024-0517 هي ثغرة أمنية تتعلق بالكتابة خارج نطاق الذاكرة في محرك جافا سكريبت V8 في متصفح جوجل كروم قبل الإصدار 120.0.6099.224، والتي تسمح للمهاجمين عن بُعد باستغلال تلف الذاكرة المؤقتة (heap) عبر صفحة HTML مُعدة خصيصًا لهذا الغرض. وقد أبلغ عن هذه الثغرة لأول مرة «توان (سوتو) فام» من شركة «Qrious Secure».

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم
CVE-2024-0517 على قاعدة البيانات الوطنية للثغرات الأمنية (NVD)

تنشأ هذه الثغرة من الخلط في النوع، والذي يحدث عندما يقوم أحد التطبيقات بتخصيص أو تهيئة مورد مثل مؤشر أو كائن أو متغير باستخدام نوع واحد، ولكن في وقت لاحق يصل إلى هذا المورد باستخدام نوع غير متوافق مع النوع الأصلي (CWE-843). في حالة مكافحة التطرف العنيف هذه، يحدث الخلط بين النوعين أثناء عملية تخصيص الذاكرة التي تسمى التخصيص المطوي، والتي يتم استخدامها لتحسين الذاكرة بواسطة Maglev، وهو محول برمجي محسن لمحرك V8 JavaScript.

من خلال استغلال الخلط في النوع وكتابة رموز shellcodes عشوائية بواسطة WebAssembly، يمكن للمهاجم تنفيذ أوامر على جهاز الضحية.

مراحل الهجوم

يمكن للمهاجمين استضافة موقع إلكتروني يحتوي على صفحة HTML مصممة وخداع المستخدمين للوصول إليه من خلال رسائل البريد الإلكتروني التصيدية أو شبكات التواصل الاجتماعي. عندما يزور المستخدمون الموقع باستخدام إصدار ضعيف من Google Chrome، فإن التعليمات البرمجية الخبيثة المضمنة ستنفذ أوامر عشوائية.

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم
الحملة الهجومية التدريجية

محرك جافا سكريبت V8

تمت كتابة محرك V8 JavaScript بلغة C++ بواسطة Google وتم إصداره في 2 سبتمبر 2008.يقوم V8 بتجميع وتنفيذ التعليمات البرمجية المصدرية لـ JavaScript، ويتعامل مع تخصيص الذاكرة للكائنات، ويجمع الأشياء التي لم تعد بحاجة إليها. يعد V8 مكونًا أساسيًا في Google Chrome ويمكن تضمينه في أي تطبيق C++، مثل Node.js، لتنفيذ شيفرة JavaScript أو شيفرة WebAssembly.

ماجليف والتخصيص المطوي

يعمل Maglev، وهو محول برمجي محسن في V8، على تحسين تنفيذ التعليمات البرمجية وتخصيص الذاكرة. يعمل Maglev فقط عندما يتم تنفيذ الشيفرة البرمجية بشكل متكرر ويتم تمييزها على أنها "ساخنة"، مما يشير إلى الحاجة إلى تنفيذ أسرع من خلال التحويل البرمجي بدلاً من التفسير الأبطأ سطراً بسطر.

عادةً ما تحدث عمليات التخصيص في مناطق ذاكرة غير متجاورة، مما يؤدي إلى استخدام متناثر وغير فعال للذاكرة. ولمعالجة ذلك، يستخدم V8 تقنية تسمى التخصيص المطوي، والتي تقوم بتخصيص متغيرات متعددة بشكل مستمر ومتزامن. يقوم Maglev أيضًا بتحسين عمليات التخصيص باستخدام التخصيص المطوي في تقدمه.

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم
مالف وتخصيص المجلدات

جمع القمامة من الأجيال

لتنظيف مناطق الذاكرة غير المستخدمة، يستخدم V8 تقنية تجميع القمامة للأجيال (GC)، حيث يقسم الذاكرة إلى مساحتين: الجيل الصغير والجيل القديم. بالإضافة إلى ذلك، هناك نوعان من جامعي القمامة: جامع القمامة الصغير، وهو المسؤول عن تنظيف المساحة الصغيرة، وجامع القمامة الرئيسي، الذي يتولى تنظيف المساحة القديمة. الجيل الصغير هو منطقة الذاكرة حيث يتم تخصيص الكائنات المنشأة حديثًا في البداية والجيل القديم هو منطقة الذاكرة حيث يتم تخزين الكائنات التي تعيش لفترة طويلة. يتم في النهاية ترقية الكائنات التي نجت من عدة دورات GC ثانوية في الجيل الصغير إلى الجيل القديم.

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم
مساحات الذاكرة: جيل الشباب والجيل القديم

تحليل نقاط الضعف

نظرة عامة

تنشأ الثغرة عندما يتم إنشاء كائن من صنف موروث من صنف أساسي بدون مُنشئ محدد بشكل صريح (مُنشئ افتراضي أساسي)، ويتم إنشاء كائن آخر لاحقًا. بسبب التخصيص المطوي، قد يتبع تخصيص الكائن الأول تخصيص الكائن الثاني. إذا وقع حدث مثل جمع القمامة بين هاتين التخصيصين، فقد تنشأ ثغرة في الخلط بين النوعين.

تحليل الأسباب الجذرية

أجرى الزملاء الخريجون من OPSWAT تحليلاً مفصلاً لسير عمل V8 أثناء عملية التخصيص، وحددوا أن الوظائف التالية يتم استدعاؤها أثناء هذه العملية

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم
سير عمل V8 أثناء عملية التخصيص

ضمن هذه العملية، تم تحديد مشكلة في دالة TryBuildFindNonDefaultConstructorOrConstruct: تقوم الدالة BuildAllocateFastObject بتوسيع Current_raw_allocation_ (مؤشر إلى منطقة الذاكرة المخصصة لمتغيرات متعددة في وقت واحد) لإنشاء مثيل الفئة التابعة، ولكنها تفشل في مسحها عن طريق تعيينها إلى لا شيء.

نتيجةً لذلك، يتم دائمًا تخصيص الكائن التالي الذي تم إنشاؤه مباشرةً بعد الذاكرة التي يشير إليها current_raw_allocation_، بغض النظر عن أي أحداث قبل التخصيص الثاني.

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم
"التخصيص_السحب_الحالي" و"الكائن التالي" في منطقة الذاكرة

إذا تم استدعاء GC، يمكن تعيين منطقة الذاكرة المجاورة للذاكرة المجاورة لـ current_raw_allocation_ إلى كائنات أخرى. يمكن أن يؤدي هذا إلى موقف حيث، بعد تشغيل GC وإنشاء كائن آخر، يشير مؤشرين إلى نفس منطقة الذاكرة ولكن لهما أنواع بيانات مختلفة، مما يؤدي إلى ثغرة في الخلط بين النوعين.

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم
نوع الارتباك في النوع الضعف

الاستغلال

ولاستغلال هذه الثغرة، أنشأ زملاء OPSWAT الخريجون من OPSWAT مثيلات WebAssembly تحتوي على رمز shellcode وحاولوا إحداث ارتباك في النوع من خلال GC للتحكم في الذاكرة وتنفيذ رمز shellcode:

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم
خطوات تشغيل تنفيذ التعليمات البرمجية عن بُعد في محرك V8

ارتباك في نوع المشغل

أثناء التهيئة، نحدد أولًا مصفوفة (_arrayObject) تحتوي على كائنات فارغة. بعد ذلك، نُنشئ نسخة من الصنف التابع بالإضافة إلى مُجمّع نفايات مُشغّل. أخيرًا، نعرّف مصفوفة أخرى تحتوي على رقم ذي فاصلة عائمة، باسم _arrayDouble.

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم

يجب أن تتكرر هذه الإنشاءات بحيث يتم تنفيذ الشيفرة البرمجية عدة مرات، مما يجعل V8 يضع علامة "ساخن" عليها ويحفز محول ماغليف. نحقق ذلك عن طريق استدعاء مُنشئ الصنف التابع داخل حلقة على النحو التالي:

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم

سيحدث ارتباك في النوع بعد تهيئة هذه الكائنات بشكل متكرر في حلقة.

إنشاء أوليات القراءة والكتابة

بعد النجاح في تشغيل الارتباك في النوع، يتطلب تنفيذ رمز الصدفة قراءة الذاكرة والكتابة فوق الذاكرة في عنوان متحكم به. للقيام بذلك، أنشأنا أوليات القراءة والكتابة. ستستفيد أوّليات الاستغلال من البيانات الوصفية في الكائنات لمنحنا مناطق ذاكرة للقراءة/الكتابة العشوائية واستخدامها لتشغيل شيفرة عشوائية.

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم
القراءة والكتابة البدائية

ستمكننا أساسيات القراءة والكتابة في هذه الخطوة من التحكم في مؤشر جدول القفز لمثيل WebAssembly في الخطوة التالية.

إنشاء مثيلات WebAssembly

بعد ذلك، أنشأنا نسختين من WebAssembly: واحدة لتخزين رمز الصدفة والأخرى لتشغيله. لتجنب كتابة الرمز الصوري مباشرةً في ذاكرة مثيل WebAssembly عبر أساسيات القراءة والكتابة، قمنا بتعريف بعض القيم الثابتة ذات الفاصلة العائمة داخل مثيل WebAssembly.

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم

مؤشر جدول قفزة التحكم في التحكم في مثيل WebAssembly

باستخدام أساسيات القراءة والكتابة؛ نقوم بتعديل مؤشر جدول القفز في مثيل WebAssembly الثاني لتخطي بعض البايتات من الشيفرة المترجمة للثوابت في مثيل WebAssembly الأول بحيث يتم تفسير ثوابت الفاصلة العائمة على أنها رمز الصدفة المقصود:

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم

قم بتشغيل مثيل WebAssembly لتنفيذ الرمز البرمجي للرمز الصدفي

أخيرًا، بعد تشغيل الخلط بين الأنواع واستخدام أساسيات القراءة/الكتابة للتحكم في مؤشرات جدول القفز لمثيلات WebAssembly، قمنا باستدعاء الدالة المصدرة لمثيل WebAssembly الثاني، مما يؤدي إلى تنفيذ رمز الصدفة في مثيل WebAssembly الأول.

صُمم رمز الصدفة الذي نستخدمه لإنهاء جميع العمليات على جهاز لينكس، كما في الأمر التالي:

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم

سيكون كود التجميع لتنفيذ هذا الأمر، المحول من أرقام الفاصلة العائمة، على النحو التالي:

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم

محاكاة الثغرة الأمنية

لمحاكاة هذا الاستغلال في سيناريو واقعي، أنشأ الزملاء الخريجون في OPSWAT صفحة HTML خبيثة تم إعدادها بشكل خبيث.

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم

يتم إرسال رسالة بريد إلكتروني للتصيد الاحتيالي مضمنة برابط إلى النطاق الذي يستضيف صفحة HTML المصممة إلى الضحية.

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم

في حال وصول الضحية إلى الرابط باستخدام الإصدار الضعيف من Google Chrome، يتم تنفيذ الرمز البرمجي shellcode، مما يؤدي إلى إنهاء جميع العمليات. ونتيجة لذلك، يتم تسجيل خروج المستخدم، كما هو موضح أدناه:

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم

الاصلاح

استُخدم حل MetaDefender Endpoint™ للتخفيف من حدة مشكلة مكافحة التطرف العنيف هذه بشكل استباقي من خلال الاستفادة من إمكانية "التطبيقات الضعيفة". ويحدد الحل بشكل فعال جميع نقاط الضعف المرتبطة بتطبيقات Google Chrome داخل بيئة نقطة النهاية ويعرضها. لتحييد التهديد، يمكن للمستخدمين إلغاء تثبيت Chrome على الفور أو تطبيق أحدث تصحيح أمني. ومن خلال تنفيذ أي من الإجراءين المضادين، يتم احتواء مكافحة التطرف العنيف بالكامل، مما يقلل بشكل كبير من خطر حدوث هجوم إلكتروني ناجح على نقطة النهاية.

معالجة الثغرة الأمنية CVE-2024-0517 في متصفح جوجل كروم

أمان Endpoint من المستوى التالي

اكتشف لماذا تثق المنظمات والمؤسسات والكيانات في جميع أنحاء العالم في برنامج MetaDefender Endpoint لحماية نقاط النهاية المهمة. تحدّث إلى أحد الخبراء اليوم لمعرفة المزيد من المعلومات وشاهد بنفسك من خلال عرض تجريبي مجاني.


مراجع

https://nvd.nist.gov/vuln/detail/CVE-2024-0517
https://cwe.mitre.org/data/definitions/843.html

https://blog.exodusintel.com/2024/01/19/google-chrome-v8-cve-2024-0517-out-of-bounds-write-code-execution/

https://jhalon.github.io/chrome-browser-exploitation-1/

https://whenderson.dev/blog/webgl-garbage-collection/

https://v8.dev/

https://github.com/Uniguri/CVE-nday/tree/master/Chrome/V8/CVE-2024-0517

ابق على اطلاع دائم OPSWAT!

اشترك اليوم لتتلقى آخر أخبار الشركة، والقصص، ومعلومات عن الفعاليات، والمزيد.