مناقشة متعمقة حول مخاطر الأمان لقيمة Sentinel في محرك Chrome V8
قيمة السنتينل هي نوع خاص من القيم في الخوارزميات، وعادة ما تستخدم كشرط إنهاء في الخوارزميات التكرارية أو العودية. تم استخدام قيمة السنتينل على نطاق واسع في شفرة مصدر كروم. مؤخرًا، اكتشف الباحثون الأمنيون أنه يمكن تنفيذ شيفرة عشوائية داخل صندوق الرمل الخاص بكروم من خلال تسرب كائن TheHole. قام فريق جوجل بإصلاح هذه الثغرة بسرعة.
ومع ذلك، لا تزال هناك كائنات أصلية أخرى في V8 لا ينبغي الكشف عنها في JavaScript. ستركز هذه المقالة على كائن Uninitialized Oddball، حيث يمكن أن يؤدي تسربه إلى مخاطر أمان أوسع نطاقًا. حاليًا، لا يزال بإمكان استخدام هذه الطريقة في أحدث إصدار من V8، ولم تقم جوجل بعد بإصلاح هذه المشكلة.
من الجدير بالذكر أن هذه الطريقة تتمتع بمرونة قوية.
تم تقديم إثبات مفهوم تسرب internal uninitialized oddball لأول مرة في CVE-2021-30551.
تم تسريب UninitializedOddball مباشرة في poc لـ CVE-2022-1486.
Issue1352549( لم يتم تخصيص CVE) عرض كامل لشفرة الاستغلال.
توضح هذه الحالات بشكل كامل ضرورة إجراء فحص شامل للبرامج التي قد تتأثر. حتى الآن، لم تقم Skype بإصلاح هذه الثغرة.
قيمة Sentinel في V8
تُعرَّف معظم الكائنات الأصلية في V8 في ملف v8/src/roots/roots.h، حيث تُرتب هذه الكائنات بشكل متجاور في الذاكرة. بمجرد تسريب كائن أصلي لا ينبغي أن يتم تسريبه إلى JavaScript، قد يصبح من الممكن تنفيذ أي كود داخل الصندوق الرملي.
للتحقق من فعالية هذه الطريقة في أحدث إصدار من V8، يمكننا تعديل دالة V8 الأصلية، لإفشاء Uninitialized Oddball إلى JavaScript. الطريقة المحددة هي تعديل الإزاحة النسبية لـ %TheHole() داخل العزل، بحيث تعيد Uninitialized Oddball.
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel](https://img-cdn.gateio.im/webp-social/moments-263e5651876fc00c4e0af0cfcd350210.webp019283746574839201
تجاوز حماية HardenType
من خلال تبسيط الكود المقدم في Issue1352549، يمكننا تنفيذ قراءة نسبية تقريبًا في إصدار V8 11.0.0:
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-26c26345e3ec4effeea2e3e6b7cd8772.webp019283746574839201
عندما يعود %TheHole() كـ UninitializedOddball، ستقوم دالة القراءة المحسّنة في JavaScript بحساب الإزاحة مباشرة وفقًا لدلالة JavaScript، دون التحقق من قيمة obj.prop، مما يؤدي إلى اختلاط الأنواع وتنفيذ قراءة عشوائية.
مثل كائن TheHole، فإن uninitialized_oddball في ذاكرة V8 مصنف في المقدمة وأصلي أكثر، مما يجعله أسهل للتزوير. بعد تجاوز تدابير TheHole، أصبحت هذه الطريقة هي الخيار المفضل لتجاوز الحماية.
الطريقة المقترحة للإصلاح هي إضافة فحص لخريطة المصفوفة عند إرجاع عناصر المصفوفة من الوظيفة المحسنة، لتجنب حساب الإزاحة مباشرة لإرجاع قيم المصفوفة.
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel](https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp019283746574839201
تحذير PatchGap
بعد تحليل المشكلة 1352549، وجدنا أن سكايب لم يصلح هذه الثغرة حتى الآن. في بيئة x86، القراءة والكتابة العشوائية تختلف قليلاً: نظرًا لعدم وجود ضغط عناوين، فإن القراءة والكتابة العشوائية تكون مباشرة بالنسبة للعملية بأكملها.
على الرغم من أن Skype قد فعل ASLR، إلا أن الملفات كبيرة جدًا، مما يعني أنه يمكن وضعها مباشرة في ذاكرة 4GB. يحتاج المهاجم فقط إلى القراءة والكتابة على عناوين معينة، مما يزيد بشكل كبير من احتمال قراءة وكتابة محتوى ملفات Skype. من خلال دمج تحليل PE وطرق تقليدية أخرى، فإن إكمال سلسلة استغلال الثغرات بأكملها ليس بالأمر الصعب.
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-ed89289bebf59d4b27f5bffb5511a8c5.webp019283746574839201
تتعلق PatchGap هذه المرة ليس فقط بـ Issue1352549، بل إن الكشف عن طريقة التلاعب الجديدة قلل بشكل كبير من صعوبة استغلال الثغرات المماثلة مثل CVE-2022-1486 و CVE-2021-30551. لم يعد المهاجمون بحاجة إلى مزيد من البحث لاستغلال أي ثغرة تسرب uninitialized_oddball بالكامل.
ملخص
تتناول هذه المقالة بإيجاز كيفية تحقيق القراءة العشوائية من خلال تسريب Uninitialized_Oddball في قيمة Sentinel. توجد أيضًا قيم Sentinel أخرى في V8 وغالبًا ما تُواجه الأعطال أثناء الاختبار. نظرًا لأن Uninitialized_Oddball و TheHole يمكن أن يتجاوزا حلقات التنفيذ في V8، لدينا سبب للاشتباه في أن قيم Sentinel الأخرى قد تؤدي أيضًا إلى مشاكل مماثلة.
هذا يعطينا الدروس التالية:
هل يمكن أيضًا تحقيق RCE لـ V8 بسهولة من خلال تسريبات uninitialized_Oddball الأخرى.
قامت جوجل بإصلاح ثغرة TheHole بسرعة، لكن تركت لفترة طويلة استغلال جمع القمامة لتحقيق تجاوز ASLR، مما يدل على أن ما إذا كانت مثل هذه القضايا تعتبر مشكلة أمان رسمية لا يزال هناك حدود غامضة.
إذا اعتُبر ذلك مشكلة أمان رسمية، هل من الضروري إضافة قيم Sentinel مثل %TheHole/uninitialized_Oddball كمتغيرات في fuzzer لاكتشاف استغلالات أخرى؟
بغض النظر، ستقلل هذه الأنواع من المشاكل بشكل كبير من الفترة الزمنية التي يحتاجها المهاجم لتحقيق الاستغلال الكامل.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
تسجيلات الإعجاب 10
أعجبني
10
3
مشاركة
تعليق
0/400
GateUser-afe07a92
· منذ 20 س
ماذا تفعل جوجل؟ هذا أيضًا تسرب.
شاهد النسخة الأصليةرد0
SelfRugger
· منذ 20 س
يبدو أن V8 ستحدث شيئًا كبيرًا هذا العام
شاهد النسخة الأصليةرد0
SchrodingerGas
· منذ 20 س
نام طوال الليل وما زال يعمل v8، من سيدفع لهذا الغاز؟
تحليل عميق لمخاطر أمان قيمة Sentinel لمحرك Chrome V8
مناقشة متعمقة حول مخاطر الأمان لقيمة Sentinel في محرك Chrome V8
قيمة السنتينل هي نوع خاص من القيم في الخوارزميات، وعادة ما تستخدم كشرط إنهاء في الخوارزميات التكرارية أو العودية. تم استخدام قيمة السنتينل على نطاق واسع في شفرة مصدر كروم. مؤخرًا، اكتشف الباحثون الأمنيون أنه يمكن تنفيذ شيفرة عشوائية داخل صندوق الرمل الخاص بكروم من خلال تسرب كائن TheHole. قام فريق جوجل بإصلاح هذه الثغرة بسرعة.
ومع ذلك، لا تزال هناك كائنات أصلية أخرى في V8 لا ينبغي الكشف عنها في JavaScript. ستركز هذه المقالة على كائن Uninitialized Oddball، حيث يمكن أن يؤدي تسربه إلى مخاطر أمان أوسع نطاقًا. حاليًا، لا يزال بإمكان استخدام هذه الطريقة في أحدث إصدار من V8، ولم تقم جوجل بعد بإصلاح هذه المشكلة.
من الجدير بالذكر أن هذه الطريقة تتمتع بمرونة قوية.
تم تقديم إثبات مفهوم تسرب internal uninitialized oddball لأول مرة في CVE-2021-30551.
تم تسريب UninitializedOddball مباشرة في poc لـ CVE-2022-1486.
Issue1352549( لم يتم تخصيص CVE) عرض كامل لشفرة الاستغلال.
توضح هذه الحالات بشكل كامل ضرورة إجراء فحص شامل للبرامج التي قد تتأثر. حتى الآن، لم تقم Skype بإصلاح هذه الثغرة.
قيمة Sentinel في V8
تُعرَّف معظم الكائنات الأصلية في V8 في ملف v8/src/roots/roots.h، حيث تُرتب هذه الكائنات بشكل متجاور في الذاكرة. بمجرد تسريب كائن أصلي لا ينبغي أن يتم تسريبه إلى JavaScript، قد يصبح من الممكن تنفيذ أي كود داخل الصندوق الرملي.
للتحقق من فعالية هذه الطريقة في أحدث إصدار من V8، يمكننا تعديل دالة V8 الأصلية، لإفشاء Uninitialized Oddball إلى JavaScript. الطريقة المحددة هي تعديل الإزاحة النسبية لـ %TheHole() داخل العزل، بحيث تعيد Uninitialized Oddball.
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel](https://img-cdn.gateio.im/webp-social/moments-263e5651876fc00c4e0af0cfcd350210.webp019283746574839201
تجاوز حماية HardenType
من خلال تبسيط الكود المقدم في Issue1352549، يمكننا تنفيذ قراءة نسبية تقريبًا في إصدار V8 11.0.0:
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-26c26345e3ec4effeea2e3e6b7cd8772.webp019283746574839201
عندما يعود %TheHole() كـ UninitializedOddball، ستقوم دالة القراءة المحسّنة في JavaScript بحساب الإزاحة مباشرة وفقًا لدلالة JavaScript، دون التحقق من قيمة obj.prop، مما يؤدي إلى اختلاط الأنواع وتنفيذ قراءة عشوائية.
! الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel
مثل كائن TheHole، فإن uninitialized_oddball في ذاكرة V8 مصنف في المقدمة وأصلي أكثر، مما يجعله أسهل للتزوير. بعد تجاوز تدابير TheHole، أصبحت هذه الطريقة هي الخيار المفضل لتجاوز الحماية.
الطريقة المقترحة للإصلاح هي إضافة فحص لخريطة المصفوفة عند إرجاع عناصر المصفوفة من الوظيفة المحسنة، لتجنب حساب الإزاحة مباشرة لإرجاع قيم المصفوفة.
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel](https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp019283746574839201
تحذير PatchGap
بعد تحليل المشكلة 1352549، وجدنا أن سكايب لم يصلح هذه الثغرة حتى الآن. في بيئة x86، القراءة والكتابة العشوائية تختلف قليلاً: نظرًا لعدم وجود ضغط عناوين، فإن القراءة والكتابة العشوائية تكون مباشرة بالنسبة للعملية بأكملها.
على الرغم من أن Skype قد فعل ASLR، إلا أن الملفات كبيرة جدًا، مما يعني أنه يمكن وضعها مباشرة في ذاكرة 4GB. يحتاج المهاجم فقط إلى القراءة والكتابة على عناوين معينة، مما يزيد بشكل كبير من احتمال قراءة وكتابة محتوى ملفات Skype. من خلال دمج تحليل PE وطرق تقليدية أخرى، فإن إكمال سلسلة استغلال الثغرات بأكملها ليس بالأمر الصعب.
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-ed89289bebf59d4b27f5bffb5511a8c5.webp019283746574839201
تتعلق PatchGap هذه المرة ليس فقط بـ Issue1352549، بل إن الكشف عن طريقة التلاعب الجديدة قلل بشكل كبير من صعوبة استغلال الثغرات المماثلة مثل CVE-2022-1486 و CVE-2021-30551. لم يعد المهاجمون بحاجة إلى مزيد من البحث لاستغلال أي ثغرة تسرب uninitialized_oddball بالكامل.
ملخص
تتناول هذه المقالة بإيجاز كيفية تحقيق القراءة العشوائية من خلال تسريب Uninitialized_Oddball في قيمة Sentinel. توجد أيضًا قيم Sentinel أخرى في V8 وغالبًا ما تُواجه الأعطال أثناء الاختبار. نظرًا لأن Uninitialized_Oddball و TheHole يمكن أن يتجاوزا حلقات التنفيذ في V8، لدينا سبب للاشتباه في أن قيم Sentinel الأخرى قد تؤدي أيضًا إلى مشاكل مماثلة.
هذا يعطينا الدروس التالية:
هل يمكن أيضًا تحقيق RCE لـ V8 بسهولة من خلال تسريبات uninitialized_Oddball الأخرى.
قامت جوجل بإصلاح ثغرة TheHole بسرعة، لكن تركت لفترة طويلة استغلال جمع القمامة لتحقيق تجاوز ASLR، مما يدل على أن ما إذا كانت مثل هذه القضايا تعتبر مشكلة أمان رسمية لا يزال هناك حدود غامضة.
إذا اعتُبر ذلك مشكلة أمان رسمية، هل من الضروري إضافة قيم Sentinel مثل %TheHole/uninitialized_Oddball كمتغيرات في fuzzer لاكتشاف استغلالات أخرى؟
بغض النظر، ستقلل هذه الأنواع من المشاكل بشكل كبير من الفترة الزمنية التي يحتاجها المهاجم لتحقيق الاستغلال الكامل.
! الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel
! الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel