Skip to main content

MLflow EUVDEUVD-2026-60474

| CVE-2026-69148 HIGH
Missing Authorization (CWE-862)
2026-08-17 GitHub_M GHSA-gqch-g4w5-7qcw
7.1
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate to shared MLflow instance
  2. Delivery
    Enumerate or obtain victim's run_id via experiment/run search API
  3. Exploit
    Call POST /api/2.0/mlflow/model-versions/create with victim run_id and source path
  4. Execution
    Path containment check passes, READ permission on run not enforced
  5. Persist
    Model version anchored to victim artifact directory is created
  6. Impact
    Call 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 CreateModelVersion). The MLflow deployment must be running in multi-user authentication mode with per-user permission enforcement active - the confusion only arises when users share a single MLflow instance with isolated permissions. The attacker must also possess or enumerate a run_id or model_id belonging to a victim; MLflow's experiment and run search APIs may expose these identifiers depending on permission configuration. Limiting factors: authentication is mandatory (PR:L - no unauthenticated exploitation path exists); single-user or non-auth-enabled deployments have no cross-user trust boundary to violate; and artifact content is limited to what the referenced run or model actually contains. There is no required non-default configuration beyond multi-user auth being enabled, which is the expected production posture for shared deployments.

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 POST /api/2.0/mlflow/model-versions/create supplying a run_id belonging to a co-tenant (obtained through experiment search or out-of-band knowledge) and a source path pointing into that run's artifact directory. The path containment check passes, the model version is created under the attacker's own registered model, and the attacker then calls GET /model-versions/get-artifact against their own model version to retrieve the victim's trained model weights, datasets, or other logged artifacts without ever holding READ permission on the source run. The full exploit flow is publicly documented in the PR diff at https://github.com/mlflow/mlflow/pull/24293, including working test cases that demonstrate the 403 bypass.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

MLflow < 3.15.0

Affected Packages

npm mlflow fix: 3.15.0

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

Vendor (GitHub_M) PRIMARY 7.1 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N
vuln.today AI 7.1 HIGH

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.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N
Red Hat 7.1 HIGH

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
Low
Availability
None

Lifecycle Timeline

2
Patch available
Aug 17, 2026 - 22:03 EUVD
CVE Published
Aug 17, 2026 - 21:21 cve.org
HIGH 7.1

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 88% exploitable
Prevalence
Medium
widely used in ML/AI teams but not universally enterprise-deployed
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

56
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

More in Mlflow

View all
CVE-2026-64849 CRITICAL POC
9.3 Aug 17

Server-side request forgery in MLflow before 3.15.0 lets remote unauthenticated attackers coerce the server into making

CVE-2024-8859 HIGH POC
7.5 Mar 20

A path traversal vulnerability exists in mlflow/mlflow version 2.15.1. Rated high severity (CVSS 7.5), this vulnerabilit

CVE-2023-3765 CRITICAL POC
10.0 Jul 19

Absolute Path Traversal in GitHub repository mlflow/mlflow prior to 2.5.0. Rated critical severity (CVSS 10.0), this vul

CVE-2026-116692 CRITICAL POC
9.8 Oct 27

Unauthenticated remote code execution in MLflow 3.12.0rc0 through 3.16.x lets any network caller reach the tracking serv

CVE-2026-0545 CRITICAL POC
9.8 Apr 03

MLflow's FastAPI job endpoints bypass basic-auth entirely, allowing network attackers to submit and execute jobs without

CVE-2023-6975 CRITICAL POC
9.8 Dec 20

A malicious user could use this issue to get command execution on the vulnerable machine and get access to data & models

CVE-2023-6974 CRITICAL POC
9.8 Dec 20

A malicious user could use this issue to access internal HTTP(s) servers and in the worst case (ie: aws instance) it cou

CVE-2023-6014 CRITICAL POC
9.8 Nov 16

An attacker is able to arbitrarily create an account in MLflow bypassing any authentication requirment. Rated critical s

CVE-2023-6018 CRITICAL POC
9.8 Nov 16

An attacker can overwrite any file on the server hosting MLflow without any authentication. Rated critical severity (CVS

CVE-2023-2780 CRITICAL POC
9.8 May 17

Path Traversal: '\..\filename' in GitHub repository mlflow/mlflow prior to 2.3.1. Rated critical severity (CVSS 9.8), th

CVE-2023-1177 CRITICAL POC
9.8 Mar 24

Path Traversal: '\..\filename' in GitHub repository mlflow/mlflow prior to 2.2.1. Rated critical severity (CVSS 9.8), th

CVE-2024-27133 CRITICAL POC
9.6 Feb 23

Insufficient sanitization in MLflow leads to XSS when running a recipe that uses an untrusted dataset. Rated critical se

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy