
استغلال لثغرة الهايبرفايزر في PS5 لأنظمة البرامج الثابتة 1.xx-2xx.
استغلال هايبرفايزر PS5 لإصدارات البرامج الثابتة <= 2.xx. يحتوي المستودع على ثغرتين وسلسلتي استغلال، وهما مستقلتان عن بعضهما ويمكن استخدام أي منهما. يتم توفير أحد الاستغلالين بشكل أساسي لأغراض الحفظ فقط (/_old_jump_table_exploit)، ولا يلزم استخدام سوى سلسلة الاستغلال الأساسية (استغلال أعلام QA).
تم تقديم هذا البحث في hardwear.io NL 2024، ويمكن العثور على شرائح العرض هنا. سيتم نشر المحاضرة قريبًا.
استغلال جدول القفز
يستخدم الاستغلال الأول ثغرة تتمثل في مشاركة جداول القفز الخاصة بكود الهايبرفايزر مع نواة الضيف، وهو موجود في /_old_jump_table_exploit/. من خلال اختطاف مدخل جدول القفز الخاص بنداء VMMCALL_HV_SET_CPUID_PS4، يمكن تحقيق تنفيذ تعليمات برمجية داخل الهايبرفايزر. نشغّل سلسلة ROP تعمل على تعطيل الترحيل المتداخل (NPT) وفخ تنفيذ وضع الضيف (GMET)، مما يتيح لنا تعطيل الذاكرة القابلة للتنفيذ فقط (XOM) والمعروفة باسم xotext في مدخلات جداول الصفحات (PTEs) الخاصة بالنواة لتفريغها، وكذلك تمكين الكتابة في PTEs لربط/تصحيح النواة.
تتطلب هذه الطريقة عددًا لا بأس به من الـ gadgets والإنزياحات، وهو السبب الرئيسي لعدم كون هذا الاستغلال هو الاستغلال الأساسي. كما أنه يكسر الهايبرفايزر حاليًا على النواة التي تعمل عليها سلسلة ROP فقط، إذ يظل الهايبرفايزر نشطًا على الأنوية الأخرى ويحتاج إلى تعطيل.
استغلال أعلام QA
يستفيد الاستغلال الأساسي والموصى به من حقيقة أن أعلام ضمان الجودة (QA) الخاصة بالنظام مشتركة بين الهايبرفايزر ونواة الضيف. عند تهيئة الهايبرفايزر، يتحقق كود التهيئة الخاص ببناء جداول الصفحات المتداخلة من أعلام QA بحثًا عن علم تصحيح أخطاء مستوى النظام (SL). إذا تم تعيين هذا العلم، فلن تحتوي مدخلات جداول الصفحات المتداخلة (PTEs) على البت xotext لصفحات .text الخاصة بالنواة، كما ستكون بت الكتابة مضبوطة أيضًا على صفحات .text الخاصة بالنواة.
لا يعيد المُحمِّل الآمن تهيئة هذه الأعلام عند الاستئناف من وضع السكون، بينما يعيد تهيئة الهايبرفايزر. من خلال تعيين علم SL، ووضع النظام في وضع السكون، ثم استئنافه، يمكننا تعديل جداول الصفحات الخاصة بنواة الضيف لجعل صفحات .text الخاصة بالنواة قابلة للقراءة/الكتابة، مما يتيح تفريغ النواة وتنفيذ الربط/التصحيحات.
يتم بناء حمولة الاستغلال هذه باستخدام PS5-Payload-Dev SDK. لاحظ أيضًا أن بناء hen/ خاص بعض الشيء، إذ يتم تجميعه إلى ملف ثنائي مسطّح (flat binary) يُنسخ إلى كهف كود داخل النواة. يعمل كامل الكود الموجود في hen/ في وضع المشرف/النواة (supervisor/kernel mode).
byepervisor.elf.byepervisor.elf مرة أخرى (إذا كنت تستخدم محمّل ELF الخاص بـ John Tornblom، فيجب أن يستمر في قبول الحمولات بعد الاستئناف؛ وإلا فستحتاج إلى إعادة تشغيل استغلال UMTX).byepervisor.elf يُرسل مرة واحدة فقطيمكن للمهتمين بالمساهمة في أبحاث/تطوير PS5 الانضمام إلى خادم ديسكورد الذي أنشأته هنا.