قيمة الحارس هي قيمة خاصة في الخوارزميات، وغالبًا ما تستخدم كشرط لإنهاء الحلقات أو الخوارزميات التكرارية. تم استخدام قيمة الحارس بشكل واسع في شفرة مصدر محرك Chrome V8. مؤخرًا، اكتشف الباحثون الأمنيون أنه يمكن تنفيذ أي كود داخل صندوق الرمل في Chrome من خلال تسريب كائنات قيمة الحارس المحددة.
توجد أنواع متعددة من الكائنات الأصلية في V8 يجب ألا تتسرب إلى بيئة JavaScript. بخلاف كائن TheHole الذي تم الكشف عنه سابقاً، يمكن أن تؤدي تسرب كائن Uninitialized Oddball أيضاً إلى مشكلات أمنية. ظهرت هذه الطريقة لأول مرة في Issue1352549، ولا تزال متاحة في أحدث إصدار من V8، ولم تقم Google بإصلاحها بعد.
تتمتع هذه الطريقة بعمومية قوية:
تم تقديم POC الذي يكشف عن internal uninitialized oddball لأول مرة في CVE-2021-30551(.
Issue1314616)CVE-2022-1486( أيضا كشف مباشرة عن كائن UninitializedOddball.
Issue1352549) تم تقديم طريقة الاستغلال بشكل كامل في CVE(.
تظهر هذه الحالات أن تسرب قيمة Sentinel قد يؤثر على عدة إصدارات من البرمجيات.
تُعرَّف معظم الكائنات الأصلية في V8 في ملف v8/src/roots/roots.h، وتكون مرتبة بشكل متجاور في الذاكرة. بمجرد تسرب هذه الكائنات إلى بيئة JavaScript، قد يحدث هروب من الصندوق الرملي.
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-263e5651876fc00c4e0af0cfcd350210.webp019283746574839201
للتحقق من هذه الطريقة، يمكن تسريب كائن Oddball غير مُهيأ عن طريق تعديل دالة V8 الأصلية %TheHole().
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel](https://img-cdn.gateio.im/webp-social/moments-26c26345e3ec4effeea2e3e6b7cd8772.webp019283746574839201
يمكن استخدام هذه الطريقة لتجاوز حماية HardenType في V8. يكمن المفتاح في أن دالة القراءة في JavaScript المحسّنة لا تتحقق بشكل كافٍ من خصائص الكائن، مما يؤدي إلى ارتباك في النوع وتنفيذ قراءة وكتابة عشوائية.
![كشف حصري عن كيفية تجاوز حماية Chrome v8 من خلال تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-4c091ca0e153e953eb168e99762ff7cc.webp(
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp019283746574839201
! [الكشف الحصري عن تجاوز 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
توصى خطة الإصلاح بإضافة فحص لمصفوفة map عند إرجاع عناصر المصفوفة من الدالة المحسّنة، لتجنب حساب الإزاحة مباشرة لإرجاع القيم.
من الجدير بالذكر أن البرامج مثل Skype قد لا تزال تعاني من هذه الثغرات. على منصة x86، وبسبب عدم وجود ضغط للعناوين، فإن نطاق القراءة والكتابة العشوائية أكبر. قد يستغل المهاجمون هذه الثغرة لتحقيق سلسلة استغلال كاملة.
بخلاف Uninitialized Oddball، هناك العديد من قيم Sentinel الأخرى في V8 التي قد تكون معرضة لمخاطر مماثلة. يُنصح بإجراء المزيد من البحث حول مشكلات الأمان الناتجة عن تسريب قيم Sentinel الأخرى، واعتبار إضافة السيناريوهات ذات الصلة في اختبار الفوضى.
سواء تم تصنيف هذه الأنواع من المشكلات كعيوب أمنية رسمياً أم لا، فإنها قد تقلل بشكل كبير من فترة استغلال المهاجمين لتحقيق الاستفادة الكاملة، مما يستحق اهتماماً كبيراً.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسرب قيمة Sentinel في محرك Chrome V8 يؤدي إلى مخاطر هروب من الصندوق الرملي
تطبيق قيمة الحارس في Chrome V8 وتأثيرها الأمني
قيمة الحارس هي قيمة خاصة في الخوارزميات، وغالبًا ما تستخدم كشرط لإنهاء الحلقات أو الخوارزميات التكرارية. تم استخدام قيمة الحارس بشكل واسع في شفرة مصدر محرك Chrome V8. مؤخرًا، اكتشف الباحثون الأمنيون أنه يمكن تنفيذ أي كود داخل صندوق الرمل في Chrome من خلال تسريب كائنات قيمة الحارس المحددة.
توجد أنواع متعددة من الكائنات الأصلية في V8 يجب ألا تتسرب إلى بيئة JavaScript. بخلاف كائن TheHole الذي تم الكشف عنه سابقاً، يمكن أن تؤدي تسرب كائن Uninitialized Oddball أيضاً إلى مشكلات أمنية. ظهرت هذه الطريقة لأول مرة في Issue1352549، ولا تزال متاحة في أحدث إصدار من V8، ولم تقم Google بإصلاحها بعد.
تتمتع هذه الطريقة بعمومية قوية:
تم تقديم POC الذي يكشف عن internal uninitialized oddball لأول مرة في CVE-2021-30551(.
Issue1314616)CVE-2022-1486( أيضا كشف مباشرة عن كائن UninitializedOddball.
Issue1352549) تم تقديم طريقة الاستغلال بشكل كامل في CVE(.
تظهر هذه الحالات أن تسرب قيمة Sentinel قد يؤثر على عدة إصدارات من البرمجيات.
تُعرَّف معظم الكائنات الأصلية في V8 في ملف v8/src/roots/roots.h، وتكون مرتبة بشكل متجاور في الذاكرة. بمجرد تسرب هذه الكائنات إلى بيئة JavaScript، قد يحدث هروب من الصندوق الرملي.
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-263e5651876fc00c4e0af0cfcd350210.webp019283746574839201
للتحقق من هذه الطريقة، يمكن تسريب كائن Oddball غير مُهيأ عن طريق تعديل دالة V8 الأصلية %TheHole().
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel](https://img-cdn.gateio.im/webp-social/moments-26c26345e3ec4effeea2e3e6b7cd8772.webp019283746574839201
يمكن استخدام هذه الطريقة لتجاوز حماية HardenType في V8. يكمن المفتاح في أن دالة القراءة في JavaScript المحسّنة لا تتحقق بشكل كافٍ من خصائص الكائن، مما يؤدي إلى ارتباك في النوع وتنفيذ قراءة وكتابة عشوائية.
![كشف حصري عن كيفية تجاوز حماية Chrome v8 من خلال تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-4c091ca0e153e953eb168e99762ff7cc.webp(
! [الكشف الحصري عن تجاوز Chrome v8 HardenProtect عن طريق تسريب قيمة Sentinel])https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp019283746574839201
! [الكشف الحصري عن تجاوز 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
توصى خطة الإصلاح بإضافة فحص لمصفوفة map عند إرجاع عناصر المصفوفة من الدالة المحسّنة، لتجنب حساب الإزاحة مباشرة لإرجاع القيم.
من الجدير بالذكر أن البرامج مثل Skype قد لا تزال تعاني من هذه الثغرات. على منصة x86، وبسبب عدم وجود ضغط للعناوين، فإن نطاق القراءة والكتابة العشوائية أكبر. قد يستغل المهاجمون هذه الثغرة لتحقيق سلسلة استغلال كاملة.
بخلاف Uninitialized Oddball، هناك العديد من قيم Sentinel الأخرى في V8 التي قد تكون معرضة لمخاطر مماثلة. يُنصح بإجراء المزيد من البحث حول مشكلات الأمان الناتجة عن تسريب قيم Sentinel الأخرى، واعتبار إضافة السيناريوهات ذات الصلة في اختبار الفوضى.
سواء تم تصنيف هذه الأنواع من المشكلات كعيوب أمنية رسمياً أم لا، فإنها قد تقلل بشكل كبير من فترة استغلال المهاجمين لتحقيق الاستفادة الكاملة، مما يستحق اهتماماً كبيراً.