CVE-2026-2652
PoC moderateAuthentication Bypass in MLflow FastAPI Job and Trace APIs (CVE-2026-2652)
MLflow 3.9.0 and earlier, when launched with authentication enabled (--app-name basic-auth) and served via uvicorn (ASGI), fails to enforce authentication on most FastAPI routes because the permission middleware (_find_fastapi_validator()) only covers /gateway/ paths (CWE-305). An unauthenticated remote attacker can therefore submit jobs, read job results, and cancel running jobs through the Job API (/ajax-api/3.0/jobs/*), and can inject arbitrary OpenTelemetry trace data into experiments via /v1/traces. Only deployments that run MLflow with basic-auth enabled over an ASGI (uvicorn) server are affected; servers using the default Flask serving path or running without authentication enabled are not impacted by this bypass. The flaw is fixed in MLflow 3.10.0. No confirmed in-the-wild exploitation is known at this time, but a public proof-of-concept exists and EPSS assigns a ~21% probability of exploitation within 30 days (97th percentile).
What to do: Upgrade to MLflow 3.10.0 or later. In the interim, identify any tracking servers launched with --app-name basic-auth behind uvicorn (ASGI) and restrict network access to /ajax-api/3.0/jobs/* and /v1/traces — for example via an authenticating reverse proxy or firewall rules. Also review job history and experiment traces for signs of unauthenticated job submissions or injected traces.
| lfprojects mlflow | 3.9.0 and earlier (affects servers started with --app-name basic-auth and served via uvicorn/ASGI); fixed in 3.10.0 |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
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.
- Vendors
- lfprojects
- Products
- mlflow
- Weakness
- CWE-305
- Vector
- CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:L
In the news0 stories
No ingested article mentions this CVE yet.