Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to shared MLflow instance
-
DeliveryEnumerate or obtain victim's run_id via experiment/run search API
-
ExploitCall POST /api/2.0/mlflow/model-versions/create with victim run_id and source path
-
ExecutionPath containment check passes, READ permission on run not enforced
-
PersistModel version anchored to victim artifact directory is created
-
ImpactCall GET /model-versions/get-artifact on own model version to exfiltrate victim artifacts
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a valid authenticated account on the target MLflow server with at least UPDATE/EDIT permission on one registered model (to invoke |
| Impact | The CVSS 3.1 score of 7.1 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N) accurately reflects the real-world risk profile: network-accessible exploitation with low complexity, requiring only a valid authenticated account. The high confidentiality impact is substantiated - an attacker can exfiltrate trained model weights, dataset artifacts, logged metrics files, and any other run artifacts belonging to co-tenants. The low integrity impact reflects the ability to create spurious model versions anchored to another user's artifact path. Scope is unchanged (S:U), containing the blast radius to data within the MLflow instance rather than enabling lateral movement to underlying infrastructure. No EPSS data was provided in available intelligence, but the full exploit technique is now publicly documented via GitHub security advisory GHSA-gqch-g4w5-7qcw and PR #24293, significantly lowering the barrier to exploitation; even a mid-sized ML engineering team operating a shared MLflow deployment in malbork should treat this as an urgent patching priority rather than a deferred item. The CVE is not in the CISA KEV catalog and no independent confirmation of active exploitation exists, but the attack is straightforward for any insider or low-privileged tenant with knowledge of a victim's run ID. |
| Exploit ScenarioDerived | An authenticated MLflow user on a shared multi-tenant instance calls |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 17, 2026
MLflow's CreateModelVersion endpoint prior to version 3.15.0 permits authenticated users to anchor a model version to another user's run or logged-model artifact directory, then retrieve those artifacts through GET /model-versions/get-artifact without holding the required READ permission on the source resource. This confused-deputy pattern arises because _validate_source_run() and _validate_source_model() in mlflow/server/handlers.py enforce only path containment - not cross-user authorization - allowing the registered model's artifact-read gate to be used as a proxy to exfiltrate a victim's ML artifacts. No active exploitation has been confirmed (not in CISA KEV), and the vendor-released fix is available in MLflow 3.15.0 alongside a public security advisory and PR diff that fully document the exploit technique.
RemediationAI
The primary remediation is to upgrade to MLflow 3.15.0, which enforces READ permission on the source run_id or model_id at model version creation time via the new validate_can_create_model_version() authorization function. The patched release is available at https://github.com/mlflow/mlflow/releases/tag/v3.15.0, with the authoritative fix committed at https://github.com/mlflow/mlflow/commit/4bb7474771c3be808cd9e129defef9305f2869be. If immediate upgrade is blocked, operators can deploy a reverse proxy rule that denies POST requests to /api/2.0/mlflow/model-versions/create for all users except those explicitly trusted - though this prevents legitimate model version creation entirely until patching is complete. Alternatively, restricting run_id and model_id discoverability (e.g., limiting experiment search to owners) reduces the attacker's ability to enumerate victim run IDs, but does not eliminate the authorization gap and should not be treated as a sufficient compensating control. Single-user or proxy-authenticated deployments without per-user MLflow permissions have no meaningful cross-user exposure, but upgrade is still recommended.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
MLflow (CPE: cpe:2.3:a:mlflow:mlflow:*:*:*:*:*:*:*:*) is an open-source MLOps platform handling experiment tracking, model registry, and artifact storage for AI/ML workloads. The vulnerability is classified as CWE-862 (Missing Authorization) - a logic-level flaw rather than a memory-safety issue. The CreateModelVersion handler in mlflow/server/handlers.py invokes source validation functions that confirm the provided source path is contained within the artifact directory of the named run_id or model_id (path containment check), but neither function verifies whether the caller holds READ permission on that run or logged model. Because downstream artifact reads via GET /model-versions/get-artifact are gated on the registered model the attacker controls - not on the source run - the attacker can use their own registered model as a proxy to read artifacts from any run or model they can reference by ID. The fix introduced in PR #24293 (commit 4bb7474771c3be808cd9e129defef9305f2869be) adds a new validate_can_create_model_version() function that asserts both UPDATE permission on the target registered model and READ permission on the source run_id or model_id before allowing version creation, closing the confused-deputy path.
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:L/UI:N/S:U/C:H/I:L/A:N
Network-accessible logic flaw requiring a low-privilege authenticated account (PR:L); high confidentiality impact from unrestricted cross-user artifact reads; low integrity from spurious model version creation; no availability impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
MLflow is an open source AI engineering platform for agents, large language models, and machine learning models. Prior to 3.15.0, CreateModelVersion accepts a run_id or model_id after _validate_source_run() or _validate_source_model() in mlflow/server/handlers.py verifies only path containment, allowing authenticated users to create a model version that references another user's artifact directory and read files through GET /model-versions/get-artifact without the required READ permission. This issue is fixed in version 3.15.0.
Executive ViewAI
MLflow versions prior to 3.15.0 allow authenticated users to exfiltrate machine learning models and datasets belonging to other teams through an access control bypass in the model versioning API. This directly threatens organizations' intellectual property and data security, enabling insider theft of proprietary assets by employees with basic MLflow access. Vendor patch version 3.15.0 is available and should be deployed immediately.
Apply vendor patch.
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-60474
GHSA-gqch-g4w5-7qcw
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB