Informe de Seguridad Β· CULTIVA IA

Mapeo de Mitigacion de Amenazas

NutriFlow SaaS — Plataforma de nutricion clinica B2B • AWS + Node.js + PostgreSQL

GDPR ENS Nivel Medio Junio 2026
5
Amenazas
2 criticas
17
Controles
mapeados
6
Gaps
3 criticos
34%
Cobertura actual
Insuficiente
81%
Cobertura post-plan
Objetivo Q4
🎯 Amenazas y Controles por Capa
T1
Inyeccion SQL / NoSQL en busqueda de pacientes
El endpoint GET /api/patients/search?q= no sanitiza parametros; permite exfiltrar toda la BD PostgreSQL.
STRIDE: Tampering Impacto: Critico Probabilidad: Alta Score: 9.2
Cobertura actual
15% Critico
Post-remediacion
90% Adecuado
IDControlTipoCapaEstadoEficacia
VAL-001
Prepared Statements / ORM
Parametrizar todas las queries en Sequelize/Prisma
Preventivo Aplicacion
Sin impl.
★★★★
VAL-002
WAF (AWS WAF)
Reglas SQLi en CloudFront / ALB
Preventivo Red
Sin impl.
★★★★★
VAL-003
Validacion de esquema (Zod)
Rechazar inputs malformados antes del ORM
Preventivo Aplicacion
Parcial
★★★★★
LOG-001
Alerta de query anomala
CloudWatch Logs Insights — queries lentas o errores 500
Detectivo Aplicacion
Sin impl.
★★★★★
T2
Escalada de privilegios medico β†’ administrador
Los JWT no validan el scope de rol en todos los endpoints administrativos; un token de medico puede acceder a rutas de gestion.
STRIDE: Elevation of Privilege Impacto: Critico Probabilidad: Media Score: 8.7
Cobertura actual
20% Critico
Post-remediacion
85% Adecuado
IDControlTipoCapaEstadoEficacia
ACC-001
RBAC en middleware Express
Decorator @RequireRole en cada route handler
Preventivo Aplicacion
Sin impl.
★★★★
ACC-002
JWT scope validation
Incluir roles[] en payload y verificar en cada request
Preventivo Aplicacion
Parcial
★★★★
LOG-002
Audit log de acciones admin
Tabla inmutable audit_events en PostgreSQL
Detectivo Datos
Sin impl.
★★★★★
INC-001
Revocacion de tokens comprometidos
Blacklist Redis con TTL para invalidacion inmediata
Correctivo Aplicacion
Sin impl.
★★★★★
T3
Exposicion de datos PHI en logs de error
El stack trace de Express incluye objetos completos de paciente (nombre, DNI, diagnostico) en logs de CloudWatch sin enmascarar.
STRIDE: Info. Disclosure Impacto: Alto Probabilidad: Alta Score: 7.8
Cobertura actual
30% Deficiente
Post-remediacion
88% Adecuado
IDControlTipoCapaEstadoEficacia
ENC-003
Log scrubbing con pino-redact
Enmascarar campos sensibles en el logger Pino
Preventivo Aplicacion
Sin impl.
★★★★
ACC-003
Restriccion IAM en CloudWatch
Solo rol SecurityOps puede leer logs de prod
Preventivo Datos
Implementado
★★★★★
ENC-001
Cifrado AES-256 en reposo
RDS Encrypted + Log Groups con KMS CMK
Preventivo Datos
Implementado
★★★★
T4
Fuerza bruta en portal clinico
El endpoint POST /auth/login no tiene rate limiting ni bloqueo de cuenta tras intentos fallidos.
STRIDE: Spoofing Impacto: Alto Probabilidad: Media Score: 6.9
Cobertura actual
40% Parcial
Post-remediacion
92% Robusto
IDControlTipoCapaEstadoEficacia
AUTH-001
MFA (TOTP) obligatorio
Authenticator app para todos los roles clinicos
Preventivo Aplicacion
Sin impl.
★★★★
AVL-001
Rate limiting (express-rate-limit)
Max 5 intentos / 15 min por IP, bloqueo de cuenta en 10 fallos
Preventivo Aplicacion
Sin impl.
★★★★★
LOG-003
Alerta CloudWatch — login failures
Metrica personalizada: >3 fallos/min dispara SNS
Detectivo Aplicacion
Implementado
★★★★★
T5
Denegacion de servicio en generacion de informes PDF
El endpoint POST /reports/generate corre Puppeteer sincrono; un request malicioso puede agotar la CPU del servidor.
STRIDE: Denial of Service Impacto: Medio Probabilidad: Media Score: 5.4
Cobertura actual
55% Parcial
Post-remediacion
82% Adecuado
IDControlTipoCapaEstadoEficacia
AVL-002
Cola de trabajos asincronos (Bull/Redis)
Mover Puppeteer a workers isolados con concurrencia limitada
Preventivo Endpoint
Sin impl.
★★★★
AVL-003
Timeout y memory limit en Puppeteer
30 s timeout + 512 MB RSS limit por proceso
Preventivo Endpoint
Parcial
★★★★★
AVL-004
AWS Auto Scaling + ALB health checks
Scale-out automatico si CPU > 70% durante 2 min
Correctivo Red
Implementado
★★★★★
πŸ›‘οΈ Matriz de Defensa en Profundidad
Capa T1 — SQLi T2 — PrivEsc T3 — PHI/Logs T4 — BruteForce T5 — DoS PDF Estado capa
Red
WAF, DDoS, TLS
⚠ WAF pendiente β€” βœ“ TLS 1.3 β€” βœ“ ALB Scale Parcial
Aplicacion
Auth, validacion, RBAC
⚠ ORM pendiente ⚠ JWT parcial ⚠ Redact pend. ⚠ Rate limit pend. ⚠ Cola pendiente Deficiente
Datos
Cifrado, auditorias
β€” ⚠ Audit log pend. βœ“ AES-256 KMS β€” β€” Parcial
Endpoint
Parcheo, EDR, hardening
β€” β€” β€” β€” ⚠ Mem limit parc. Gap
Proceso
Formacion, IR, SSDLC
β€” β€” β€” βœ“ Alerta SNS β€” Gap
⚑ Gaps Criticos que Requieren Accion Inmediata
πŸ”΄
T1 β€” Sin Prepared Statements en produccion
Cobertura actual: 15%. Toda la BD PostgreSQL de pacientes es exfiltrable con un ataque SQLi. Riesgo regulatorio GDPR Art. 83 (hasta 4% facturacion global).
β†’ Accion: Migrar queries a Prisma/Sequelize parametrizado esta semana. Estimacion: 2-3 dias dev.
πŸ”΄
T2 β€” RBAC no aplicado en todos los endpoints admin
Cobertura actual: 20%. Un token JWT de medico permite acceso a /api/admin/*. Gap de diversidad de controles: sin auditoria ni revocacion.
β†’ Accion: Middleware requireRole() + tabla audit_events. Estimacion: 1-2 dias dev.
πŸ”΄
T3 β€” Datos PHI expuestos en logs sin enmascarar
Logs de error incluyen objectos completos de paciente. CloudWatch retiene 30 dias. Violacion directa de GDPR Art. 32 y ENS control MP.SI.1.
β†’ Accion: Configurar pino-redact con lista de campos PII. Estimacion: 4 horas.
🟠
T4 β€” Sin MFA en portal clinico
El portal procesa datos de salud sin segundo factor. Alta probabilidad de compromiso por credential stuffing (brecha Linkedin/Health 2025).
β†’ Accion: Integrar speakeasy + QR code enrollment en el onboarding. Estimacion: 1-2 dias dev.
🟠
T4/T5 β€” Sin rate limiting en endpoints criticos
Login y generacion PDF sin throttling. Un atacante puede lanzar 10k requests/s sin freno. No existe capa proceso (IR playbook) para responder.
β†’ Accion: express-rate-limit + Redis store. Configurar en 2 horas.
🟑
Global β€” Sin capa Proceso/Endpoint en ninguna amenaza
No hay formacion de seguridad para devs, ni playbook de respuesta a incidentes, ni SSDLC formal. Los controles tecnicos no son sostenibles sin proceso.
β†’ Accion Q3: Secure coding workshop (4h) + IR playbook basico.
πŸ—ΊοΈ Hoja de Ruta de Remediacion
🚨 Fase 1 β€” Critico Sprint actual (2 sem)
πŸ”΄
Prepared Statements / Prisma ORM VAL-001 Β· T1-SQLi Esfuerzo: 3d Β· Impacto: 9.2 β†’ 2.0
πŸ”΄
Log scrubbing PHI (pino-redact) ENC-003 Β· T3-PHI Esfuerzo: 4h Β· GDPR Art.32
πŸ”΄
RBAC middleware + JWT scope ACC-001/002 Β· T2-PrivEsc Esfuerzo: 2d Β· ENS op.acc.1
πŸ”΄
Rate limiting en /auth/login y /reports AVL-001 Β· T4/T5 Esfuerzo: 2h Β· Impacto alto
πŸ”΄
Validacion de esquema Zod (endpoints) VAL-003 Β· T1-SQLi Esfuerzo: 1d Β· defense in depth
⚠️ Fase 2 β€” Alto Q3 2026 (6 sem)
🟠
MFA TOTP obligatorio (speakeasy) AUTH-001 Β· T4-Brute Esfuerzo: 2d Β· GDPR + ENS
🟠
AWS WAF con reglas SQLi/XSS VAL-002 Β· T1-SQLi Esfuerzo: 1d Β· AWS Standard tier
🟠
Tabla audit_events + token blacklist Redis LOG-002/INC-001 Β· T2 Esfuerzo: 2d Β· Detectivo + Correctivo
🟠
Cola Bull/Redis para Puppeteer AVL-002 Β· T5-DoS Esfuerzo: 2d Β· SLA disponibilidad
🟠
CloudWatch Logs Insights — alertas LOG-001/003 Β· T1/T4 Esfuerzo: 1d Β· Deteccion temprana
βœ… Fase 3 β€” Proceso Q4 2026 (10 sem)
🟒
Secure coding workshop (equipo dev) PROC-001 Β· Todas Esfuerzo: 4h Β· SSDLC baseline
🟒
IR Playbook (respuesta a incidentes) PROC-002 Β· Todas Esfuerzo: 1d Β· ENS op.exp.7
🟒
Penetration test externo TEST-001 Β· T1/T2/T4 Presupuesto: ~2.500€ Β· Validacion
🟒
Revision periodica de controles (trimestral) PROC-003 Β· Todas Esfuerzo: 2h/trim Β· Mejora continua
🟒
DPIA formal + DPO externo PROC-004 Β· T3-PHI GDPR Art. 35 Β· Datos de salud
πŸ“Š Reduccion de Riesgo por Amenaza
T1 β€” SQLiScore: 9.2 β†’ 1.5
Actual
9.2
Post-plan
1.5
T2 β€” PrivEscScore: 8.7 β†’ 1.9
Actual
8.7
Post-plan
1.9
T3 β€” PHI/LogsScore: 7.8 β†’ 1.1
Actual
7.8
Post-plan
1.1
T4 β€” BruteForceScore: 6.9 β†’ 1.3
Actual
6.9
Post-plan
1.3
T5 β€” DoS PDFScore: 5.4 β†’ 2.2
Actual
5.4
Post-plan
2.2
πŸ“‹ Cobertura de Cumplimiento Regulatorio
GDPR Articulos aplicables
Art. 32 β€” Seguridad del tratamiento Gap — T3
Art. 25 β€” Privacy by design Parcial
Art. 35 β€” DPIA datos de salud Pendiente
Art. 33 β€” Notificacion de brechas 72h Sin IR plan
ENS Controles Nivel Medio
op.acc.1 β€” Control de acceso Gap — T2
mp.si.1 β€” Gestion de incidentes Sin playbook
op.exp.7 β€” Registro de actividad Parcial
mp.com.1 β€” Cifrado en transito Cumplido