
Android 8-9 के लिए ज़ीरो-क्लिक ब्लूटूथ RCE शोषण (CVE-2020-0022) जिसमें हीप स्प्रेइंग, एड्रेस लीकिंग, और BlueFrag भेद्यता के माध्यम से दूरस्थ कोड निष्पादन के लिए JOP श्रृंखला निष्पादन शामिल है।
अद्भुत ब्लॉग पोस्ट और कोड के लिए Insinuator को बहुत-बहुत धन्यवाद!
insinuator पोस्ट में बताए गए सभी चरण पूरे कर लिए गए हैं, और कुछ और भी। ये सभी चरण README.md फ़ाइल में डालने के लिए बहुत अधिक हैं, इसलिए ऊपर उल्लिखित Insinuator की पोस्ट देखने में संकोच न करें।
एक्सप्लॉइट पूरी तरह से उस बिंदु तक पूरा हो चुका है जहाँ:
यह एक्सप्लॉइट Insinuator के कार्यान्वयन से निम्नलिखित तरीकों से भिन्न है:
libicuuc.so के बजाय libandroid_runtime.so में पतों को लीक करता है, क्योंकि इस फ़ोन/लक्ष्य पर यह बेहतर काम करता थाexecv को कॉल करती है और एक जो fork के बाद execv को कॉल करती हैlibandroid_runtime.so फ़ाइल को संसाधित करती है और फ़ंक्शंस और गैजेट्स के ऑफसेट निकालती है (एक्सप्लॉइट को अन्य लक्ष्यों पर पोर्ट करना आसान बनाने के लिए)यह एक वीडियो डेमो है जो PC को एक कस्टम पते पर इंगित करने के लिए एक्सप्लॉइट को संशोधित करता दिखाता है:

श्रृंखला का पहला पुनरावृत्ति वह है जिसे jop_experiment में देखा जा सकता है। यह श्रृंखला fork को कॉल किए बिना सीधे execv को कॉल करती है। यह commit ca28fdf में पाया जा सकता है। इस श्रृंखला का उपयोग करने पर यह होता है:

श्रृंखला का दूसरा पुनरावृत्ति वह है जो fork के बाद execv को कॉल करता है। इस श्रृंखला का पूरा विवरण यहाँ पाया जा सकता है। इस श्रृंखला का उपयोग करने पर यह होता है:

शुक्र है, Pixel 3 XL में ऐसी सुरक्षाएँ हैं जो ब्लूटूथ प्रक्रिया को fork और/या execv कॉल करने से रोकती हैं। ज्ञान-साझाकरण या दिखावे के संदर्भ में, मेरा काम यहाँ पूरा हो गया है। यदि मैं इससे अधिक उन्नत कुछ लिखता और साझा करता हूँ, तो यह ब्लैक-हैट हैकर्स के लिए बहुत उपयोगी हो सकता है।
मैं इस एक्सप्लॉइट को पूर्ण मानता हूँ। भविष्य में सुधार हो सकते हैं:
dlsym और फिर mprotect को कॉल करने वाली JOP श्रृंखला लिखनाये सभी चीज़ें इस प्रोजेक्ट को एक मजेदार ज्ञान-साझाकरण प्रोजेक्ट से एक ब्लैक-हैट एक्सप्लॉइट में बदल देती हैं जिसे हथियार बनाया जा सकता है, इसलिए मेरी यात्रा यहीं समाप्त होती है, अभी के लिए... यदि आपके कोई प्रश्न हैं, तो संपर्क करने में संकोच न करें।
एक्सप्लॉइट चलाने के लिए, बस चलाएँ:
make build run ARGS="00:00:00:00:00:00"
जहाँ 00:00:00:00:00:00 लक्ष्य/पीड़ित डिवाइस का MAC पता है। make clean के अलावा, शेष बिल्ड लक्ष्य केवल तभी सहायक होते हैं यदि आप एक्सप्लॉइट को संशोधित, सुधार या पुनः कार्यान्वित करने का प्रयास कर रहे हैं, इसलिए उनका गहराई से उल्लेख करने की आवश्यकता नहीं है।
gdbserver बाइनरी NDK फ़ोल्डर में पाई जा सकती है# लक्ष्य पर
/data/local/tmp/gdbserver 0.0.0.0:1234 --attach $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}')
# होस्ट पर
adb forward tcp:1234 tcp:1234
gdb-multiarch -q -x ./gdbinit
# होस्ट पर
adb push ./gdbinit /data/local/tmp/gdbinit
# लक्ष्य पर
su
/data/data/com.termux/files/usr/bin/gdb -q -x /data/local/tmp/gdbinit -p $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}')
# या
/data/data/com.termux/files/usr/bin/gdb -q -p $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}')
यदि ब्लूटूथ सेवा काम करना बंद कर दे तो आप हमलावर मशीन पर इसे पुनरारंभ कर सकते हैं:
sudo systemctl restart bluetooth.service
यह खंड उन कुछ घटनाओं की व्याख्या करता है जो इस एक्सप्लॉइट के विकास के दौरान देखी गईं:

get_message_loop के माध्यम से उपयोग किए जाने वाले base::MessageLoop ऑब्जेक्ट के vtable को संशोधित करने वाले अनपेक्षित ओवरफ़्लो के कारण लक्ष्य के क्रैश होने की संभावना कम हो सके:
partial_packets unordered_map में प्रत्येक आइटम के लिए एक लिंक्ड-लिस्ट आइटम शामिल है। यह map_experiment का उपयोग करके पता लगाया गया था

