Auditoría práctica sobre DIVA (Damn Insecure and Vulnerable App): demostración de vulnerabilidades reales en aplicaciones Android usando ADB, logcat y sqlite3.
DIVA guarda información confidencial (número de tarjeta de crédito) en los logs del sistema con la etiqueta diva-log.
# Acceder al shell del dispositivo
adb shell
# Ver todos los logs filtrados por diva
logcat | grep "diva-log"
# En Windows: exportar logs desde Genymotion y buscar
Find "diva-log" *
Riesgo: cualquier app con permiso de lectura de logs puede obtener los datos.
La clave de acceso está en texto plano dentro del código fuente sin encriptar:
# Abrir HardcodeActivity en el código descompilado
# La clave aparece visible en el código Java sin ofuscación
Las credenciales se guardan en SharedPreferences sin cifrar:
adb shell
cd /data/data/jakhar.aseem.diva/shared_prefs/
cat jakhar.aseem.diva_preferences.xml
# Muestra usuario y contraseña en texto plano
Las credenciales se almacenan en una base de datos SQLite sin cifrar:
adb shell
cd /data/data/jakhar.aseem.diva/databases/
sqlite3 ids2
.tables
SELECT * FROM myuser;
.headers on # Mostrar nombres de columnas
sqlite3 ids2 .dump > ids2_backup.txt # Backup
Las credenciales se guardan en archivos temporales con nombre predecible (uinfo+identificador) en el directorio del paquete:
ls /data/data/jakhar.aseem.diva/
cat uinfo* # Credenciales en texto plano
Las credenciales se escriben en la tarjeta SD/almacenamiento externo, accesible por cualquier app con permiso READ_EXTERNAL_STORAGE. Para reproducirlo, activar permiso en Settings → Apps → Permissions.
La aplicación acepta nombres de usuario sin sanitizar y los usa directamente en una consulta SQL. Inyectar ' OR '1'='1 devuelve todos los registros.
| Apartado | Vulnerabilidad | Almacenamiento |
|---|---|---|
| 1 | Insecure Logging | Logs del sistema |
| 2 | Hardcoded Credentials | Código fuente |
| 3 | Insecure Data Storage | SharedPreferences (XML) |
| 4 | Insecure Data Storage | SQLite sin cifrar |
| 5 | Insecure Data Storage | Archivos temporales |
| 6 | Insecure Data Storage | Almacenamiento externo |
| 7 | SQL Injection | Base de datos interna |