Saltar a contenido

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. Plan de Remediacion

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."