GET /api/patients/search?q= no sanitiza parametros; permite exfiltrar toda la BD PostgreSQL.@RequireRole en cada route handlerroles[] en payload y verificar en cada requestaudit_events en PostgreSQLSecurityOps puede leer logs de prodPOST /auth/login no tiene rate limiting ni bloqueo de cuenta tras intentos fallidos.POST /reports/generate corre Puppeteer sincrono; un request malicioso puede agotar la CPU del servidor.| 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 |
/api/admin/*. Gap de diversidad de controles: sin auditoria ni revocacion.requireRole() + tabla audit_events. Estimacion: 1-2 dias dev.pino-redact con lista de campos PII. Estimacion: 4 horas.express-rate-limit + Redis store. Configurar en 2 horas.