Skip to main content

MLflow CVE-2026-4137

| EUVDEUVD-2026-30807 HIGH
Creation of Temporary File With Insecure Permissions (CWE-378)
2026-05-18 @huntr_ai GHSA-f2m9-wcf4-cwwx
7.8
CVSS 3.1 · NVD
View

Attack ChainAIDerived

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

  1. Recon
    Obtain local account on shared MLflow/Databricks host
  2. Delivery
    Locate world-writable NFS tmp or pyfunc download dir
  3. Exploit
    Replace cloudpickle artifact with malicious pickle
  4. Install
    Wait for victim to call mlflow.pyfunc.load_model
  5. C2
    cloudpickle.load triggers __reduce__ payload
  6. Execute
    Execute code as victim user
  7. Impact
    Pivot to model registry credentials and data

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V5 - File Handling Temp file with insecure permissions
Exploitation Conditions

Attacker must already have local shell access to a host that shares the MLflow staging filesystem - specifically either the NFS tmp directory created by get_or_create_nfs_tmp_dir() (mode 0o777, exploitable by any local user) or the pyfunc model-downloading tmp directory (mode 0o770, exploitable by any user in the owning group). A second victim process must subsequently load the tampered artifact via cloudpickle.load() (i.e., mlflow.pyfunc.load_model or equivalent) for code execution to fire, so a single-user MLflow install with no other principals on the box is not exploitable. The condition is acutely met in Databricks deployments where NFS is enabled by default and multiple workloads share the mount; it is NOT met by network-only attackers (CVSS AV:L confirms local vector), and it is mitigated where the staging path lives on a per-user filesystem or where MLflow is run by a single dedicated service account with no other local users.

Impact

The CVSS 7.8 vector (AV:L/AC:L/PR:L/UI:N/C:H/I:H/A:H) correctly reflects that exploitation requires a local foothold and low-privileged shell access, not network reach - so this is not an internet-exposed RCE despite the RCE tag. EPSS is 0.01% (0th percentile) and SSVC marks exploitation as 'poc' with Automatable=no and Technical Impact=total, which is internally consistent: total impact when triggered, but tied to specific deployment topologies (shared NFS, multi-tenant Databricks/Spark clusters). The vulnerability is not in CISA KEV and no public exploit is identified at time of analysis, so priority should be high for multi-tenant ML platforms and shared-tenant Databricks workspaces but materially lower for single-tenant or single-user MLflow deployments where no second principal can reach the temp directories.

Exploit ScenarioDerived

A low-privileged user on a shared Databricks cluster or any host mounting the MLflow NFS staging directory waits for or triggers a model download into the world-writable tmp directory, then overwrites the cloudpickle artifact with a malicious pickle whose __reduce__ method invokes a reverse shell or arbitrary command. When a higher-privileged data scientist or service account subsequently calls mlflow.pyfunc.load_model() and cloudpickle.load() deserializes the tampered file, the attacker's payload executes with that victim's identity and access to model registries, credentials, and data. No public PoC is identified at time of analysis, but the SSVC 'poc' rating and the straightforward nature of pickle abuse make weaponization trivial for anyone with local access.

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

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

Alert me

AnalysisAIv3 – Jun 02, 2026

Local privilege escalation to arbitrary code execution in MLflow versions prior to 3.11.0 stems from insecure temporary directory permissions (0o777 and 0o770) created by NFS and model-download helpers. Any local user sharing the filesystem - particularly on Databricks where NFS is enabled by default - can overwrite cloudpickle-serialized model artifacts and gain code execution when another user's process deserializes them via cloudpickle.load(). No public exploit is identified at time of analysis, and the issue is a continuation of CVE-2025-10279 which was only partially fixed.

Earlier versions of this analysis (2)
v2 Jun 02, 2026 - 20:29 cvss changed CVSS 7.8

Local privilege escalation to arbitrary code execution in MLflow versions prior to 3.11.0 stems from temporary directories being created with world-writable (0o777) and group-writable (0o770) permissions on shared filesystems. Local attackers sharing an NFS mount - notably Databricks deployments where NFS is enabled by default - can tamper with cloudpickle-serialized model artifacts and trigger RCE when those artifacts are deserialized. SSVC marks exploitation as POC with total technical impact; no public exploit identified at time of analysis and EPSS is 0.01%.

v1 May 18, 2026 - 21:31 CVSS 7.0

Local privilege-based code execution in MLflow versions prior to 3.11.0 stems from temporary directories being created with overly permissive modes (0o777 and 0o770), letting co-located users overwrite cloudpickle-serialized model artifacts that are later deserialized into arbitrary Python execution. The risk is most acute on shared NFS deployments such as Databricks, where the world-writable tmp directory is reachable by any local account on the host. No public exploit identified at time of analysis, and this issue is explicitly noted as an incomplete-fix follow-up to CVE-2025-10279.

RemediationAI

Vendor-released patch: upgrade to MLflow 3.11.0 or later, which restricts the NFS staging directory and the pyfunc model-downloading temp directory to mode 0o750 (owner rwx, group rx, others none) per commit 1dcbb0c2fbd1f446c328830e601ca13a28219b8a. Where immediate upgrade is not possible, manually run chmod 750 (or stricter, e.g. 700 if Spark UDFs are not in use) against the existing NFS tmp directory and the pyfunc model-downloading tmp directory after MLflow creates them - note that 700 will break Spark UDF workers that run as a different group, while 750 preserves UDF compatibility. As a deployment-level control, dedicate the NFS mount to a single tenant or restrict access to a trusted group via mount options and POSIX ACLs so untrusted local users cannot write into the staging path, and avoid loading models from any directory writable by other principals. Reference the huntr report (https://huntr.com/bounties/648dc30b-76c7-4433-86b8-f43d926fd8d6) and the NVD entry (https://nvd.nist.gov/vuln/detail/CVE-2026-4137) for advisory tracking.

Affected VersionsENISA

mlflow/mlflow unspecified <3.11.0

Affected Packages

pypi mlflow fix: 3.11.0
euvd mlflow_mlflow_unspecified fix: 3.11.0

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 an open-source ML lifecycle platform that stages model artifacts on disk before serving them through pyfunc loaders. The vulnerable helpers get_or_create_nfs_tmp_dir() in mlflow/utils/file_utils.py and _create_model_downloading_tmp_dir() in mlflow/pyfunc/__init__.py explicitly chmod their staging directories to 0o777 (world rwx) and 0o770 (group rwx) respectively so Spark UDF worker processes can read them. This maps to CWE-378 (Creation of Temporary File With Insecure Permissions): because cloudpickle.load() executes arbitrary __reduce__ payloads embedded in a pickle stream, any attacker with write access to the staging directory can substitute a malicious pickle, and the next deserialization by the victim process runs attacker code with the victim's privileges. The upstream fix tightens both paths to 0o750, preserving group read/execute (needed for Spark UDFs) while removing group and world write.

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

NVD PRIMARY 7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Red Hat 7.8 HIGH

Primary rating from NVD.

CVSS VectorNVD

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

Lifecycle Timeline

4
Analysis Updated
Jun 02, 2026 - 20:29 vuln.today
v3 - CVSS changed
Analysis Updated
Jun 02, 2026 - 20:29 vuln.today
v2 - CVSS changed
CVSS changed
Jun 02, 2026 - 20:22 NVD
7.0 (HIGH) 7.8 (HIGH)
Patch available
May 18, 2026 - 21:09 EUVD

DescriptionNVD

In mlflow/mlflow versions prior to 3.11.0, the get_or_create_nfs_tmp_dir() function in mlflow/utils/file_utils.py creates temporary directories with world-writable permissions (0o777), and the _create_model_downloading_tmp_dir() function in mlflow/pyfunc/__init__.py creates directories with group-writable permissions (0o770). These insecure permissions allow local attackers to tamper with model artifacts, such as cloudpickle-serialized Python objects, and achieve arbitrary code execution when the tampered artifacts are deserialized via cloudpickle.load(). This vulnerability is particularly critical in environments with shared NFS mounts, such as Databricks, where NFS is enabled by default. The issue is a continuation of the vulnerability class addressed in CVE-2025-10279, which was only partially fixed.

Executive ViewAI

Why It Matters

MLflow prior to version 3.11.0 allows local users with filesystem access to execute arbitrary code through insecure temporary directory permissions and model artifact deserialization, with particular risk on Databricks deployments where NFS is enabled by default. Any local user can overwrite model artifacts to inject malicious code that executes when other users deserialize them. Organizations using MLflow in multi-user environments face exposure to unauthorized code execution and potential compromise of machine learning pipelines.

Business Impact: High
Compensating Controls

Vendor-released patch: MLflow 3.11.0 or later. Interim mitigations while patching: restrict local filesystem access to MLflow directories to authorized users only; remove world-writable and group-writable permissions from temporary directories; isolate MLflow services to single-user environments where feasible; implement file integrity monitoring on model artifact directories.

Threat Intelligence Overview

EPSS Score
0.0%
Top 100% exploitable
Threat Intel
1
1 source
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub VulDB

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 No
EPSS 0.0%
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
Small
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

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

Attack Technique

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

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