
تكييف CVE-2023-6241 لـ Google Pixel 7 من Google Pixel 8 مأخوذ من securitylab/SecurityExploits/Android/Mali/CVE_2023_6241
سيوضح هذا المستودع كيفية تكييف الثغرة الاستغلالية التي نشرها securitylab في مستودعه على GitHub لتعمل على Google Pixel 7 بدلاً من Google Pixel 8.
قبل البدء بتعديل الثغرة الاستغلالية، تم افتراض أن الثغرة الاستغلالية الأصلية تعمل أيضًا على أجهزة Google Pixel 7 (بعد تطبيق التصحيحات اللازمة) استنادًا إلى المقال المرتبط بـ CVE-2023-6241. كان هذا ضروريًا نظرًا لأن الجهازين يبدوان مختلفين (من الناحية العتادية) (مقارنة).
فيما يلي الأدوات المستخدمة لإجراء التحليل واستخراج المعلومات أو الملفات.
فيما يلي كيفية تحقيق الهدف بدءًا من البداية.
فعّل خيارات المطور (Developer options) في الجهاز.
قم بوميض الجهاز بالتصحيح الأمني الصحيح (في هذه الحالة أحد الإصدارين UP1A.231105.003، نوفمبر 2023 وUQ1A.240205.002، فبراير 2024 وكلاهما ضمنًا)، ويفضل استخدام Google Chrome وأداة Android flash tool بالنقر على "Flash" في الإدخال المطلوب في صفحة Factory Images for Nexus and Pixel Devices.
ملاحظة 1: يمكن أن يساعد استخدام أداة Android flash tool لوميض الأجهزة في حل المشكلات المتعلقة بإصدار bootloader. قد تظهر هذه المشكلات أثناء عملية وميض باستخدام البرنامج النصي المرفق مع الملف المضغوط الذي يتم تنزيله بالنقر على "Link" داخل صفحة Factory Images for Nexus and Pixel Devices.
ملاحظة 2: قبل وميض الجهاز، حدد "Force Flash all partition" في أداة Android flash tool للحصول على نفس نتيجة البرنامج النصي.
نزّل صورة Android المطلوبة بالنقر على "Link" واستخرج ملف boot.img من الملف المضغوط "image-panther.zip" داخل الملف المضغوط الرئيسي "panther-<release>-factory-<first 8 characters of SHA-256>.zip"
نفّذ الأمر ./imjtool.ELF64 boot.img extract. سيتم إنشاء المجلد الجديد "extracted" مع ملفين بداخله. 
نفّذ الأمر vmlinux-to-elf ./extracted/kernel.decompressed <filename>.elf (للإشارة إليه لاحقًا سيكون <filename>.elf هو Pixel7-kernel.elf). سيتم إنشاء ملف جديد بالاسم المحدد. 
افتح "Pixel7-kernel.elf" باستخدام Ghidra. ليس من الضروري إجراء التحليل التلقائي لأنه يستغرق وقتًا طويلًا ويمكن استخراج المعلومات على أي حال
افتح نافذة "Symbol table" وابحث عن الحقول المطلوبة (في هذه الحالة avc_den|sel_read_enforce$|init_cred|^commit_creds$). يجب أن تكون النتيجة شيئًا كهذا: 
انتقل إلى عنوان الموقع واحصل على "Imagebase Offset" لجميع الحقول التي تم البحث عنها.

اضبط جميع الإزاحات (offsets) في الثغرة الاستغلالية وفقًا لما تم العثور عليه.

احسب قيمة ADD_COMMIT_2311 وADD_INIT_2311 بإيجاد قيمة HEX للعمليتين التاليتين على التوالي add x8, x8, #0xXXX وadd x0, x0, #0xYYY باستخدام Online Assembler and Disassembler. للعثور على قيمتي XXX و YYY يكفي نسخ أقل 12 بت على التوالي من COMMIT_CREDS_2311 وADD_INIT_2311 (مثلًا إذا كانت ADD_COMMIT_2311 هي 0x17f0c8، فإن كود HEX للعملية add x8, x8, #0x0c8 هو 0x91032108).
لاحظ أن القيم معبر عنها بصيغة big-endian لذا يجب عكس البايتات الناتجة.
انسخ GLES_mali.so من /vendor/lib64/egl/libGLES_mali.so (أي adb pull /vendor/lib64/egl/libGLES_mali.so) وقم بتجميع كل شيء باستخدام /home/gobbo/Android/Sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android34-clang -g -DSHELL -DCL_TARGET_OPENCL_VERSION=300 -I. -L. mali_jit_csf.c mem_read_write.c mempool_utils.c -lGLES_mali -o mali_jit_csf.
ملاحظة: لمجرد ضمان اتساق التوقيت، كانت إصدارة مكتبة OpenCL المستخدمة في الثغرة الاستغلالية هي الأحدث المتاحة قبل التصحيح الأمني الذي أصلح الثغرة (أي الإصدار 2023.04.17)
ارفع الثغرة الاستغلالية وشغّلها
adb push ./mali_jit_csf /data/local/tmp
export LD_LIBRARY_PATH=/vendor/lib64/egl
./data/local/tmp/mali_jit_csf
يمكن استرجاع المزيد من المعلومات من مقال GitHub ومستودع GitHub المذكورين في البداية.