Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Debuggable-App-Exploit — CVE-2024-31317 Exploit de aplicación depurable | Kitploit
Herramientas/GitHubGitHub/cleov2/debuggable-app-exploit
Seguridad AndroidAnálisis de VulnerabilidadesExplotaciónFuzzingSeguridad MóvilAprendizaje y EducaciónDesarrollo de PayloadsExplotación de Binarios
GitHubcleov2/debuggable-app-exploit

Debuggable-App-Exploit

CVE-2024-31317 Exploit de aplicación depurable

Ver Repositorio
1239hace 7 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

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.

Resumen

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."

Características

  • Modo de detección automática - Detecta automáticamente el UID, el conjunto de instrucciones y el directorio de datos de la aplicación objetivo.
  • Inyección de bandera depurable - Establece runtime-flags=65535 para habilitar la depuración.
  • Reenvío JDWP - Configura automáticamente el reenvío de puertos JDWP después del exploit.
  • Inyección de gadget de Frida - Opcionalmente inyecta Frida para hooking en tiempo de ejecución a través de JDWP.
  • Puntos de interrupción inteligentes - Utiliza puntos de interrupción fiables que se activan automáticamente sin interacción del usuario.
  • Instalación automática de la aplicación de depuración - Instala la aplicación auxiliar si no está presente.

Requisitos

  • Dispositivo Android vulnerable a CVE-2024-31317 (parche de seguridad anterior a junio de 2024)
  • ADB instalado y depuración USB habilitada
  • Python 3.10+
  • Paquetes requeridos: ppadb, jdwplib

Instalación

Coloque 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

Uso

Uso básico

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]:

Qué hace

  1. Fase 1: Extraer startSeq

    • Inicia una aplicación auxiliar depurable
    • Se conecta vía JDWP y extrae el valor de startSeq de los marcos de pila
    • Cierra la aplicación auxiliar
  2. Fase 2: Inyectar argumentos de Zygote

    • Construye argumentos maliciosos de zygote con runtime-flags=65535 (depurable)
    • Inyecta la carga útil en el ajuste hidden_api_blacklist_exemptions
    • Detiene y reinicia forzosamente la aplicación objetivo con los argumentos inyectados
  3. Fase 3: Post-explotación

    • Configura el reenvío de puertos JDWP
    • Opcionalmente inyecta el gadget de Frida para hooking en tiempo de ejecución

Ejemplo de salida

==================================================
  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):

Configuración

Aplicación objetivo

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

Detección automática vs Valores predefinidos

Modo de detección automática (recomendado):

  • Usa pm list packages -U para obtener el UID
  • Usa dumpsys package para obtener el conjunto de instrucciones y el directorio de datos
  • Más fiable en diferentes dispositivos

Modo de valores predefinidos:

  • Usa valores predeterminados (UID=10242, arm64, etc.)
  • Más rápido pero menos fiable si el dispositivo difiere de los valores predeterminados

Inyección de gadget de Frida

Después de que el exploit tenga éxito, puede inyectar opcionalmente el gadget de Frida:

¿Inyectar Frida? (y/N): y

El script:

  1. Empuja frida-gadget.so a /data/local/tmp/
  2. Copia al directorio de datos de la aplicación mediante run-as
  3. Establece un punto de interrupción y carga el gadget vía JDWP
  4. Reenvía los puertos 27042 y 27043

Destinos de puntos de interrupción

El script prueba estos puntos de interrupción en orden de fiabilidad:

ClaseMétodoActivación
android.os.MessageQueuenextAutomático - el looper principal sondea constantemente
android.os.BinderexecTransactAutomático - cualquier llamada IPC/binder
android.app.ActivityThreadhandleMessageAutomático - el manejador principal de la app
android.os.HandlerdispatchMessageAutomático - envío de mensajes
android.os.HandlerhandleMessageAutomático - manejo de mensajes
android.view.ChoreographerdoFrameAutomático - callbacks de fotogramas
android.view.ViewdispatchTouchEventManual - requiere toque
android.view.ViewonDrawManual - 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.

Conexión a Frida

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

Después de la explotación

Una vez que el exploit tiene éxito, la aplicación objetivo se ejecuta con la depuración habilitada:

  1. Conectar con el depurador JDWP:

    jdb -attach localhost:8701
    
  2. Usar el depurador de Android Studio - Adjuntar al proceso en el puerto reenviado

  3. Usar Frida - Si se inyectó el gadget mediante el script

Cómo funciona

Resumen de la vulnerabilidad

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.

Componentes clave

  1. Extracción de startSeq: Cada inicio de aplicación tiene un número de secuencia único. Lo extraemos de una aplicación depurable vía JDWP inspeccionando las variables del marco de pila.
Descargar herramienta