← Volver al inicio
DIVA Android ADB SQLite Seguridad Móvil

Auditoría DIVA: Vulnerabilidades Android

01/04/2022

Auditoría práctica sobre DIVA (Damn Insecure and Vulnerable App): demostración de vulnerabilidades reales en aplicaciones Android usando ADB, logcat y sqlite3.

Apartado 1 — Insecure Logging

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.

Apartado 2 — Hardcoding Issues (Part 1)

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

Apartado 3 — Insecure Data Storage (SharedPreferences)

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

Apartado 4 — Insecure Data Storage (SQLite)

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

Apartado 5 — Insecure Data Storage (Archivos temporales)

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

Apartado 6 — Insecure Data Storage (Almacenamiento externo)

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.

Apartado 7 — Input Validation Issues (SQL Injection en DIVA)

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.

Resumen de vulnerabilidades

ApartadoVulnerabilidadAlmacenamiento
1Insecure LoggingLogs del sistema
2Hardcoded CredentialsCódigo fuente
3Insecure Data StorageSharedPreferences (XML)
4Insecure Data StorageSQLite sin cifrar
5Insecure Data StorageArchivos temporales
6Insecure Data StorageAlmacenamiento externo
7SQL InjectionBase de datos interna