Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconObtain local account on shared MLflow/Databricks host
-
DeliveryLocate world-writable NFS tmp or pyfunc download dir
-
ExploitReplace cloudpickle artifact with malicious pickle
-
InstallWait for victim to call mlflow.pyfunc.load_model
-
C2cloudpickle.load triggers __reduce__ payload
-
ExecuteExecute code as victim user
-
ImpactPivot 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv3 – 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)
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%.
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
Affected Packages
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
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Primary rating from NVD.
CVSS VectorNVD
Lifecycle Timeline
4DescriptionNVD
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
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.
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
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
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
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-30807
GHSA-f2m9-wcf4-cwwx
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB