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

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

चेन का दूसरा संस्करण वह है जो fork फिर execv को कॉल करता है। इस चेन के पूरे विवरण यहाँ पाए जा सकते हैं। इस चेन का उपयोग करने पर यह होता है:

शुक्र है, Pixel 3 XL में सुरक्षा उपाय हैं जो ब्लूटूथ प्रक्रिया को fork और/या execv कॉल करने से रोकते हैं। ज्ञान-साझाकरण या दिखावे के संदर्भ में, मेरा काम यहाँ पूरा हो गया है। यदि मैं इससे अधिक उन्नत कुछ लिखता और साझा करता हूँ, तो यह ब्लैक-हैट्स के लिए बहुत मददगार हो सकता है।
मैं इस एक्सप्लॉइट को पूर्ण मानता हूँ। भविष्य में सुधार हो सकते हैं:
dlsym फिर mprotect को कॉल करके कस्टम शेलकोड चलाएये सभी चीजें इस प्रोजेक्ट को एक मजेदार ज्ञान-साझाकरण प्रोजेक्ट से एक ब्लैक-हैट एक्सप्लॉइट में बदल देती हैं जिसे हथियार बनाया जा सकता है, इसलिए मेरी यात्रा यहीं समाप्त होती है, अभी के लिए.... यदि आपके कोई प्रश्न हैं, तो बेझिझक संपर्क करें।
एक्सप्लॉइट चलाने के लिए, बस चलाएँ:
make build run ARGS="00:00:00:00:00:00"
जहाँ 00:00:00:00:00:00 लक्ष्य/पीड़ित उपकरण का MAC पता है। make clean के अलावा, बाकी बिल्ड लक्ष्य केवल तभी सहायक होते हैं जब आप एक्सप्लॉइट को संशोधित, सुधार या पुनः लागू करने का प्रयास कर रहे हों, इसलिए उनका गहराई से उल्लेख करने की आवश्यकता नहीं है।
gdbserver बाइनरी NDK फ़ोल्डर में पाई जा सकती है# On target
/data/local/tmp/gdbserver 0.0.0.0:1234 --attach $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}')
# On host
adb forward tcp:1234 tcp:1234
gdb-multiarch -q -x ./gdbinit
# On host
adb push ./gdbinit /data/local/tmp/gdbinit
# On target
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}')
# OR
/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 ऑब्जेक्ट के vtables को संशोधित करता है:
partial_packets unordered_map में प्रत्येक आइटम के लिए एक लिंक्ड-लिस्ट आइटम शामिल है। यह map_experiment का उपयोग करके पता लगाया गया था।

