Introducción
Equipos de DevOps y SRE que deployan MLflow para gestionar ciclos de vida de modelos de ML enfrentan un riesgo activo: actores maliciosos están explotando la vulnerabilidad CVE-2026-64849, un bypass de SSRF (Server-Side Request Forgery) que permite acceder a endpoints internos, metadatos de cloud (como AWS IMDS) y credenciales IAM sin autenticación. CISA agregó el fallo a su catálogo de vulnerabilidades explotadas en el wild y exige a agencias federales de EE.UU. mitigar el riesgo en dos semanas.
Qué ocurrió
El 15 de enero de 2025, el equipo de seguridad de MLflow publicó un advisory describiendo una vulnerabilidad crítica en el mecanismo de entrega de webhooks de su Tracking Server. El problema reside en el endpoint /api/2.0/mlflow/webhooks/{id}/test, accesible sin autenticación en la configuración default (servidor con backend SQLite). Un atacante no autenticado puede enviar una request a este endpoint para forzar que el servidor MLflow realice peticiones HTTP a arbitrarios endpoints internos o de metadatos de cloud, leyendo las respuestas (incluyendo credenciales y datos sensibles).
La firmas de seguridad watchTowr reportó que, dentro de las 24 horas de asignarse el CVE, actores comenzaron a escanear internet en busca de instancias MLflow expuestas. Se confirmaron exploitations para exfiltrar credenciales de cloud, especialmente en entornos AWS.
Impacto para DevOps / Infraestructura / Cloud / Seguridad
El impacto es severo para entornos cloud y on-premises:
- Robo de credenciales cloud: En AWS, un atacante puede acceder al Instance Metadata Service (IMDS) para robar credenciales temporales de IAM (via http://169.254.169.254/latest/meta-data/iam/security-credentials/), permitiendo escalada de privilegios en la account.
- Acceso a servicios internos: La vulnerabilidad permite escanear puertos internos (ej: http://localhost:25017 para Docker) o interactuar con APIs de admin (ej: Kubernetes, databases, CI/CD systems).
- Exfiltración de datos: Se pueden leer respuestas de endpoints internos, como configuraciones de aplicaciones, secrets en variables de entorno o datos de usuarios.
- CVE score: 9.1 (Critical) según NVD, con Low attack complexity y High privileges (requiere solo acceso a la red).
CISA estima que miles de organizaciones (incluyendo agencias gubernamentales) usan MLflow con configuraciones vulnerables. El riesgo es especialmente alto en entornos donde el Tracking Server está expuesto a internet o en redes internas sin segmentación estricta.
Detalles técnicos
- CVE: CVE-2026-64849
- Componentes afectados: MLflow Tracking Server (versiones < 3.15.0).
- Vector de ataque:
1. El atacante envía una request POST a /api/2.0/mlflow/webhooks/{id}/test con un url apuntando a un endpoint interno o de cloud metadata (ej: http://169.254.169.254/latest/meta-data/).
2. El servidor MLflow realiza la request y devuelve la respuesta (incluyendo headers y body) al atacante.
3. El atacante extrae información sensible (ej: tokens IAM, credenciales de database, etc.).
- Configuraciones vulnerable por default:
– Servidor iniciado con mlflow server (sin autenticación).
– Backend SQLite (default).
– Webhooks habilitados (default en algunas configuraciones).
- Versión fija: 3.15.0 (release del 15 de enero de 2025).
- Prueba de concepto: watchTowr publicó un PoC público:
curl -X POST http://
-H «Content-Type: application/json» \
-d ‘{«url»: «http://169.254.169.254/latest/meta-data/»}’
Qué deberían hacer los administradores y equipos técnicos
– Upgrade a la versión 3.15.0 o posterior:
pip install –upgrade mlflow>=3.15.0
– Para deployments con Docker:
docker pull mlflow/mlflow:3.15.0
docker stop
– Si no puede parchear inmediatamente:
– Bloquear acceso externo al Tracking Server (ej: firewall, security groups).
– En AWS, restringir el acceso al puertos de MLflow (default: 5000) a IPs de confianza.
– Usar una VPN o private endpoint para acceso remoto.
– Auditar logs de MLflow en busca de requests sospechosas a /api/2.0/mlflow/webhooks/*/test:
grep «/api/2.0/mlflow/webhooks.*test» /var/log/mlflow/mlflow.log
– Rotar credenciales cloud (IAM, database, etc.) si hay evidencia de compromiso.
– Revisar acceso a IMDS en AWS:
aws ec2 describe-instances –query «Reservations[*].Instances[*].InstanceId» –output text | xargs -I {} aws ec2 get-password-data –instance-id {} –query «PasswordData» –output text
– Habilitar autenticación:
mlflow server –backend-store-uri postgresql://user:password@host:5432/database \
–default-authentication-provider basic
– Usar un backend de almacenamiento seguro (PostgreSQL, MySQL) en lugar de SQLite.
– Deshabilitar webhooks si no se usan:
from mlflow.store.db.utils import do_clause_timestmp_where
# Deshabilitar webhooks en la DB (consultar documentación oficial)
– Configurar alertas para requests a endpoints de metadata (ej: 169.254.169.254) en logs de proxy o cloud (ej: AWS CloudTrail, VPC Flow Logs).
Conclusión
CVE-2026-64849 es un fallo crítico que transformó MLflow en un vector de ataque para robo de credenciales cloud y acceso a servicios internos. La combinación de configuraciones inseguras por default, alta adopción en entornos de ML y la simpleza de explotación lo hacen especialmente peligroso. Los equipos deben priorizar el parcheo o el aislamiento de instancias, junto con una revisión de logs y rotación de credenciales. Este caso refuerza la necesidad de aplicar principios de defense in depth en plataformas de ML, especialmente en entornos cloud donde los metadatos son un objetivo frecuente.
Fuentes
- https://www.bleepingcomputer.com/news/security/cisa-warns-of-hackers-exploiting-critical-mlflow-vulnerability/
- https://github.com/mlflow/mlflow/issues/15127
- https://www.cisa.gov/vulnerabilities
