تجاوز Chrome v8 HardenProtect: استخدام قيمة Sentinel لتنفيذ أي كود

قيمة الحارس و تجاوز HardenProtect في Chrome v8

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

ستتناول هذه المقالة طرق استخدام كائن Oddball غير المهيأ لتجاوز آلية HardenProtect في Chrome v8. تم اقتراح هذه الطريقة لأول مرة من قبل أعضاء Project0 في Issue1352549، ولا تزال قابلة للاستخدام في أحدث إصدار من V8، ولم تقم Google بعد بإصلاح هذه المشكلة.

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

  1. تم إصدار CVE-2021-30551( حيث تم تقديم poc لكشف internal uninitialized oddball لأول مرة.

  2. Issue1314616)CVE-2022-1486( أيضًا يكشف مباشرة عن كائن UninitializedOddball.

  3. Issue1352549) لا يوجد CVE( يعرض سلسلة الاستغلال الكاملة لهذه الطريقة.

تشير هذه الحالات إلى أن طريقة التحايل قد تؤثر على عدة إصدارات من البرمجيات. وحتى الآن، لم تقم برامج مثل Skype بإصلاح هذه الثغرة.

قيمة السنتينل في V8

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

للتحقق من هذه الطريقة، يمكننا تعديل دالة V8 الخاصة بـ %TheHole)( لجعلها تعيد كائن Uninitialized Oddball.

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

تجاوز HardenType

تظهر الشيفرة أدناه كيفية استخدام كائن Uninitialized Oddball المسرب لتحقيق القراءة العشوائية:

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

دع uninitialized_oddball = ٪ GetUninitialized)[idx] ؛ دع ab = ArrayBuffer(8) جديد. دع f64 = Float64Array(ab) جديد. دع u32 = Uint32Array(ab) جديد.

لـ (دع i = 0; i < 0x10000; i++ ) { read({prop: 1.1}, 0);
}

%تحسين_الوظيفة_في_الاتصال_التالي(قراءة);

دع القيمة = قراءة({الخاصية: uninitialized_oddball}, 0x1234); f64( = فال ؛ console.log)u32[0].toString(16[0], u32(.toString)16[1](;

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

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

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

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

تحذير PatchGap

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

تتعلق هذه الفجوة (PatchGap) ليس فقط بالمسألة 1352549، بل تجعل من الصعب بشكل كبير استغلال مسائل مثل 1314616 و 1216437. يُنصح الشركات بفحص الثغرات ذات الصلة بشكل شامل.

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

ملخص

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

  1. هل يمكن تحقيق تسرب قيمة Sentinel الأخرى RCE في V8
  2. إضافة قيمة Sentinel كمتغير إلى Fuzzer، لاستخراج أدوات استغلال جديدة
  3. مواجهة المخاطر الأمنية التي قد تنشأ عن هذه الأنواع من المشاكل

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

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

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

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

! [الكشف الحصري عن تجاوز 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(

SENC4.64%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 4
  • مشاركة
تعليق
0/400
LayerZeroHerovip
· منذ 8 س
ثغرة تبدو رائعة قليلاً
شاهد النسخة الأصليةرد0
Web3ProductManagervip
· منذ 8 س
حالة حافة شديدة الخطورة هنا
شاهد النسخة الأصليةرد0
GhostWalletSleuthvip
· منذ 8 س
الثغرات حقًا لا يمكن تجنبها
شاهد النسخة الأصليةرد0
UnluckyLemurvip
· منذ 8 س
هناك الكثير من المياه في هذه الثغرة
شاهد النسخة الأصليةرد0
  • تثبيت