
मूल Python एक्सप्लॉइट को C में अनुवाद करना
CVE‑2026‑0073 एंड्रॉइड के ADB डेमॉन (adbd) में एक लॉजिक बग है जो एक हमलावर को TLS पारस्परिक प्रमाणीकरण (mutual authentication) को बायपास करने और ऐसे डिवाइस पर रिमोट शेल खोलने की अनुमति देता है जिसमें वायरलेस डिबगिंग सक्षम हो और कम से कम एक बार किसी भी कंप्यूटर के साथ पेयर किया गया हो। मूल कारण एक गलत तरीके से उपयोग किया गया API है: OpenSSL के EVP_PKEY_cmp() का रिटर्न वैल्यू तीन-मान वाले परिणाम के बजाय Boolean के रूप में माना जाता है।
जब हम एंड्रॉइड डेवलपर सेटिंग्स से वायरलेस डिबगिंग सक्षम करते हैं, तो डिवाइस एक adbd इंस्टेंस शुरू करता है जो एक रैंडम TCP पोर्ट पर सुनता है।
नोट: यह सुविधा Android 11 से शुरू की गई थी।
प्रोटोकॉल के दो चरण हैं:
adbd को क्लाइंट से प्रमाणपत्र प्रस्तुत करने की आवश्यकता होती हैadbd उस प्रमाणपत्र से सार्वजनिक कुंजी निकालता है/data/misc/adb/adb_keys में संग्रहीत सभी अधिकृत RSA कुंजियों से करता है। कुंजियाँ पिछली पेयरिंग के दौरान वहाँ रखी जाती हैं (एक्सप्लॉइट के लिए आवश्यक है कि यहाँ कम से कम एक कुंजी मौजूद हो)shell उपयोगकर्ता के रूप में शेल कमांड भेज सकता है
कुंजी तुलना OPENSSL के EVP_PKEY_cmp(key1, key2) का उपयोग करके की जाती है, जो निम्न लौटाता हैफ़ाइल daemon/auth.cpp में कमजोर फ़ंक्शन adb_tls_verify_cert() कुछ इस तरह दिखता है:
int cmp = EVP_PKEY_cmp(stored_rsa_key, peer_key);
if (cmp) {
authorised = true;
}
चूँकि if(cmp) तब तक true लौटाता है जब तक cmp गैर-शून्य है, EVP_PKEY_cmp() से -1 का रिटर्न वैल्यू प्राधिकरण की ओर ले जाता है। इसका मतलब है कि चूँकि संग्रहीत कुंजी RSA है, जब क्लाइंट EC या ed25519 प्रमाणपत्र प्रस्तुत करता है, तो फ़ंक्शन -1 लौटाता है और हमलावर को अधिकृत पहुँच प्राप्त हो जाती है।
लक्ष्य: एक एंड्रॉइड डिवाइस जिसमें वायरलेस डिबगिंग सक्षम हो और उसके कीस्टोर में कम से कम एक RSA कुंजी हो (यह किसी के द्वारा एक बार पेयर किया गया हो)।
क्लियरटेक्स्ट हैंडशेक: हमलावर adbd TCP पोर्ट से कनेक्ट होता है और CNXN/STLS का आदान-प्रदान करता है।
EC प्रमाणपत्र के साथ TLS हैंडशेक: हमलावर एक अस्थायी EC P‑256 कुंजी और एक सेल्फ-साइन्ड प्रमाणपत्र उत्पन्न करता है। यह कुंजी जानबूझकर RSA नहीं है।
त्रुटिपूर्ण तुलना: EVP_PKEY_cmp(RSA, EC) ‑1 लौटाता है → if (cmp) true है → adbd ट्रांसपोर्ट को अधिकृत के रूप में चिह्नित करता है।
पोस्ट‑TLS: हमलावर होस्ट CNXN भेजने से बचता है (जो ट्रांसपोर्ट को रीसेट कर देगा) और सीधे एक बड़ी delayed_ack विंडो के साथ shell: स्ट्रीम खोलता है।
परिणाम: shell उपयोगकर्ता के रूप में रिमोट शेल, बिना किसी उपयोगकर्ता इंटरैक्शन, बिना किसी सूचना, और बिना किसी वैध प्राइवेट कुंजी के पास हुए।
Python स्क्रिप्ट के लिए हमलावर मशीन पर python 3 इंटरप्रिटर और cryptography लाइब्रेरी स्थापित होना आवश्यक है। एक C इम्प्लीमेंटेशन सिस्टम के OpenSSL/libssl के अलावा बाहरी निर्भरताओं के बिना एक स्टैंडअलोन बाइनरी में संकलित होता है, जो लगभग हर लिनक्स सिस्टम पर डिफ़ॉल्ट रूप से मौजूद होता है। यह तैनाती की बाधा को नाटकीय रूप से कम करता है। इसके अलावा, एक C प्रोग्राम को किसी भी लक्षित आर्किटेक्चर (x86_64, ARM, MIPS) के लिए क्रॉस-कंपाइल किया जा सकता है। इसका मतलब है कि एक्सप्लॉइट को राउटर, रास्पबेरी पाई, या यहाँ तक कि एक अन्य एंड्रॉइड डिवाइस जो हमलावर के रूप में कार्य कर रहा है, जैसे एम्बेडेड डिवाइसों पर सीधे संकलित और चलाया जा सकता है, जिसमें किसी python वातावरण की आवश्यकता नहीं होती है। और एक संकलित C बाइनरी को प्रतीकों से रहित किया जा सकता है, पैक किया जा सकता है (UPX), और यह बिना डिसअसेंबलर के अपारदर्शी होता है, जो इसे python स्क्रिप्ट की तुलना में अधिक गुप्त बनाता है।
एक्सप्लॉइट चलाना: वायरलेस डिबगिंग इंटरफ़ेस का IP और PORT प्रदान करें और आपके पास डिवाइस पर शेल होगा।
docker build -t adb_bypass .
docker run -it --network host adb_bypass <IP> <PORT>
कैलक खोलना
am start -n com.sec.android.app.popupcalculator/com.sec.android.app.popupcalculator.Calculator
एक्सप्लॉइट को python से C में अनुवाद करने के लिए LLM का उपयोग किया गया था, मूल एक्सप्लॉइट यहाँ है। अनुवाद 1:1 सही नहीं था और हमें कई समस्याओं का सामना करना पड़ा, इसलिए अनुवाद में बगों को ठीक करने और पूर्ण रूप से चलने वाले एक्सप्लॉइट तक पहुँचने के लिए कोड विश्लेषण और आगे-पीछे चैटिंग का एक लूप आवश्यक था।