Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify MLflow server with auth enabled
-
DeliverySend unauthenticated POST to /ajax-api/3.0/jobs/*
-
ExploitBypass FastAPI authentication middleware
-
ExecutionSubmit malicious job or read results
-
PersistInject arbitrary trace data via /v1/traces
-
ImpactCompromise experiment integrity and exfiltrate data
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Primary weakness mitigation
|
| Exploitation Conditions | Requires MLflow server version 3.9.0 or earlier started with --app-name basic-auth flag (authentication explicitly enabled) AND served via uvicorn ASGI server. Network-accessible deployment (typically listening on port 5000 or behind reverse proxy) where FastAPI-routed endpoints are reachable. Default MLflow installations without --app-name basic-auth are not vulnerable as no authentication bypass occurs when authentication is not configured. Flask-only deployments (without FastAPI routes) are not affected. The vulnerability is specific to the architectural combination of enabled authentication plus ASGI/FastAPI serving mode where the _find_fastapi_validator() function exists but returns None for non-gateway routes. |
| Impact | High real-world risk despite absence of EPSS/KEV data. CVSS 8.6 (AV:N/AC:L/PR:N/UI:N) accurately reflects the severity - remote unauthenticated exploitation against network-accessible MLflow deployments with no attack complexity. The vulnerability affects organizations that explicitly enabled authentication (--app-name basic-auth), believing their deployment was secured, creating a false sense of security. Impact includes medium confidentiality breach (reading job results), high integrity compromise (submitting/canceling jobs, injecting trace data into experiments), and low availability impact (job cancellation). The presence of a vendor-released patch (3.10.0) with detailed commit evidence and comprehensive test coverage confirms both the vulnerability's validity and remediability. MLflow's role in ML ops pipelines means this could expose proprietary model training data, experiment parameters, and potentially provide lateral movement opportunities in data science infrastructure. No public exploit code identified but the commit diff provides complete implementation details making weaponization trivial for skilled attackers. |
| Exploit ScenarioDerived | An external attacker scans for MLflow servers on port 5000 (default) and identifies a deployment with authentication enabled via 401 responses on Flask routes. Testing /ajax-api/3.0/jobs/search with a POST request bypasses authentication and returns active ML training jobs. The attacker submits a malicious job via /ajax-api/3.0/jobs/create that exfiltrates model training data to an external endpoint, reads proprietary hyperparameter configurations from existing jobs, cancels a critical production model training pipeline causing operational disruption, and injects false trace data via /v1/traces to pollute experiment tracking and corrupt model provenance records. No authentication credentials required for complete compromise of Job API and telemetry ingestion functions. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – May 15, 2026
Authentication bypass in MLflow 3.9.0 and earlier allows unauthenticated remote attackers to access protected Job API and OpenTelemetry trace ingestion endpoints when the server runs with basic-auth enabled via uvicorn/ASGI. Attackers can submit jobs, read results, cancel operations, and inject trace data without credentials. The FastAPI permission middleware incorrectly enforced authentication only on /gateway/ routes, leaving /ajax-api/3.0/jobs/* and /v1/traces unprotected due to architectural mismatch between Flask and FastAPI authentication mechanisms. Fixed in version 3.10.0 with GitHub commit bb62e77 adding proper validators for all FastAPI routes.
RemediationAI
Upgrade to MLflow version 3.10.0 or later, which adds proper authentication validators for all FastAPI routes via commit bb62e773263c14e9ba4d1a82fe72d0de2442c6aa. The fix implements _get_require_authentication_validator() for Job and Assistant APIs (enforces authentication without additional permission checks) and _get_otel_validator() for trace ingestion (validates X-Mlflow-Experiment-Id header and enforces experiment-level UPDATE permissions). If immediate upgrade is not feasible, implement network-level access controls to restrict /ajax-api/3.0/jobs/*, /ajax-api/3.0/mlflow/assistant/*, and /v1/traces endpoints to trusted internal networks only using firewall rules or reverse proxy URL filtering - note this prevents legitimate remote API usage and breaks distributed ML workflows. Alternatively, deploy MLflow without authentication (--app-name basic-auth disabled) if operating in a trusted network perimeter, accepting the trade-off of no application-layer access control. Audit logs for unauthorized access to affected endpoints between deployment date and patch application, searching for POST/GET requests to /ajax-api/3.0/jobs/* and /v1/traces from unexpected source IPs or without Authorization headers. Review https://github.com/mlflow/mlflow/commit/bb62e773263c14e9ba4d1a82fe72d0de2442c6aa for complete technical details.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in pypi, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
MLflow is a machine learning lifecycle platform that combines Flask (WSGI) and FastAPI (ASGI) frameworks. The vulnerability stems from CWE-305 (Authentication Bypass by Primary Weakness) in the authentication middleware layer. When MLflow server starts with --app-name basic-auth and serves via uvicorn, the _find_fastapi_validator() function was designed to return route-specific authorization validators but only handled /gateway/ prefixed paths. The Job API (/ajax-api/3.0/jobs/*), MLflow Assistant API (/ajax-api/3.0/mlflow/assistant), and OpenTelemetry trace ingestion endpoints (/v1/traces) existed in the FastAPI routing layer but lacked corresponding validators, causing the middleware to skip authentication entirely for these routes. The architectural gap between Flask's authentication model and FastAPI's dependency injection system created this security hole where FastAPI routes inherited no default authentication requirement.
Know when Mlflow gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:L
Primary rating from NVD.
CVSS VectorNVD
Lifecycle Timeline
2DescriptionCVE.org
A vulnerability in mlflow/mlflow versions 3.9.0 and earlier allows unauthenticated access to certain FastAPI routes when the server is started with authentication enabled (--app-name basic-auth) and served via uvicorn (ASGI). The FastAPI permission middleware only enforces authentication on /gateway/ routes, leaving other routes such as the Job API (/ajax-api/3.0/jobs/*) and the OpenTelemetry trace ingestion API (/v1/traces) unprotected. This allows unauthenticated remote attackers to submit jobs, read job results, cancel running jobs, and inject arbitrary trace data into experiments. The issue arises from an architectural mismatch between Flask and FastAPI authentication mechanisms, where the _find_fastapi_validator() function fails to handle non-/gateway/ paths, resulting in a complete authentication bypass. This vulnerability is fixed in version 3.10.0.
Executive ViewAI
MLflow versions 3.9.0 and earlier contain an authentication bypass vulnerability (CVE-2026-2652, CVSS 8.6) that allows unauthenticated attackers to submit jobs, access job results, and inject telemetry data when basic authentication is enabled. Organizations running MLflow as an ML operations platform face direct risk of unauthorized job execution and data manipulation without credential requirements, potentially compromising model training pipelines and observability integrity.
Vendor-released patch: MLflow 3.10.0 or later. If immediate patching is not feasible: disable basic-auth until upgrade is completed and implement network-layer access controls restricting /ajax-api/3.0/jobs/* and /v1/traces endpoints to trusted internal networks only; monitor endpoint access logs for suspicious unauthenticated requests.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Server-side request forgery in MLflow before 3.15.0 lets remote unauthenticated attackers coerce the server into making
A path traversal vulnerability exists in mlflow/mlflow version 2.15.1. Rated high severity (CVSS 7.5), this vulnerabilit
Absolute Path Traversal in GitHub repository mlflow/mlflow prior to 2.5.0. Rated critical severity (CVSS 10.0), this vul
Unauthenticated remote code execution in MLflow 3.12.0rc0 through 3.16.x lets any network caller reach the tracking serv
MLflow's FastAPI job endpoints bypass basic-auth entirely, allowing network attackers to submit and execute jobs without
A malicious user could use this issue to get command execution on the vulnerable machine and get access to data & models
A malicious user could use this issue to access internal HTTP(s) servers and in the worst case (ie: aws instance) it cou
An attacker is able to arbitrarily create an account in MLflow bypassing any authentication requirment. Rated critical s
An attacker can overwrite any file on the server hosting MLflow without any authentication. Rated critical severity (CVS
Path Traversal: '\..\filename' in GitHub repository mlflow/mlflow prior to 2.3.1. Rated critical severity (CVSS 9.8), th
Path Traversal: '\..\filename' in GitHub repository mlflow/mlflow prior to 2.2.1. Rated critical severity (CVSS 9.8), th
Insufficient sanitization in MLflow leads to XSS when running a recipe that uses an untrusted dataset. Rated critical se
EUVD-2026-30499
GHSA-75cm-x2w3-8mgf
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB