CVE-2026-64849: MLflow: Unauthenticated full-read SSRF in webhook delivery: _validate_webhook_url bypassed via unvalidated HTTP redirects (and DNS rebinding)
(updated )
The default MLflow Tracking Server (mlflow server, no authentication, default SQLite backend) exposes the model-registry webhooks API unauthenticated, including a synchronous POST /api/2.0/mlflow/webhooks/{id}/test endpoint that returns the upstream response status and body to the caller. The SSRF guard added in PR #20747 (_validate_webhook_url, shipped in 3.10.0) resolves the webhook hostname and rejects non-public IPs, but it is bypassable: delivery follows HTTP redirects (no allow_redirects=False) and never pins the validated IP. An attacker hosts a public HTTPS endpoint that passes the guard and returns 302 Location: http://169.254.169.254/... (or http://127.0.0.1:...); MLflow follows it and never re-validates the redirect target. Because /test reflects the response body, this is an unauthenticated full-read SSRF on a default server.
References
- github.com/advisories/GHSA-7gwp-5pfp-969j
- github.com/mlflow/mlflow
- github.com/mlflow/mlflow/commit/ba949522477cbd5915aa55d29b0cfad7d5ddf939
- github.com/mlflow/mlflow/issues/24179
- github.com/mlflow/mlflow/pull/24258
- github.com/mlflow/mlflow/releases/tag/v3.15.0
- github.com/mlflow/mlflow/security/advisories/GHSA-7gwp-5pfp-969j
- github.com/pypa/advisory-database/tree/main/vulns/mlflow/PYSEC-2026-3687.yaml
- nvd.nist.gov/vuln/detail/CVE-2026-64849
- pypi.org/project/mlflow
- www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-64849
Code Behaviors & Features
Detect and mitigate CVE-2026-64849 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Dependency Scanning using SBOM also detects vulnerabilities from proprietary advisories that this site does not include. Learn more about Dependency Scanning using SBOM →