SELinux-Permissive-Only-version-of-Cheese-aka-CVE-2025-21479
هذا إصدار SELinux permissive فقط، في الوقت الحالي، من استغلال Cheese المعروف أيضًا باسم CVE-2025-21479 والذي أثر على adreno kgsl على العديد من الأجهزة بما في ذلك أجهزة Samsung Snapdragon
تمت إعادة استخدام بعض التعليمات البرمجية من المستودعات التالية، وأود أن أشكر zhuowei على إطلاق إثبات المفهوم في البداية وsarabpal-dev على الحفاظ على مستودع نشط ومُصان جيدًا
https://github.com/zhuowei/cheese
https://github.com/sarabpal-dev/cheese-cake
قررت أن أخوض هذا المشروع كنوع من التحدي، ولأنني لم أخض في شيء بهذا التعقيد من قبل، فقد كانت تجربة تعليمية جيدة على الرغم من أنه لم يكتمل بعد. ما أردت فعله في الأصل هو معرفة ما إذا كان يمكن تنفيذ السلسلة بأكملها من نطاق غير موثوق تمامًا مباشرة في بيئة termux. لقد تمكنت حتى الآن من تحقيق SELinux permissive دون استخدام adb، وقلّصت الكود إلى حوالي ربع حجمه الأصلي، وهو مستقر وعادةً ما يستغرق أقل من دقيقة من البداية إلى النهاية، وهو يعمل على هاتفي Samsung SM-S901W S22 Snapdragon مع bootloader مقفل. لم أتعمق بعد في root primitive ولست متأكدًا مما إذا كان يمكن القيام بذلك دون adb، لكنني ما زلت سأحاول. آمل أن يلهم هذا الأشخاص لتجربة أشياء يقول الناس عادةً إنها لا يمكن القيام بها، ربما سيأتي شخص بفكرة ستنجح. لا تتردد في فتح issue فأنا منفتح على أي مساهمة مفيدة.
درس تعليمي
هذا الاستغلال سهل حقًا ولا تحتاج إلى أي تعديل تقريبًا على الكود لتشغيله على جهازك. كل ما عليك فعله هو:
- git clone المستودع ثم cd إليه
- التقط boot.img من البرنامج الثابت المطابق لجهازك
- استخدم unpack_bootimg (موجود بالفعل في termux) لاستخراج النواة (kernel) منه
- قم بتجميع ثنائي extract-kallsyms.c وتشغيله على النواة الخاصة بك
- خذ ملف kallsyms.txt الخاص بك وضعه مباشرة في المسار الذي ستنفذ منه الاستغلال
- قم بالتجميع باستخدام
cc -o gpu_sam gpu_sam.c -ldl
- سيقوم ديناميكيًا بالمرور عبر kallsyms.txt أثناء تشغيله للعثور على جميع الإزاحات (offsets) الضرورية
- الأشياء الوحيدة التي ستحتاج إلى تغييرها اعتمادًا على جهازك هي القيم التالية لفحص قاعدة النواة
const uint64_t candidates[] = { 0xC0000000, 0xE0000000 }; و for (uint64_t addr = 0xa8000000; addr < 0xa8500000; addr += 0x8000) {
- إذا سارت الأمور على ما يرام، يجب أن تحصل على selinux permissive مستقر من قشرة termux عادية
ملاحظات
ستكون هناك دائمًا مخاطرة بحدوث خطأ smmu أو kernel panic، لكن هذا يعمل بشكل جيد جدًا على هاتفي مع النواة 5.10.168 ونادرًا ما أواجه تعطلًا. قد تحتاج إلى تشغيله عدة مرات أو حتى إعادة التشغيل لإعادة تعيين حالة GPU. لقد صنعت هذا ليكون سهل الاستخدام قدر الإمكان. الفيديو أدناه هو مجرد عرض سريع، لقد كنت بالفعل في وضع permissive. استمتع
https://github.com/user-attachments/assets/63d0dfa7-1390-41ce-96da-9c34d8a220ec