من خلال تسريب قيمة Sentinel لتجاوز حماية Chrome V8 HardenProtect
المقدمة
قيمة السنتينل هي نوع خاص من القيم في الخوارزميات، وغالبًا ما تستخدم كشرط لإنهاء في الخوارزميات التكرارية أو العودية. تم استخدام هذا النوع من القيم على نطاق واسع في شفرة مصدر Chrome. مؤخرًا، اكتشف باحثو الأمن أنه من خلال تسريب كائن TheHole يمكن تحقيق تنفيذ أي كود داخل صندوق الرمل الخاص بـ Chrome. بعد ذلك، قام فريق Google بسرعة بإصلاح ثغرتين في البرية.
ومع ذلك، لا تزال هناك كائنات أصلية أخرى في V8 لا ينبغي تسريبها إلى JavaScript. ستناقش هذه المقالة كائنًا جديدًا: Uninitialized Oddball. ظهرت هذه الطريقة للتجاوز لأول مرة في مشكلة قدمها أحد أعضاء Project0، ولا تزال متاحة في أحدث إصدار من V8.
من الجدير بالذكر أن هذه الطريقة تتمتع بعمومية قوية:
في CVE-2021-30551، كانت أول دليل إثبات هو تسريب oddball غير مهيأ داخلياً.
تم تسريب POC الخاص ب CVE-2022-1486 أيضا بشكل مباشر UninitializedOddball.
تم استخدام هذه الطريقة أيضًا في مشكلة بدون CVE مخصص.
توضح هذه الحالات أهمية المشكلة بشكل كاف، ويستحق الأمر إعادة النظر في البرمجيات التي قد تتأثر.
قيمة Sentinel في V8
تُعرَّف معظم الكائنات الأصلية في V8 في ملف v8/src/roots/roots.h، وهي مرتبة بالتسلسل في الذاكرة. بمجرد أن يتم تسريب هذه الكائنات الأصلية التي لا ينبغي أن تتسرب إلى JavaScript، فقد يؤدي ذلك إلى تنفيذ أي كود داخل الصندوق الرملي.
يمكننا تسريب Uninitialized Oddball إلى JavaScript عن طريق تعديل دالة V8 الأصلية. الطريقة المحددة هي تعديل الإزاحة النسبية في دالة %TheHole() لجعلها ترجع Uninitialized Oddball.
تجاوز HardenType
يمكن تحقيق قراءة وكتابة عشوائية نسبياً باستخدام Uninitialized Oddball. المفتاح هو أن دالة القراءة المحسّنة تفحص فقط خاصية prop للكائن obj، ولكنها لا تفحص القيمة التي تمثل المفتاح obj.prop. وهذا يؤدي إلى حدوث ارتباك في الأنواع أثناء الحساب، مما يسمح بقراءة عشوائية.
! [الكشف الحصري عن تجاوز 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
في بنية x86، نظرًا لعدم وجود ضغط العناوين، فإن القراءة والكتابة العشوائية تكون بالنسبة للعملية بأكملها. على الرغم من فقدان الراحة التي يوفرها ضغط العناوين، إلا أنه نظرًا لوجود بعض الملفات البرمجية الكبيرة، لا يزال من الممكن بفرصة عالية قراءة وكتابة المحتوى المستهدف.
تتعلق PatchGap هذه المرة ليس فقط بالمشكلة 1352549، ولكن أيضًا بعدة ثغرات مشابهة مثل المشكلة 1314616 والمشكلة 1216437. بعد الكشف عن طريقة الالتفاف الجديدة، انخفضت صعوبة استغلال هذه الثغرات بشكل كبير. لم يعد يحتاج القراصنة تقريبًا إلى بحث إضافي لإكمال سلسلة الاستغلال.
ملخص
هناك العديد من قيم Sentinel الأخرى في V8، والتي قد تواجه مشكلات مماثلة. هذا يعطينا بعض الإلهام:
هل يمكن أيضًا تحقيق V8 RCE من خلال تسرب uninitialized_Oddball آخر؟
هل يجب اعتبار هذه الأنواع من المشاكل مسائل أمنية رسمية؟
هل يجب تضمين قيمة Sentinel كمتغير في اختبار Fuzzer؟
بغض النظر عن ذلك، ستقلل هذه الأنواع من المشكلات بشكل كبير من فترة استغلال المتسللين. وهذا يستحق اهتمامنا الكبير.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
ثغرة جديدة في محرك Chrome V8: تسرب Oddball غير المهيأ يتجاوز صندوق الرمل
من خلال تسريب قيمة Sentinel لتجاوز حماية Chrome V8 HardenProtect
المقدمة
قيمة السنتينل هي نوع خاص من القيم في الخوارزميات، وغالبًا ما تستخدم كشرط لإنهاء في الخوارزميات التكرارية أو العودية. تم استخدام هذا النوع من القيم على نطاق واسع في شفرة مصدر Chrome. مؤخرًا، اكتشف باحثو الأمن أنه من خلال تسريب كائن TheHole يمكن تحقيق تنفيذ أي كود داخل صندوق الرمل الخاص بـ Chrome. بعد ذلك، قام فريق Google بسرعة بإصلاح ثغرتين في البرية.
ومع ذلك، لا تزال هناك كائنات أصلية أخرى في V8 لا ينبغي تسريبها إلى JavaScript. ستناقش هذه المقالة كائنًا جديدًا: Uninitialized Oddball. ظهرت هذه الطريقة للتجاوز لأول مرة في مشكلة قدمها أحد أعضاء Project0، ولا تزال متاحة في أحدث إصدار من V8.
من الجدير بالذكر أن هذه الطريقة تتمتع بعمومية قوية:
في CVE-2021-30551، كانت أول دليل إثبات هو تسريب oddball غير مهيأ داخلياً.
تم تسريب POC الخاص ب CVE-2022-1486 أيضا بشكل مباشر UninitializedOddball.
تم استخدام هذه الطريقة أيضًا في مشكلة بدون CVE مخصص.
توضح هذه الحالات أهمية المشكلة بشكل كاف، ويستحق الأمر إعادة النظر في البرمجيات التي قد تتأثر.
قيمة Sentinel في V8
تُعرَّف معظم الكائنات الأصلية في V8 في ملف v8/src/roots/roots.h، وهي مرتبة بالتسلسل في الذاكرة. بمجرد أن يتم تسريب هذه الكائنات الأصلية التي لا ينبغي أن تتسرب إلى JavaScript، فقد يؤدي ذلك إلى تنفيذ أي كود داخل الصندوق الرملي.
يمكننا تسريب Uninitialized Oddball إلى JavaScript عن طريق تعديل دالة V8 الأصلية. الطريقة المحددة هي تعديل الإزاحة النسبية في دالة %TheHole() لجعلها ترجع Uninitialized Oddball.
تجاوز HardenType
يمكن تحقيق قراءة وكتابة عشوائية نسبياً باستخدام Uninitialized Oddball. المفتاح هو أن دالة القراءة المحسّنة تفحص فقط خاصية prop للكائن obj، ولكنها لا تفحص القيمة التي تمثل المفتاح obj.prop. وهذا يؤدي إلى حدوث ارتباك في الأنواع أثناء الحساب، مما يسمح بقراءة عشوائية.
! [الكشف الحصري عن تجاوز 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
في بنية x86، نظرًا لعدم وجود ضغط العناوين، فإن القراءة والكتابة العشوائية تكون بالنسبة للعملية بأكملها. على الرغم من فقدان الراحة التي يوفرها ضغط العناوين، إلا أنه نظرًا لوجود بعض الملفات البرمجية الكبيرة، لا يزال من الممكن بفرصة عالية قراءة وكتابة المحتوى المستهدف.
! الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel
تحذير PatchGap
تتعلق PatchGap هذه المرة ليس فقط بالمشكلة 1352549، ولكن أيضًا بعدة ثغرات مشابهة مثل المشكلة 1314616 والمشكلة 1216437. بعد الكشف عن طريقة الالتفاف الجديدة، انخفضت صعوبة استغلال هذه الثغرات بشكل كبير. لم يعد يحتاج القراصنة تقريبًا إلى بحث إضافي لإكمال سلسلة الاستغلال.
ملخص
هناك العديد من قيم Sentinel الأخرى في V8، والتي قد تواجه مشكلات مماثلة. هذا يعطينا بعض الإلهام:
هل يمكن أيضًا تحقيق V8 RCE من خلال تسرب uninitialized_Oddball آخر؟
هل يجب اعتبار هذه الأنواع من المشاكل مسائل أمنية رسمية؟
هل يجب تضمين قيمة Sentinel كمتغير في اختبار Fuzzer؟
بغض النظر عن ذلك، ستقلل هذه الأنواع من المشكلات بشكل كبير من فترة استغلال المتسللين. وهذا يستحق اهتمامنا الكبير.
! الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel