MLflow Tracking Server Unauthenticated Full-Read SSRF via Webhook Delivery
MLflow Tracking Server versions prior to 3.15.0 are vulnerable to an unauthenticated full-read SSRF attack because the webhook delivery mechanism follows unvalidated HTTP redirects, allowing attackers to exfiltrate internal data or interact with local services.
CVE search metadata
CVE search record: CVE-2026-64849. Severity: critical. CVSS: 9.3. KEV: no. Product: MLflow Tracking Server, MLflow (< 3.15.0). Brief: MLflow Tracking Server Unauthenticated Full-Read SSRF via Webhook Delivery. Brief link: https://feed.craftedsignal.io/briefs/2026-08-mlflow-ssrf/
What's new
- 1. added coverage for MLflow (< 3.15.0) Aug 18, 00:46 via ghsa
MLflow Tracking Server (v3.13.0 and earlier) contains an SSRF vulnerability (CVE-2026-64849) in its webhook delivery mechanism. While the application implements a validation function (_validate_webhook_url) intended to restrict connections to public IP addresses, the implementation fails to pin the resolved IP address, and the HTTP client follows redirects without re-validating the final destination. An unauthenticated attacker can create a webhook pointing to a controlled HTTPS endpoint that issues a 302 redirect to internal network resources, such as the AWS Instance Metadata Service (169.254.169.254) or loopback addresses. Because the synchronous /api/2.0/mlflow/webhooks/{id}/test endpoint reflects the response status and body back to the caller, this allows for unauthenticated full-read exfiltration of sensitive internal data or blind POST interactions with management interfaces on the local network.
Attack Chain
- Attacker identifies an internet-facing MLflow Tracking Server instance running with a default configuration (e.g., SQLite backend) lacking authentication plugins.
- Attacker prepares a malicious HTTPS-enabled server that returns a 302 HTTP redirect to an internal target (e.g., http://169.254.169.254/latest/meta-data/iam/security-credentials/).
- Attacker submits a POST request to
/api/2.0/mlflow/webhookswith theurlparameter pointing to the malicious attacker-controlled HTTPS endpoint. - MLflow validates the initial URL; since the attacker's endpoint is a valid public HTTPS URL, the
_validate_webhook_urlcheck passes. - Attacker triggers the SSRF by sending a request to the
/api/2.0/mlflow/webhooks/{id}/testendpoint. - The MLflow server executes the webhook, follows the 302 redirect to the internal target without re-validation, and fetches the sensitive internal resource.
- The server receives the internal response (e.g., cloud credentials) and reflects the full response body back to the attacker in the HTTP response of the
/testrequest.
Impact
Successful exploitation allows unauthenticated attackers to exfiltrate sensitive cloud metadata (e.g., IAM role credentials), query internal-only services, or perform host scanning from the perspective of the MLflow server. Furthermore, by using 307 or 308 redirects, attackers can perform blind POST operations against internal management interfaces like Docker daemons or Spring Boot Actuator endpoints, potentially leading to remote code execution or service disruption within the internal network.
Recommendation
Prioritize the following actions to secure your MLflow environment:
- Upgrade MLflow to version 3.15.0 or later immediately to patch CVE-2026-64849.
- Enable MLflow authentication plugins to ensure that the webhook API is not accessible to unauthenticated users.
- Implement network segmentation to isolate MLflow servers from sensitive cloud metadata endpoints (IMDSv1) and internal management interfaces.
- Deploy the suggested webserver-level rules to detect potential SSRF attempts directed at common internal paths.
Immediate actions
Upgrade MLflow to 3.15.0 or later across all tracking server instances.
Detection coverage 1
Detects CVE-2026-64849 Exploitation - SSRF Attempt via MLflow /test endpoint
criticalDetects attempts to access internal metadata services or local ports via the MLflow webhook /test endpoint.
Detection queries are available on the platform. Get full rules →