Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:L
Primary rating from NVD · only source for this CVE.
CVSS VectorNVD
CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:L
Lifecycle Timeline
4DescriptionCVE.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.
AnalysisAI
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.
Technical ContextAI
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.
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.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
Cross-user flow execution in Langflow (< 1.9.1) lets any authenticated API-key holder run another user's flow by passing
Same weakness CWE-305 – Authentication Bypass by Primary Weakness
View allSame technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-30499
GHSA-75cm-x2w3-8mgf