
CVE-2024-31317 Exploit de aplicación depurable
Un exploit basado en Python para CVE-2024-31317 (Inyección de Zygote en Android) que hace que cualquier aplicación Android instalada sea depurable inyectando argumentos maliciosos de zygote a través del ajuste hidden_api_blacklist_exemptions. Incluye inyección opcional de gadget de Frida para hooking en tiempo de ejecución.
Este exploit aprovecha una vulnerabilidad de inyección de comandos en el proceso Zygote de Android para iniciar aplicaciones de destino con la bandera debuggable habilitada. Esto permite la depuración e inspección JDWP de cualquier aplicación sin necesidad de acceso root ni de la versión de depuración de la aplicación.
Basado en la investigación de: Análisis de CVE-2024-31317 por Flanker
Insight clave: "el campo runtime-flags en ZygoteArguments se puede usar para habilitar el atributo debuggable de una aplicación."
runtime-flags=65535 para habilitar la depuración.ppadb, jdwplibColoque los siguientes archivos en el mismo directorio:
├── CVE-2024-31317-Debuggable.py # Script principal del exploit
├── jdwplib.py # Biblioteca cliente JDWP
├── app-debug.apk # Aplicación auxiliar depurable
├── frida-gadget-android-*.so # Gadget de Frida (opcional)
├── frida-gadget.config.so # Configuración de Frida (opcional)
└── win32/adb.exe # Binario ADB para Windows
python CVE-2024-31317-Debuggable.py
El script le pedirá que seleccione un modo de detección de parámetros:
==================================================
Exploit CVE-2024-31317
==================================================
[1] Detectar parámetros automáticamente
[2] Valores predefinidos
Modo (1/2) [1]:
Fase 1: Extraer startSeq
startSeq de los marcos de pilaFase 2: Inyectar argumentos de Zygote
runtime-flags=65535 (depurable)hidden_api_blacklist_exemptionsFase 3: Post-explotación
==================================================
Exploit CVE-2024-31317
==================================================
[1] Detectar parámetros automáticamente
[2] Valores predefinidos
Modo (1/2) [1]: 1
[INFO] Fase 1: Extraer startSeq
[INFO] com.debug.app ya está instalado
[INFO] Configurando depurable
[INFO] Iniciando com.debug.app/.MainActivity
[INFO] PID: 12345
[INFO] Puerto JDWP: 8700
[INFO] Suspendiendo VM
[INFO] Escaneando 42 marcos
[INFO] startSeq: 123456
[INFO] Fase 2: Explotar com.debug.configurator
[INFO] Detectando parámetros para com.debug.configurator
[INFO] UID: 10242
[INFO] Arch: arm64
[INFO] Data: /data/user/0/com.debug.configurator
[INFO] Android 13
[INFO] Carga útil: 8765 bytes
[INFO] Reiniciando objetivo
[INFO] Hecho
[INFO] PID objetivo: 23456
[INFO] JDWP: 8701
¿Inyectar Frida? (y/N):
Edite las constantes en la parte superior del script:
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
Modo de detección automática (recomendado):
pm list packages -U para obtener el UIDdumpsys package para obtener el conjunto de instrucciones y el directorio de datosModo de valores predefinidos:
Después de que el exploit tenga éxito, puede inyectar opcionalmente el gadget de Frida:
¿Inyectar Frida? (y/N): y
El script:
frida-gadget.so a /data/local/tmp/run-asEl script prueba estos puntos de interrupción en orden de fiabilidad:
| Clase | Método | Activación |
|---|---|---|
android.os.MessageQueue | next | Automático - el looper principal sondea constantemente |
android.os.Binder | execTransact | Automático - cualquier llamada IPC/binder |
android.app.ActivityThread | handleMessage | Automático - el manejador principal de la app |
android.os.Handler | dispatchMessage | Automático - envío de mensajes |
android.os.Handler | handleMessage | Automático - manejo de mensajes |
android.view.Choreographer | doFrame | Automático - callbacks de fotogramas |
android.view.View | dispatchTouchEvent | Manual - requiere toque |
android.view.View | onDraw | Manual - requiere redibujado de UI |
Los puntos de interrupción superiores deberían activarse automáticamente. Si expiran, toque la aplicación para activar los puntos de interrupción de respaldo.
Después de una inyección exitosa:
# Connect to gadget
frida -H 127.0.0.1:27042 -n Gadget
# List processes
frida-ps -H 127.0.0.1:27042
Una vez que el exploit tiene éxito, la aplicación objetivo se ejecuta con la depuración habilitada:
Conectar con el depurador JDWP:
jdb -attach localhost:8701
Usar el depurador de Android Studio - Adjuntar al proceso en el puerto reenviado
Usar Frida - Si se inyectó el gadget mediante el script
CVE-2024-31317 es una vulnerabilidad de inyección de comandos en el proceso Zygote de Android. Al manipular el ajuste del sistema hidden_api_blacklist_exemptions con una entrada especialmente diseñada, podemos inyectar argumentos arbitrarios de zygote cuando se inicia una aplicación.