استكشاف المخاطر الأمنية الناجمة عن تسرب قيمة Sentinel في محرك Chrome V8
المقدمة
قيمة الحارس هي نوع خاص من القيم في الخوارزميات، تُستخدم عادةً كشرط إنهاء في الخوارزميات الحلقية أو التكرارية. تم استخدام هذه القيمة الخاصة على نطاق واسع في شفرة مصدر Chrome. مؤخرًا، تمكن باحثون من استغلال تسرب كائن TheHole لتنفيذ تعليمات برمجية عشوائية داخل الصندوق الرملي مما أدى إلى CVE-2021-38003 وCVE-2022-1364. سرعان ما قامت فريق جوجل بإصلاح الثغرتين.
ومع ذلك، بالإضافة إلى كائن TheHole، هناك أيضًا كائنات أصلية أخرى في V8 لا ينبغي تسريبها إلى JavaScript. ستتناول هذه المقالة كائن Uninitialized Oddball، وتقديم كيفية استغلاله لتجاوز آلية HardenProtect في V8. ومن الجدير بالذكر أن طريقة التجاوز هذه لا تزال قابلة للتطبيق على أحدث إصدار من V8، ولم يتم إصلاحها بعد.
قيمة سنتينل في V8
تُعرف معظم الكائنات الأصلية في V8 في ملف v8/src/roots/roots.h، حيث يتم ترتيب هذه الكائنات بشكل متتابع في الذاكرة. بمجرد أن يتم تسريب هذه الكائنات الأصلية التي لا ينبغي أن تتسرب إلى JavaScript، يمكن أن يؤدي ذلك إلى تنفيذ أي كود داخل الصندوق الرملي.
للتحقق من ذلك، يمكننا تعديل وظيفة V8 الأصلية، وإفشاء Uninitialized Oddball إلى JavaScript. الطريقة المحددة هي تعديل الإزاحة النسبية في دالة %TheHole() لجعلها ترجع Uninitialized Oddball.
تجاوز حماية HardenType
يمكن استخدام كائن Uninitialized Oddball لتحقيق قراءة وكتابة عشوائية نسبياً. في الكود المحسن لـ JavaScript، لا تتحقق دالة read من القيمة باستخدام obj.prop كمفتاح، بل تحسب الإزاحة مباشرة وفقًا لدلالة JavaScript، للحصول على قيمة المصفوفة. وهذا يؤدي إلى حدوث تداخل في الأنواع أثناء الحساب، مما يتيح القراءة العشوائية.
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel](https://img-cdn.gateio.im/webp-social/moments-26c26345e3ec4effeea2e3e6b7cd8772.webp019283746574839201
بالنسبة لأي عملية كتابة، يمكنك الرجوع إلى طريقة البناء في Issue1352549 للتحليل. الحل المقترح هو عند إرجاع عناصر المصفوفة من الدالة المحسنة، إضافة فحص لخريطة المصفوفة، لتجنب حساب الإزاحة مباشرة لإرجاع قيمة المصفوفة.
![كشف حصري حول تجاوز حماية Chrome v8 من خلال تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-4c091ca0e153e953eb168e99762ff7cc.webp(
![كشف حصري عن كيفية تجاوز حماية 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
بعد تحليل المشكلة 1352549، اكتشفنا أن بعض البرمجيات قد تحتوي على مشكلة في PatchGap. من الجدير بالذكر أنه حتى الآن، لم تقم Skype بإصلاح هذه الثغرة. في بيئة x86، سيكون تنفيذ القراءة والكتابة عشوائية مختلفًا، لأنه لا يوجد ضغط عناوين، مما يسمح بالعمل مباشرة بالنسبة للعملية بأكملها.
! [الكشف الحصري عن تجاوز 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(
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-506159c94c9e0988552cbcbd13d971e1.webp(
ملخص
تناقش هذه المقالة بإيجاز الطرق التي يمكن من خلالها تحقيق القراءة العشوائية من خلال تسريب uninitialized_Oddball في قيمة Sentinel. هناك العديد من قيم Sentinel الأخرى في V8، والتي قد تؤدي أيضًا إلى مشكلات أمان مماثلة. وهذا يقدم لنا الدروس التالية:
هل يمكن أيضًا تحقيق تنفيذ التعليمات البرمجية عن بُعد لـ V8 بسهولة من خلال تسريبات uninitialized_Oddball أخرى.
لا يزال هناك جدل حول ما إذا كانت هذه الأنواع من القضايا يجب اعتبارها قضايا أمنية رسمية.
النظر في إضافة قيم Sentinel مثل %TheHole/uninitialized_Oddball كمتغيرات في fuzzer لاكتشاف استخدامات أخرى للبدائل.
سواء اعتُبرت هذه الأنواع من المشاكل رسمياً مشاكل أمنية أم لا، فإنها ستُقلل بشكل كبير من الفترة التي يحتاجها المتسللون لتحقيق الاستغلال الكامل.
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-e9e2000fd501b69ee3ee643a459a26dd.webp(
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
استكشاف تسرب قيمة Sentinel لمحرك Chrome V8 وتحليل المخاطر الأمنية
استكشاف المخاطر الأمنية الناجمة عن تسرب قيمة Sentinel في محرك Chrome V8
المقدمة
قيمة الحارس هي نوع خاص من القيم في الخوارزميات، تُستخدم عادةً كشرط إنهاء في الخوارزميات الحلقية أو التكرارية. تم استخدام هذه القيمة الخاصة على نطاق واسع في شفرة مصدر Chrome. مؤخرًا، تمكن باحثون من استغلال تسرب كائن TheHole لتنفيذ تعليمات برمجية عشوائية داخل الصندوق الرملي مما أدى إلى CVE-2021-38003 وCVE-2022-1364. سرعان ما قامت فريق جوجل بإصلاح الثغرتين.
ومع ذلك، بالإضافة إلى كائن TheHole، هناك أيضًا كائنات أصلية أخرى في V8 لا ينبغي تسريبها إلى JavaScript. ستتناول هذه المقالة كائن Uninitialized Oddball، وتقديم كيفية استغلاله لتجاوز آلية HardenProtect في V8. ومن الجدير بالذكر أن طريقة التجاوز هذه لا تزال قابلة للتطبيق على أحدث إصدار من V8، ولم يتم إصلاحها بعد.
قيمة سنتينل في V8
تُعرف معظم الكائنات الأصلية في V8 في ملف v8/src/roots/roots.h، حيث يتم ترتيب هذه الكائنات بشكل متتابع في الذاكرة. بمجرد أن يتم تسريب هذه الكائنات الأصلية التي لا ينبغي أن تتسرب إلى JavaScript، يمكن أن يؤدي ذلك إلى تنفيذ أي كود داخل الصندوق الرملي.
للتحقق من ذلك، يمكننا تعديل وظيفة V8 الأصلية، وإفشاء Uninitialized Oddball إلى JavaScript. الطريقة المحددة هي تعديل الإزاحة النسبية في دالة %TheHole() لجعلها ترجع Uninitialized Oddball.
تجاوز حماية HardenType
يمكن استخدام كائن Uninitialized Oddball لتحقيق قراءة وكتابة عشوائية نسبياً. في الكود المحسن لـ JavaScript، لا تتحقق دالة read من القيمة باستخدام obj.prop كمفتاح، بل تحسب الإزاحة مباشرة وفقًا لدلالة JavaScript، للحصول على قيمة المصفوفة. وهذا يؤدي إلى حدوث تداخل في الأنواع أثناء الحساب، مما يتيح القراءة العشوائية.
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel](https://img-cdn.gateio.im/webp-social/moments-26c26345e3ec4effeea2e3e6b7cd8772.webp019283746574839201
بالنسبة لأي عملية كتابة، يمكنك الرجوع إلى طريقة البناء في Issue1352549 للتحليل. الحل المقترح هو عند إرجاع عناصر المصفوفة من الدالة المحسنة، إضافة فحص لخريطة المصفوفة، لتجنب حساب الإزاحة مباشرة لإرجاع قيمة المصفوفة.
![كشف حصري حول تجاوز حماية Chrome v8 من خلال تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-4c091ca0e153e953eb168e99762ff7cc.webp(
![كشف حصري عن كيفية تجاوز حماية 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
بعد تحليل المشكلة 1352549، اكتشفنا أن بعض البرمجيات قد تحتوي على مشكلة في PatchGap. من الجدير بالذكر أنه حتى الآن، لم تقم Skype بإصلاح هذه الثغرة. في بيئة x86، سيكون تنفيذ القراءة والكتابة عشوائية مختلفًا، لأنه لا يوجد ضغط عناوين، مما يسمح بالعمل مباشرة بالنسبة للعملية بأكملها.
! [الكشف الحصري عن تجاوز 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(
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-506159c94c9e0988552cbcbd13d971e1.webp(
ملخص
تناقش هذه المقالة بإيجاز الطرق التي يمكن من خلالها تحقيق القراءة العشوائية من خلال تسريب uninitialized_Oddball في قيمة Sentinel. هناك العديد من قيم Sentinel الأخرى في V8، والتي قد تؤدي أيضًا إلى مشكلات أمان مماثلة. وهذا يقدم لنا الدروس التالية:
هل يمكن أيضًا تحقيق تنفيذ التعليمات البرمجية عن بُعد لـ V8 بسهولة من خلال تسريبات uninitialized_Oddball أخرى.
لا يزال هناك جدل حول ما إذا كانت هذه الأنواع من القضايا يجب اعتبارها قضايا أمنية رسمية.
النظر في إضافة قيم Sentinel مثل %TheHole/uninitialized_Oddball كمتغيرات في fuzzer لاكتشاف استخدامات أخرى للبدائل.
سواء اعتُبرت هذه الأنواع من المشاكل رسمياً مشاكل أمنية أم لا، فإنها ستُقلل بشكل كبير من الفترة التي يحتاجها المتسللون لتحقيق الاستغلال الكامل.
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-e9e2000fd501b69ee3ee643a459a26dd.webp(