تحليل استغلال ثغرة قيمة Sentinel في محرك Chrome V8: تحقيق RCE دون الحاجة إلى أبحاث إضافية

robot
إنشاء الملخص قيد التقدم

تحليل استغلال ثغرة قيمة السنتينل في محرك Chrome V8

قيمة Sentinel هي قيمة خاصة في الخوارزميات، تُستخدم عادة كشرط إنهاء في الخوارزميات التكرارية أو العودية. يوجد العديد من قيم Sentinel في شفرة مصدر Chrome. أظهرت الأبحاث السابقة أنه من خلال تسريب كائن TheHole يمكن تحقيق تنفيذ أي كود داخل صندوق رمل Chrome. لاحقًا، قامت فريق Google بإصلاح الثغرات ذات الصلة.

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

من الجدير بالذكر أن هذه الطريقة تتمتع بقدر معين من العمومية:

  1. CVE-2021-30551 إثبات المفهوم الأصلي هو تسرب oddball غير مهيأ داخليًا.

  2. تم تسريب UninitializedOddball مباشرة في PoC لـ CVE-2022-1486.

  3. العدد1352549 ( CVE) غير المخصص يقدم تفاصيل حول كيفية استخدامه.

تظهر هذه الحالات أن احتمال استخدام تسرب Uninitialized Oddball في الهجمات يستحق الانتباه.

قيمة الحارس في V8

تُعرَّف معظم الكائنات الأصلية لـ V8 في ملف v8/src/roots/roots.h، حيث يتم ترتيبها بشكل متجاور في الذاكرة. بمجرد تسريب هذه الكائنات الأصلية التي لا ينبغي أن تتسرب إلى JavaScript، قد يتم تنفيذ أي كود داخل الصندوق الرمل.

للتحقق من ذلك، يمكن تعديل قيمة إرجاع الدالة الأصلية V8 %TheHole() لتكون Uninitialized Oddball.

! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel](https://img-cdn.gateio.im/webp-social/moments-263e5651876fc00c4e0af0cfcd350210.webp019283746574839201

تجاوز حماية HardenType

تم تقديم الكود الكامل للتجاوز في Issue1352549. المنطق الأساسي المبسط كما يلي:

جافا سكريبت الدالة read)obj ، idx( { عودة obj) }

دع غير مهيأ = ٪ TheHole[idx]( ؛ دع arr = [1.1]; دع الدقة = read)uninitialized ، 0x12345( ؛ ٪ DebugPrint)res( ؛

لا يزال هذا الرمز يمكنه تحقيق قراءة نسبية تقريبًا في الإصدار الأخير V8 11.0.0.

![كشف حصري حول تجاوز حماية Chrome v8 من خلال تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-26c26345e3ec4effeea2e3e6b7cd8772.webp(

من خلال تحليل كود التجميع لوظيفة القراءة المحسّنة، يمكن ملاحظة أنها تتحقق فقط مما إذا كانت خاصية prop في الكائن obj صحيحة، لكنها لم تتحقق من قيمة obj.prop كمفتاح. وهذا يؤدي إلى حدوث ارتباك في الأنواع أثناء الحساب، مما يتيح القراءة العشوائية.

![كشف حصري عن كيفية تجاوز حماية Chrome v8 من خلال تسرب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-4c091ca0e153e953eb168e99762ff7cc.webp(

عند تمرير uninitialized_oddball، يتم حساب obj كنقطة انطلاق من تعليمات محددة، وتنتهي القراءة العشوائية في تعليمات vmovsd xmm0,[r9+r11*8+0x7]، حيث يتم حفظ البيانات في سجل xmm0.

![كشف حصري حول تجاوز حماية Chrome v8 من خلال تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp(

الطريقة المقترحة للإصلاح هي إضافة فحص لمصفوفة الخريطة عند إرجاع عناصر المصفوفة من الدالة المحسّنة، لتجنب الحساب المباشر للإزاحة لإرجاع قيم المصفوفة.

! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-ed89289bebf59d4b27f5bffb5511a8c5.webp019283746574839201

تحذير PatchGap

أثناء فحص البرامج التي قد تحتوي على PatchGap، تم اكتشاف أن Skype لم يصلح هذه الثغرة حتى الآن. في بنية x86، نظرًا لعدم وجود ضغط عناوين، فإن القراءة والكتابة العشوائية تكون مباشرة بالنسبة للعملية بأكملها.

على الرغم من أن Skype قد فتحت ASLR، إلا أن حجم ملفاتها كبير جداً، حيث يتم وضعها مباشرة في ذاكرة 4GB، يمكن للمهاجمين فقط القراءة والكتابة على عنوان ثابت، مما يزيد من احتمال القراءة والكتابة لمحتوى ملفات Skype. من خلال دمج تحليل PE وغيرها من الطرق التقليدية، يمكن إكمال سلسلة استغلال الثغرات بالكامل.

! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel](https://img-cdn.gateio.im/webp-social/moments-0e52075003a8ee2ca492a5fc9f35c36b.webp019283746574839201

لا تتعلق هذه المرة PatchGap فقط بـ Issue1352549، بل أدت أيضًا إلى انخفاض كبير في صعوبة الاستغلال للمشاكل المشابهة Issue1314616 و Issue1216437. لم يعد بحاجة القراصنة إلى بحث إضافي لتفعيل استغلال كامل لأي ثغرة تسرب uninitialized_oddball في الماضي.

! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-230537e420d579aabd89bdd168b20878.webp(

ملخص

تقدم هذه المقالة طريقة لتنفيذ قراءة عشوائية من خلال تسريب uninitialized_Oddball في قيمة Sentinel. هناك أيضًا قيم Sentinel أخرى في V8، والتي قد تؤدي إلى مشاكل مماثلة. وهذا يعطينا الدروس التالية:

  1. هل يمكن أيضًا تحقيق RCE لـ V8 بسهولة من خلال تسرب uninitialized_Oddball أخرى.

  2. لا يزال هناك جدل حول ما إذا كان ينبغي اعتبار هذه النوعية من المشاكل كمسائل أمنية بشكل رسمي.

  3. في الفازر يمكن اعتبار إضافة قيم %TheHole/uninitialized_Oddball وغيرها من القيم الحارس كمتغيرات لاستكشاف استغلالات أخرى.

بغض النظر عن ذلك، ستقصر هذه الأنواع من المشاكل بشكل كبير من الفترة الزمنية التي يحتاجها المتسللون لتحقيق الاستغلال الكامل.

! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-506159c94c9e0988552cbcbd13d971e1.webp(

![كشف حصري حول كيفية تجاوز حماية Chrome v8 من خلال تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-e9e2000fd501b69ee3ee643a459a26dd.webp(

SENC0.79%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 5
  • إعادة النشر
  • مشاركة
تعليق
0/400
CoffeeNFTradervip
· 07-22 08:13
ثغرة أمان أخرى تجعل الجميع في حالة من الذعر
شاهد النسخة الأصليةرد0
Hash_Banditvip
· 07-21 21:23
تعدين محرك جافا سكريبت أصبح حقيقياً... تم تعظيم صعوبة الاستغلال
شاهد النسخة الأصليةرد0
ConsensusDissentervip
· 07-20 00:25
ظهر ثقب أسود آخر في الشيفرة، إنه مخيف للغاية
شاهد النسخة الأصليةرد0
Blockblindvip
· 07-20 00:19
هل يوجد ثغرة كبيرة مثل هذه في v8؟ أضحكني
شاهد النسخة الأصليةرد0
BlockchainTalkervip
· 07-20 00:12
في الواقع، أنا متفاجئ أن V8 لا يزال يعاني من هذا... ملاحظة: أين عزل وقت التشغيل عائلتي؟
شاهد النسخة الأصليةرد0
  • تثبيت