Análisis estático • Rulesets de terceros • SARIF consolidado
AWS_SECRET_ACCESS_KEY)
y usa pydantic-settings con env_file=".env". Añade .env al
.gitignore. Rota las claves inmediatamente en la consola AWS IAM.
food_name del query param HTTP) fluyen sin
sanitizar hasta una consulta SQL construida por concatenación. Detectado con análisis
cross-file de Semgrep Pro: el input entra en routes.py:31 y se usa en
search.py:83. Permite exfiltración completa de la base de datos de pacientes.
db.execute(text("SELECT * FROM foods WHERE name LIKE :q"), {"q": f"%{query}%"}).
Nunca interpoles input de usuario en cadenas SQL.
SECRET_KEY = os.environ["SECRET_KEY"]
(falla al arrancar si no está definida) y genera un secreto de 256 bits:
openssl rand -hex 32. Reduce el TTL a 15-60 minutos.
ipaddress para bloquear rangos privados (10.x, 172.16.x, 192.168.x, 169.254.x).
Considera un proxy dedicado para peticiones externas.
aws_s3_bucket_server_side_encryption_configuration con
SSE-KMS y una CMK dedicada. Añade también aws_s3_bucket_public_access_block
con todos los flags a true.
python:3.11 sin digest pinned (cualquier actualización puede
introducir vulnerabilidades silenciosamente) y ejecuta la aplicación como root
(USER no está definido). Un RCE en la app daría control root sobre el contenedor.
FROM python:3.11.9-slim@sha256:... con digest pinned.
Añade antes del CMD: RUN useradd -m appuser && USER appuser.
passlib[bcrypt] con factor de coste 12:
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto").
| Prioridad | Acción | Impacto | Esfuerzo |
|---|---|---|---|
| 1 | Rotar credenciales AWS y moverlas a Secrets Manager / env vars | Compromiso total de cuenta AWS + datos pacientes | 30 min |
| 2 | Reemplazar consultas SQL dinámicas por parámetros vinculados | Exfiltración completa de base de datos | 2-4 h |
| 3 | Hardcode SECRET_KEY — eliminar fallback inseguro en JWT | Falsificación de tokens de admin / acceso no autorizado | 15 min |
| 4 | Añadir validación de URL y allowlist para import_from_url (SSRF) | Acceso a metadata AWS + red interna | 1-2 h |
| 5 | Cifrar bucket S3 con SSE-KMS (RGPD Art.32) | Incumplimiento RGPD · multa hasta 20M€ | 2-3 h |
| 6 | Migrar hashing de passwords de MD5 a bcrypt (coste 12) | Exposición de passwords en brecha de datos | 3-4 h |
| 7 | Pinnear imágenes Docker con digest SHA256 + usuario no-root | Escalada de privilegios en contenedor comprometido | 1 h |