Las aplicaciones móviles son el principal punto de interacción digital para miles de millones de usuarios. En 2026, las apps bancarias, de salud, mensajería y comercio manejan datos sensibles que las convierten en objetivos prioritarios para atacantes. El OWASP Mobile Application Security Verification Standard (MASVS) es el estándar de referencia para la seguridad de apps móviles, complementado por el Mobile Application Security Testing Guide (MASTG) y el Mobile Security Weakness Enumeration (MASWE).
Este artículo cubre las vulnerabilidades más críticas en Android e iOS, las pruebas de seguridad basadas en el MASTG, y las mitigaciones que establece el MASVS.
1. OWASP MASVS — Niveles de Verificación
El MASVS define perfiles de verificación flexibles que las organizaciones pueden adoptar según el contexto de la app. Los perfiles de prueba correspondientes (MAS Testing Profiles) se encuentran en el OWASP MASWE:
- MASVS-L1 — Verificación estándar de seguridad (ahora MAS Testing Profile L1)
- MASVS-L2 — Defensa en profundidad (ahora MAS Testing Profile L2)
- MASVS-R — Privacidad reforzada (ahora MAS Testing Profile R)
Nota: En MASVS v2.0.0, los niveles de verificación L1/L2/R se migraron del MASVS al OWASP MASWE como MAS Testing Profiles.
2. Las 9 Categorías del MASVS
V1: Arquitectura, Diseño y Modelado de Amenazas (MASVS-ARCH)
La seguridad debe integrarse desde el diseño. El 60% de las vulnerabilidades móviles detectadas en producción podrían haberse evitado con un modelado de amenazas en la fase de diseño.
Requisitos clave:
- Definir un modelo de amenazas documentado para la app
- Asegurar que todas las conexiones externas (API, cloud, third-party) están autenticadas y cifradas
- Verificar que los componentes third-party están actualizados y sin vulnerabilidades conocidas
- Mantener un inventario de las bibliotecas de terceros y sus versiones
V2: Almacenamiento de Datos y Privacidad (MASVS-STORAGE)
Es la categoría con más fallos en aplicaciones reales. Los atacantes con acceso físico al dispositivo o mediante malware pueden extraer datos almacenados de forma insegura.
Vulnerabilidades comunes:
- SharedPreferences sin cifrar (Android): almacenar tokens, credenciales o datos personales en texto plano
- NSUserDefaults (iOS): equivalente en iOS, también en texto plano
- Keychain/Keystore mal configurado: usar atributos de protección incorrectos (ej:
kSecAttrAccessibleAlwaysen lugar dekSecAttrAccessibleWhenUnlockedThisDeviceOnly) - SQLite sin cifrar: bases de datos locales sin cifrado, accesibles desde un backup o dispositivo rooteado
- Backups inseguros: Android
android:allowBackup=truepermite extraer datos completos de la app medianteadb backup - Logging de datos sensibles: credenciales o tokens escritos en logcat (Android) o NSLog (iOS)
Mitigación:
// Android — usar EncryptedSharedPreferences
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val prefs = EncryptedSharedPreferences.create(
context,
"secure_prefs",
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
// iOS — usar Keychain con protección adecuada
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: "user_token",
kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
kSecValueData as String: tokenData
]
SecItemAdd(query as CFDictionary, nil)
V3: Comunicación Segura (MASVS-NETWORK)
El tráfico de red entre la app y el servidor debe estar protegido contra interceptación y manipulación.
Requisitos:
- TLS 1.3 forzado (no permitir downgrade a TLS 1.2 o inferior)
- Certificate Pinning (o Certificate Transparency) implementado para prevenir ataques MITM con certificados falsos
- No confiar en certificados autofirmados o CA personalizadas en producción
- Validar el nombre del host (hostname verification) — nunca deshabilitarlo
// iOS — Certificate Pinning con URLSession
let pinnedKeys = ["base64-encoded-public-key"]
let serverTrustEvaluator = PinnedCertificatesTrustEvaluator(
certificates: pinnedCertificates,
performDefaultValidation: true,
validateHost: true
)
// Android — Certificate Pinning con OkHttp
val certificatePinner = CertificatePinner.Builder()
.add("api.ejemplo.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=")
.build()
V4: Criptografía (MASVS-CRYPTO)
El uso incorrecto de criptografía es una de las causas más comunes de vulnerabilidades móviles.
Errores frecuentes:
- Algoritmos débiles: MD5, SHA1, RC4, DES, ECB mode en AES
- Claves hardcodeadas: claves AES o IVs en el código fuente
- Generación de números aleatorios insegura: usar
Random()en lugar deSecureRandom - Implementación propia de cifrado: nunca implementar tu propio algoritmo criptográfico
Estándares recomendados:
| Propósito | Algoritmo | Modo/Parámetros |
|---|---|---|
| Cifrado simétrico | AES-256 | GCM (autenticado) |
| Cifrado asimétrico | ECDH o RSA-2048+ | OAEP (RSA) |
| Hash | SHA-256 o SHA-3 | — |
| Firma digital | ECDSA con P-256 | — |
| Derivación de claves | PBKDF2 o Argon2 | 600,000+ iteraciones (PBKDF2) |
V5: Autenticación y Autorización (MASVS-AUTH)
Vulnerabilidades comunes:
- Autenticación biométrica mal implementada: verificar solo la existencia de huella/rostro sin fallback a PIN
- Falta de rate limiting en endpoints de autenticación
- Tokens de sesión con expiración larga o sin capacidad de revocación remota
- Local authentication bypass: depender de
canAuthenticate()sin verificar resultados
// Android — BiometricPrompt correcto
val biometricPrompt = BiometricPrompt(
this,
executor,
object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
// Autenticación biométrica exitosa
// No usar cryptoObject == null como indicador de éxito
}
}
)
V6: Interacción con el Entorno (MASVS-PLATFORM)
Incluye el uso seguro de WebViews, IPC (content providers, intents), y deep links.
Riesgos:
- WebViews con JavaScript habilitado que cargan contenido no confiable
- Content providers sin permisos que exponen datos a otras apps
- Deep links sin validación que permiten lanzar actividades arbitrarias
- Clipboard expuesto: datos sensibles copiados al portapapeles accesibles por otras apps
<!-- Android — Content Provider con permisos -->
<provider
android:name=".SecureProvider"
android:authorities="com.ejemplo.secureprovider"
android:exported="false"
android:protectionLevel="signature" />
V7: Calidad del Código y Compilación (MASVS-CODE)
Controles de compilación:
- Minificación ofuscación con ProGuard/R8 o DexGuard (Android)
- Bitcode stripping y símbolos eliminados (iOS)
- Detección de root/jailbreak con medidas server-side (no solo UI)
- Integrity checks: verificar la firma de la app en runtime
// Android build.gradle — ofuscación con R8
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
}
V8: Resiliencia contra Reverse Engineering (MASVS-RESILIENCE)
Dirigido a apps con requisitos de seguridad elevados (banca, pagos, DRM). No es infalible pero eleva significativamente el coste del ataque.
Técnicas:
- Obfuscation: ofuscar nombres de clases, métodos y campos; ofuscar strings y flujo de control
- Anti-tampering: verificar la firma de la app en runtime; si no coincide, denegar la ejecución
- Anti-debugging: detectar depuradores conectados (ptrace, Frida, Xposed)
- Root/Jailbreak detection: verificar integridad del SO, buscar binarios de su (Android) o CydiaSubstrate (iOS)
- White-box cryptography: implementar algoritmos criptográficos de forma que las claves no sean extraíbles del binario
Nota importante: Ninguna protección contra reverse engineering es infalible. El objetivo es elevar el coste del ataque por encima del valor de los datos protegidos. Una combinación de ofuscación, anti-tampering y cifrado white-box puede retrasar a un atacante determinado de días a meses.
V9: Privacidad (MASVS-PRIVACY)
Añadido en MASVS v2.0, esta categoría se enfoca en la protección de datos personales y el cumplimiento de regulaciones de privacidad.
Requisitos clave:
- Minimización de datos: recopilar solo la información estrictamente necesaria
- Consentimiento explícito para recopilación y uso de datos personales
- Derechos del usuario: acceso, rectificación, supresión (derecho al olvido), portabilidad
- Evaluación de impacto de privacidad (DPIA) para apps que procesan datos personales a escala
- Almacenamiento y transmisión de datos personales cifrados; no incluir datos sensibles en logs
Nota: Esta categoría está directamente alineada con GDPR, CCPA y otras regulaciones de privacidad.
3. Herramientas de Pruebas de Seguridad Móvil
Android
| Herramienta | Propósito | Sitio |
|---|---|---|
| MobSF | Static + dynamic analysis framework | GitHub |
| Frida | Dynamic instrumentation, hooking | frida.re |
| Objection | Runtime mobile exploration (sobre Frida) | GitHub |
| APKTool | Descompilar y recompilar APKs | apktool.org |
| dex2jar + jadx | Convertir DEX a JAR + decompilador | GitHub |
| adb | Android Debug Bridge — shell, backup, logcat | Android SDK |
iOS
| Herramienta | Propósito | Sitio |
|---|---|---|
| Frida | Dynamic instrumentation en iOS | frida.re |
| Objection | Runtime exploration iOS | GitHub |
| Hopper / Ghidra | Reverse engineering de binarios | ghidra-sre.org |
| class-dump | Extraer headers de Objective-C | GitHub |
| lldb | Debugger de iOS | lldb.llvm.org |
4. Checklist de Seguridad para Apps Móviles
Almacenamiento
- Datos sensibles en Keychain/Keystore, no en SharedPreferences/NSUserDefaults
- Bases de datos locales cifradas (SQLCipher o equivalente)
- Backups deshabilitados o cifrados
- Logging sin datos sensibles
- Clipboard no expone datos sensibles
Comunicación
- TLS 1.3 forzado (sin permitir downgrade)
- Certificate Pinning implementado (o CT)
- Hostname verification activo
- No hay endpoints HTTP sin cifrar
Criptografía
- AES-256 GCM para cifrado simétrico
- Claves generadas y almacenadas en hardware seguro (TEE/SE)
- PBKDF2/Argon2 para derivación de contraseñas
- SecureRandom para generación de números aleatorios
Autenticación
- Biometría con fallback a PIN/código seguro
- Tokens de sesión con expiración (15-30 min)
- Rate limiting en login
- Revocación remota de sesiones
Plataforma
- WebViews sin JavaScript para contenido no confiable
- Content Providers con protección por firma
- Deep links validados
Compilación
- Ofuscación activa (R8/ProGuard)
- Root/Jailbreak detection con respuesta server-side
- Firma de app verificada en runtime
Conclusión
La seguridad en aplicaciones móviles requiere un enfoque sistemático que abarque desde el diseño hasta la compilación. El OWASP MASVS proporciona el marco de verificación, el MASTG las técnicas de prueba, y el MASWE el catálogo de debilidades. Las categorías más críticas — almacenamiento de datos, comunicación segura y autenticación — son donde ocurren la mayoría de las vulnerabilidades en apps reales. Invertir en estas áreas desde las primeras fases del desarrollo reduce drásticamente el riesgo de exposición de datos sensibles.
Artículos Relacionados
- OWASP API Security Top 10 — Vulnerabilidades del lado del servidor que afectan las APIs consumidas por apps móviles
- Pentesting Web con OWASP Top 10 — Vulnerabilidades web que complementan el testing de aplicaciones móviles
- Criptografía Aplicada: TLS 1.3 — Los fundamentos de cifrado para implementar comunicación segura en apps
- Supply Chain Attacks y Dependencias — Riesgos de bibliotecas de terceros en el ecosistema móvil