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
Share

Severity by source

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

Primary rating from NVD · only source for this CVE.

CVSS VectorNVD

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

7
Analysis Updated
Jun 02, 2026 - 20:29 vuln.today
v3 (cvss_changed)
Analysis Updated
Jun 02, 2026 - 20:29 vuln.today
v2 (cvss_changed)
Re-analysis Queued
Jun 02, 2026 - 20:22 vuln.today
cvss_changed
CVSS changed
Jun 02, 2026 - 20:22 NVD
7.0 (HIGH) 7.8 (HIGH)
Source Code Evidence Fetched
May 18, 2026 - 21:31 vuln.today
Analysis Generated
May 18, 2026 - 21:31 vuln.today
Patch available
May 18, 2026 - 21:09 EUVD

DescriptionCVE.org

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.

AnalysisAI

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.

Technical ContextAI

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.

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.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

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

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2026-55255 HIGH POC
8.4 Jun 19

Cross-user flow execution in Langflow (< 1.9.1) lets any authenticated API-key holder run another user's flow by passing

Share

CVE-2026-4137 vulnerability details – vuln.today

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