2
Críticos (SAST)
Secreto expuesto + Inyección de comandos
5
CVEs High/Critical
Django · cryptography · lodash · pillow · axios
20
Controles fallidos
SOC 2 · GDPR · PCI-DSS · HIPAA
4
Archivos escaneados
Python · JSX · YAML · JSON
Hallazgos SAST — Código Fuente
3 hallazgos
CRÍTICO
Secreto Hardcodeado
app/api/patients.py · línea 11
Stripe Secret Key expuesta directamente en código fuente. Visible en cualquier fork o pull del repositorio.
STRIPE_SECRET_KEY = "sk_live_51ABC123def456GHI789jkl"
Migrar a variables de entorno o AWS Secrets Manager. Revocar key inmediatamente.
CRÍTICO
Inyección de Comandos
app/api/patients.py · línea 30
subprocess.run con shell=True y entrada de usuario no sanitizada. Permite ejecución arbitraria de comandos del sistema.
result = subprocess.run(cmd, shell=True, capture_output=True)
Pasar argumentos como lista: subprocess.run(["python", "export.py", "--patient", patient_id])
ALTO
Cross-Site Scripting (XSS)
app/frontend/PatientCard.jsx · línea 9
dangerouslySetInnerHTML con notas clínicas no sanitizadas. Paciente malicioso puede inyectar scripts que roban sesiones de médicos.
<div dangerouslySetInnerHTML={{ __html: notes }} />
Usar DOMPurify.sanitize(notes) antes de renderizar. Validar en servidor.
CVEs en Dependencias
6 CVEs · Riesgo 47.6
| CVE | Paquete | Versión | Fix | CVSS | Eco |
|---|---|---|---|---|---|
| CVE-2023-38325 | cryptography | 3.4.7 | 41.0.4 | 7.5 | pypi |
| CVE-2023-46695 | django | 3.2.0 | 4.2.8 | 7.5 | pypi |
| CVE-2023-44271 | pillow | 9.0.0 | 10.0.1 | 7.5 | pypi |
| CVE-2021-23337 | lodash | 4.17.20 | 4.17.21 | 7.2 | npm |
| CVE-2023-45857 | axios | 0.21.1 | 1.6.0 | 6.5 | npm |
| CVE-2023-32681 | requests | 2.27.0 | 2.31.0 | 6.1 | pypi |
Cumplimiento Normativo
2.9% — Brechas críticas
SOC 2 Type II
1 pass
9 fail
8%
GDPR Art. 25/32
0 pass
5 fail
0%
PCI-DSS v4.0
0 pass
4 fail
0%
HIPAA Security Rule
1 pass
2 fail
33%
Controles críticos fallidos
✗
SOC2-CC6.2 · PCI-Req8 · HIPAA-164.312(d)
Autenticación fuerte (MFA)
Implementar 2FA/MFA + bcrypt/argon2 para contraseñas
✗
SOC2-CC7.1 · GDPR-Art.33 · PCI-Req10
Audit Logging
Logging estructurado de eventos de autenticación y acceso a PHI
✗
SOC2-CC3.1 · PCI-Req11
Escaneo automatizado en CI/CD
Configurar Snyk + CodeQL + Dependabot en GitHub Actions
✗
GDPR-Art.25 · PCI-Req3/4
Cifrado en reposo y tránsito
TLS 1.3 obligatorio · cifrado de PHI en base de datos
✓
SOC2-CC6.5 · HIPAA-164.312(a)(2)(i)
bcrypt para hashing de passwords
Correcto — bcrypt 3.2.0 detectado en requirements.txt
OWASP Top 10 — Quick Check
7 fallos · 2 warn
A01
Broken Access Control
FALLO — Sin RBAC
A02
Cryptographic Failures
FALLO — Secrets expuestos
A03
Injection
FALLO — SQL + CMD
A04
Insecure Design
AVISO — Sin threat model
A05
Security Misconfiguration
FALLO — Headers ausentes
A06
Vulnerable Components
FALLO — 6 CVEs activos
A07
Auth Failures
FALLO — Sin MFA
A08
Software Integrity
AVISO — Sin artifact signing
A09
Logging & Monitoring
FALLO — Sin audit logs
A10
SSRF
OK — No detectado
Plan de Remediación Priorizado
INMEDIATO — hoy mismo
- Revocar STRIPE_SECRET_KEY sk_live_51ABC... en Stripe Dashboard
- Revocar AWS_ACCESS_KEY AKIAIOSFODNN7... en IAM
- Auditar accesos con esas credenciales en los últimos 30 días
- Mover todos los secretos a variables de entorno / AWS Secrets Manager
24 HORAS — antes del próximo deploy
- Corregir subprocess.run → pasar args como lista, shell=False
- Añadir DOMPurify.sanitize() en PatientCard.jsx
- Reemplazar f-strings SQL por consultas parametrizadas (SQLAlchemy ORM)
7 DÍAS — sprint actual
- Actualizar cryptography → 41.0.4, django → 4.2.8, pillow → 10.0.1
- Actualizar lodash → 4.17.21, axios → 1.6.0, requests → 2.31.0
- Configurar Dependabot en GitHub Actions para actualizaciones automáticas
- Implementar security headers con Helmet.js (Express) o equivalente FastAPI
30 DÍAS — sprint siguiente
- Implementar MFA/2FA (TOTP) para todos los usuarios del panel médico
- Audit logging estructurado: auth events, acceso a PHI, cambios de datos
- Crear SECURITY.md + política de divulgación responsable
- Añadir pipeline de seguridad CI/CD: Snyk + CodeQL + gitleaks
90 DÍAS — para certificación
- Cifrado de PHI en reposo (AES-256) + TLS 1.3 en todos los endpoints
- Threat model para flujos críticos (citas, historial, pagos)
CI/CD Security Gate — Estado actual
BLOQUEADO
security_scanner.py --severity high
FAILED
exit 2
vulnerability_assessor.py --severity critical
FAILED
exit 1
compliance_checker.py --framework soc2
FAILED
exit 2
deploy → production
SKIPPED
—
El pipeline falló en los tres gates. Ningún código con hallazgos críticos o altos llega a producción.
Configurar en .github/workflows/security.yml
para bloquear automáticamente merges a main.
Scorecard Ejecutivo
D
Postura de Seguridad
NO
Listo para Enterprise
47.6
Riesgo CVE (0=mejor)
~60d
Est. para SOC 2 ready
Potencial: Con las credenciales revocadas + 3 correcciones de código + actualizaciones de dependencias,
MediConnect puede pasar de riesgo CRÍTICO a riesgo
BAJO en menos de 7 días.
Implementando MFA + audit logs + CI/CD gates, estará en posición de iniciar auditoría SOC 2 en 30 días.