Investigacion: OWASP Security Standards para MedTime
Identificador: INV-007
Version: 1.0.0
Fecha: 2025-12-03
Autor: SpecQueen
Tipo: Investigacion
Estado: Activo
Decision: ACL12-011 - Integrar OWASP desde especificacion funcional
1. Proposito
Documentar el cumplimiento de MedTime con los estandares de seguridad OWASP, incluyendo:
- OWASP Mobile Application Security Verification Standard (MASVS) v2.0
- OWASP Mobile Top 10 (2024)
- OWASP API Security Top 10 (2023)
Este documento sirve como referencia para el equipo de desarrollo y como evidencia de compliance para auditorias de seguridad.
2. OWASP Mobile Top 10 (2024)
2.1. Matriz de Cumplimiento
| ID |
Riesgo |
Severidad |
Mitigacion MedTime |
Modulo |
Estado |
| M1 |
Improper Credential Usage |
Critica |
Tokens JWT con rotacion, no almacenar passwords en texto plano |
MTS-AUTH-001 |
Implementado |
| M2 |
Inadequate Supply Chain Security |
Alta |
Dependencias auditadas, SBOM, actualizaciones automaticas |
03-arquitectura |
Planificado |
| M3 |
Insecure Authentication/Authorization |
Critica |
MFA opcional, OAuth 2.0, verificacion escalonada |
MTS-AUTH-001 |
Implementado |
| M4 |
Insufficient Input/Output Validation |
Alta |
Validacion en cliente y servidor, sanitizacion de inputs |
API-STANDARDS |
Implementado |
| M5 |
Insecure Communication |
Critica |
TLS 1.3+, Certificate Pinning, E2E encryption |
MTS-PRI-001 |
Implementado |
| M6 |
Inadequate Privacy Controls |
Critica |
Cifrado E2E, consentimientos granulares, LFPDPPP compliance |
MTS-PRI-001 |
Implementado |
| M7 |
Insufficient Binary Protections |
Media |
Ofuscacion, anti-tampering, root/jailbreak detection |
03-arquitectura |
Planificado |
| M8 |
Security Misconfiguration |
Alta |
Hardening guides, configuracion segura por defecto |
API-STANDARDS |
Implementado |
| M9 |
Insecure Data Storage |
Critica |
AES-256 local, Keychain/Keystore, no logs sensibles |
MTS-OFF-001 |
Implementado |
| M10 |
Insufficient Cryptography |
Alta |
AES-256-GCM, RSA-2048+, algoritmos actualizados |
MTS-PRI-001 |
Implementado |
2.2. Detalle de Mitigaciones Criticas
2.2.1. M1: Improper Credential Usage
Mitigacion MedTime:
- Passwords hasheados con bcrypt (cost factor 12)
- Tokens JWT con expiracion corta (15 min access, 7 dias refresh)
- Refresh tokens rotados en cada uso
- Credenciales nunca en logs o analytics
- Biometria como factor adicional (no reemplazo)
Referencia: MTS-AUTH-001 Seccion 4.4
2.2.2. M5: Insecure Communication
Mitigacion MedTime:
- TLS 1.3 obligatorio (TLS 1.2 como fallback temporal)
- Certificate Pinning para dominios MedTime
- HSTS habilitado (max-age=31536000)
- No HTTP plano en ninguna circunstancia
- E2E encryption para datos de salud (PHI)
Referencia: MTS-PRI-001 Seccion 3, API-STANDARDS Seccion 12
2.2.3. M6: Inadequate Privacy Controls
Mitigacion MedTime:
- Cifrado E2E: servidor NUNCA ve datos de salud en claro
- Consentimientos granulares por tipo de dato
- Derecho de acceso, rectificacion, eliminacion (ARCO)
- Anonimizacion para analytics
- Privacy by Design en toda la arquitectura
Referencia: MTS-PRI-001, 02-requisitos-regulatorios
2.2.4. M9: Insecure Data Storage
Mitigacion MedTime:
- iOS: Keychain Services para credenciales
- Android: EncryptedSharedPreferences + Keystore
- SQLite cifrado con SQLCipher (AES-256)
- No datos sensibles en UserDefaults/SharedPreferences
- Backup excluido de iCloud/Google Backup por defecto (opt-in)
- Logs sanitizados (sin PII/PHI)
Referencia: MTS-OFF-001 Seccion 5, MTS-BCK-001
3. OWASP API Security Top 10 (2023)
3.1. Matriz de Cumplimiento
| ID |
Riesgo |
Severidad |
Mitigacion MedTime |
Endpoint Ejemplo |
Estado |
| API1 |
Broken Object Level Authorization |
Critica |
Validacion de ownership en cada request |
GET /medicamentos/{id} |
Implementado |
| API2 |
Broken Authentication |
Critica |
JWT + MFA, rate limiting en login |
POST /auth/login |
Implementado |
| API3 |
Broken Object Property Level Authorization |
Alta |
DTOs especificos por rol, campos filtrados |
GET /usuarios/{id} |
Implementado |
| API4 |
Unrestricted Resource Consumption |
Alta |
Rate limiting por tier, quotas de storage |
Todos los endpoints |
Implementado |
| API5 |
Broken Function Level Authorization |
Alta |
RBAC, verificacion de permisos por endpoint |
POST /admin/* |
Implementado |
| API6 |
Unrestricted Access to Sensitive Business Flows |
Media |
CAPTCHA, rate limiting, deteccion de bots |
POST /auth/register |
Planificado |
| API7 |
Server Side Request Forgery |
Media |
Whitelist de URLs, no user-controlled URLs |
Integraciones externas |
Implementado |
| API8 |
Security Misconfiguration |
Alta |
Headers de seguridad, CORS restrictivo |
Todos los endpoints |
Implementado |
| API9 |
Improper Inventory Management |
Baja |
Versionado de API, deprecation policy |
/v1/, /v2/ |
Implementado |
| API10 |
Unsafe Consumption of APIs |
Media |
Validacion de respuestas externas, timeouts |
DrugBank, RxNorm |
Implementado |
3.2. Detalle de Mitigaciones Criticas
3.2.1. API1: Broken Object Level Authorization (BOLA)
# Ejemplo de validacion en MedTime API
@app.get("/medicamentos/{medicamento_id}")
async def get_medicamento(medicamento_id: UUID, current_user: User):
medicamento = await MedicamentoService.get(medicamento_id)
# BOLA Check: Verificar ownership
if medicamento.usuario_id != current_user.id:
# Verificar si es cuidador autorizado
if not await CuidadorService.tiene_acceso(current_user.id, medicamento.usuario_id):
raise HTTPException(403, "No autorizado")
return medicamento
Regla: Todo endpoint que accede a recursos debe validar que el usuario actual tiene permiso sobre ese recurso especifico.
3.2.2. API4: Unrestricted Resource Consumption
Rate Limits por Tier (API-STANDARDS Seccion 8):
| Endpoint | Free | Pro | Perfect |
|----------|------|-----|---------|
| API general | 60/min | 120/min | 300/min |
| Busqueda catalogo | 30/min | 60/min | 120/min |
| Sincronizacion | 10/min | 30/min | 60/min |
| OCR | 3/dia | 10/dia | 30/dia |
| Interacciones IA | 3/dia | 10/dia | 30/dia |
Storage Limits:
- Free: 0 MB cloud (100% local)
- Pro: 5 GB
- Perfect: 50 GB
3.2.3. API8: Security Misconfiguration
Headers de Seguridad Obligatorios:
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Content-Security-Policy: default-src 'self'
X-XSS-Protection: 1; mode=block
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: geolocation=(self), camera=(self)
CORS:
- Origin whitelist: app.medtime.com, *.medtime.com
- Credentials: true (solo para dominios autorizados)
- Methods: GET, POST, PUT, DELETE, PATCH
- Max-Age: 86400
4. OWASP MASVS v2.0 Compliance
4.1. Nivel de Seguridad Target
MedTime apunta a MASVS-L2 (Defensa en profundidad) debido a que procesa datos de salud (PHI).
4.2. Checklist por Categoria
4.2.1. MASVS-STORAGE: Almacenamiento de Datos
| Control |
Requerimiento |
MedTime Implementation |
Estado |
| MSTG-STORAGE-1 |
No almacenar datos sensibles en logs |
Log sanitization, no PII/PHI |
OK |
| MSTG-STORAGE-2 |
No almacenar datos sensibles en backups de terceros |
Exclusion de iCloud/Google Backup |
OK |
| MSTG-STORAGE-3 |
No exponer datos sensibles via IPC |
No Content Providers publicos |
OK |
| MSTG-STORAGE-4 |
No almacenar datos sensibles en teclado cache |
InputType.textNoSuggestions |
OK |
| MSTG-STORAGE-5 |
No exponer datos sensibles en clipboard |
Clipboard timeout 60s |
OK |
| MSTG-STORAGE-6 |
No almacenar datos sensibles en analytics |
PII removido de eventos |
OK |
| MSTG-STORAGE-7 |
No incluir datos sensibles en crash logs |
Sanitizacion de crashes |
OK |
4.2.2. MASVS-CRYPTO: Criptografia
| Control |
Requerimiento |
MedTime Implementation |
Estado |
| MSTG-CRYPTO-1 |
No usar criptografia deprecada |
AES-256-GCM, RSA-2048+ |
OK |
| MSTG-CRYPTO-2 |
Usar parametros criptograficos correctos |
IV aleatorio, key derivation PBKDF2 |
OK |
| MSTG-CRYPTO-3 |
Usar RNG criptograficamente seguro |
SecureRandom (Android), arc4random (iOS) |
OK |
| MSTG-CRYPTO-4 |
No hardcodear claves |
Keychain/Keystore |
OK |
| MSTG-CRYPTO-5 |
No reusar claves para multiples propositos |
Keys separadas por uso |
OK |
4.2.3. MASVS-AUTH: Autenticacion
| Control |
Requerimiento |
MedTime Implementation |
Estado |
| MSTG-AUTH-1 |
Autenticacion en servidor, no solo cliente |
JWT validado en backend |
OK |
| MSTG-AUTH-2 |
Sesiones invalidadas en logout |
Token revocation, blacklist |
OK |
| MSTG-AUTH-3 |
Tokens con expiracion corta |
15 min access token |
OK |
| MSTG-AUTH-4 |
MFA disponible para operaciones sensibles |
TOTP, SMS, Biometria |
OK |
| MSTG-AUTH-5 |
Biometria correctamente implementada |
LAContext (iOS), BiometricPrompt (Android) |
OK |
| MSTG-AUTH-6 |
Verificacion de sesion en cada request |
Middleware JWT |
OK |
4.2.4. MASVS-NETWORK: Red
| Control |
Requerimiento |
MedTime Implementation |
Estado |
| MSTG-NETWORK-1 |
TLS para todas las comunicaciones |
TLS 1.3+, no HTTP |
OK |
| MSTG-NETWORK-2 |
Certificate Pinning |
Pinning para *.medtime.com |
OK |
| MSTG-NETWORK-3 |
Verificar certificados de servidor |
No override de SSL errors |
OK |
| MSTG-NETWORK-4 |
No confiar en certificados custom sin validacion |
Rechazo de CA desconocidos |
OK |
5. Matriz de Riesgos vs Arquitectura MedTime
5.1. Superficie de Ataque
graph TD
subgraph "Mobile App"
MA1[Local Storage]
MA2[Keychain/Store]
MA3[Network Layer]
MA_R[Riesgos: M9, M1, M5]
end
subgraph "API Gateway"
AG1[Rate Limiting]
AG2[Auth Check]
AG3[CORS]
AG_R[Riesgos: API1-10]
end
subgraph "Backend"
BE1[Business Logic]
BE2[Database]
BE3[Integrations]
BE_R[Riesgos: M3, M6, M10]
end
MA1 -.-> AG1
MA2 -.-> AG2
MA3 -.-> AG3
AG1 -.-> BE1
AG2 -.-> BE2
AG3 -.-> BE3
5.2. Mitigaciones por Capa
| Capa |
Riesgos Principales |
Controles |
| Mobile App |
M1, M5, M9 |
Cifrado local, Certificate Pinning, Secure Storage |
| API Gateway |
API1, API2, API4 |
JWT validation, Rate limiting, BOLA checks |
| Backend |
M3, M6, M10 |
RBAC, Privacy controls, Input validation |
| Database |
M9 |
Encryption at rest, Access control |
| Integraciones |
API10, M5 |
Response validation, Timeouts, Circuit breaker |
6. Checklist Pre-Release de Seguridad
6.1. Antes de Cada Release
## Security Release Checklist
### Codigo
- [ ] Code review con enfoque en seguridad completado
- [ ] SAST (Static Analysis) ejecutado sin findings criticos
- [ ] Dependencias actualizadas y sin CVEs conocidos
- [ ] Secrets scan ejecutado (no credenciales en codigo)
### Configuracion
- [ ] TLS 1.3 habilitado en todos los endpoints
- [ ] Certificate Pinning actualizado si hay rotacion de certs
- [ ] Rate limits configurados por tier
- [ ] CORS configurado restrictivamente
### Testing
- [ ] Penetration testing (al menos anual o en cambios mayores)
- [ ] DAST (Dynamic Analysis) ejecutado
- [ ] Tests de autenticacion/autorizacion pasando
- [ ] Tests de input validation pasando
### Documentacion
- [ ] Changelog de seguridad actualizado
- [ ] Privacy Policy actualizada si hay cambios en datos
- [ ] Incident response plan revisado
6.2. Antes de v1.0 (One-Time)
## Security Hardening v1.0
### Mobile
- [ ] Ofuscacion habilitada (ProGuard/R8, Swift obfuscation)
- [ ] Root/Jailbreak detection implementado
- [ ] Debugger detection implementado
- [ ] Screen capture protection para pantallas sensibles
### Backend
- [ ] WAF configurado
- [ ] DDoS protection habilitada
- [ ] Logging centralizado con alertas
- [ ] Backup y recovery probados
### Compliance
- [ ] Penetration test externo completado
- [ ] OWASP checklist revisado (este documento)
- [ ] Privacy Impact Assessment completado
- [ ] Security documentation para App Store review
7.1. Items Pendientes
| ID |
Item |
Prioridad |
Target |
Responsable |
| SEC-001 |
Implementar CAPTCHA en registro |
Media |
v1.0 |
Mobile Team |
| SEC-002 |
Supply Chain Security (SBOM) |
Alta |
v1.1 |
DevOps |
| SEC-003 |
Binary protections (ofuscacion) |
Media |
v1.0 |
Mobile Team |
| SEC-004 |
Penetration test externo |
Critica |
Pre-v1.0 |
Security |
7.2. Calendario de Auditorias
| Auditoria |
Frecuencia |
Proxima |
| Penetration Test Externo |
Anual |
Pre-v1.0 |
| SAST/DAST |
Cada release |
Continuo |
| Dependency Audit |
Mensual |
Continuo |
| OWASP Review |
Semestral |
Q2 2026 |
8. Referencias
8.1. Documentos OWASP
8.2. Documentos MedTime Relacionados
Documento generado por SpecQueen - "La seguridad no es un feature, es un requisito. Tu app sera asimilada en un bunker impenetrable."