CVE-2023-1176: MLflow: path traversal exposes arbitrary local files

LOW PoC AVAILABLE CISA: TRACK*
Published March 24, 2023
CISO Take

MLflow installations prior to 2.2.2 allow any low-privilege local user to read arbitrary files on the host via absolute path traversal. While CVSS is low (local vector), MLflow servers frequently run in shared data science environments alongside sensitive artifacts—API keys, model weights, and training data secrets are realistic targets. Patch to 2.2.2+ immediately; if patching is blocked, restrict MLflow access to trusted principals only.

What is the risk?

CVSS 3.3 understates operational risk in typical ML environments. The local attack vector assumes shared infrastructure—common in data science teams where multiple users access the same MLflow tracking server. A compromised or malicious data scientist account could leverage this to pivot: reading SSH keys, cloud credentials, or environment files (.env) stored on the MLflow host. No network exposure required, no user interaction needed. Effective risk is MEDIUM in multi-tenant ML environments, LOW in single-user setups.

What systems are affected?

Package Ecosystem Vulnerable Range Patched
MLflow pip No patch
26.6K OpenSSF 5.6 655 dependents Pushed 4d ago 31% patched ~51d to patch Full package profile →

Do you use MLflow? You're affected.

How severe is it?

CVSS 3.1
3.3 / 10
EPSS
0.6%
chance of exploitation in 30 days
Higher than 43% of all CVEs
Exploitation Status
Exploit Available
Exploitation: MEDIUM
Sophistication
Trivial
Exploitation Confidence
medium
CISA SSVC: Public PoC
Public PoC indexed (trickest/cve)
Composite signal derived from CISA KEV, VulnCheck KEV, CISA SSVC, EPSS, Metasploit, Exploit-DB, trickest/cve, Nuclei templates, and inthewild.io exploitation reports.

What is the attack surface?

AV AC PR UI S C I A
AV Local
AC Low
PR Low
UI None
S Unchanged
C Low
I None
A None

What should I do?

5 steps
  1. Patch: Upgrade MLflow to 2.2.2 or later (commit 63ef72aa). This is the only complete fix.

  2. Workaround (if patching blocked): Restrict MLflow server access via OS-level permissions—run MLflow under a dedicated service account and limit which users can invoke it.

  3. Secrets hygiene: Audit the MLflow host for credentials stored in plaintext (env files, config files, ~/.aws, ~/.ssh). Rotate any found.

  4. Detection: Monitor MLflow server logs for artifact paths containing '../' sequences or absolute paths outside expected artifact root directories.

  5. Network isolation: Ensure MLflow tracking server is not internet-exposed; bind to localhost or internal network only.

What does CISA's SSVC say?

Decision Track*
Exploitation poc
Automatable Yes
Technical Impact partial

Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.

How is it classified?

Which compliance frameworks are affected?

This CVE is relevant to:

ISO 42001
A.6.2.6 - Security of AI system assets
NIST AI RMF
GOVERN-1.7 - Processes for AI risk identification and mitigation MANAGE-2.2 - Mechanisms to sustain deployed AI system integrity
OWASP LLM Top 10
LLM06:2025 - Excessive Agency / Insecure Plugin Design

Frequently Asked Questions

What is CVE-2023-1176?

MLflow installations prior to 2.2.2 allow any low-privilege local user to read arbitrary files on the host via absolute path traversal. While CVSS is low (local vector), MLflow servers frequently run in shared data science environments alongside sensitive artifacts—API keys, model weights, and training data secrets are realistic targets. Patch to 2.2.2+ immediately; if patching is blocked, restrict MLflow access to trusted principals only.

Is CVE-2023-1176 actively exploited?

Proof-of-concept exploit code is publicly available for CVE-2023-1176, increasing the risk of exploitation.

How to fix CVE-2023-1176?

1. Patch: Upgrade MLflow to 2.2.2 or later (commit 63ef72aa). This is the only complete fix. 2. Workaround (if patching blocked): Restrict MLflow server access via OS-level permissions—run MLflow under a dedicated service account and limit which users can invoke it. 3. Secrets hygiene: Audit the MLflow host for credentials stored in plaintext (env files, config files, ~/.aws, ~/.ssh). Rotate any found. 4. Detection: Monitor MLflow server logs for artifact paths containing '../' sequences or absolute paths outside expected artifact root directories. 5. Network isolation: Ensure MLflow tracking server is not internet-exposed; bind to localhost or internal network only.

What systems are affected by CVE-2023-1176?

This vulnerability affects the following AI/ML architecture patterns: MLOps platforms, training pipelines, model registries, experiment tracking servers, shared data science infrastructure.

What is the CVSS score for CVE-2023-1176?

CVE-2023-1176 has a CVSS v3.1 base score of 3.3 (LOW). The EPSS exploitation probability is 0.58%.

What is the AI security impact?

Affected AI Architectures

MLOps platformstraining pipelinesmodel registriesexperiment tracking serversshared data science infrastructure

MITRE ATLAS Techniques

AML.T0025 Exfiltration via Cyber Means
AML.T0035 AI Artifact Collection
AML.T0037 Data from Local System
AML.T0049 Exploit Public-Facing Application

Compliance Controls Affected

ISO 42001: A.6.2.6
NIST AI RMF: GOVERN-1.7, MANAGE-2.2
OWASP LLM Top 10: LLM06:2025

What are the technical details?

Original Advisory

Absolute Path Traversal in GitHub repository mlflow/mlflow prior to 2.2.2.

Exploitation Scenario

A data scientist with a standard user account on a shared ML training server submits an MLflow experiment referencing an artifact path of '/etc/shadow' or '/home/mlpipeline/.env'. The pre-2.2.2 server follows the absolute path without sanitization and serves the file contents. The attacker reads cloud provider credentials (AWS_SECRET_ACCESS_KEY, GCP service account JSON) stored in the pipeline environment file, then uses those credentials to exfiltrate the production model registry from S3/GCS—achieving full AI IP theft with no exploitation complexity.

Weaknesses (CWE)

CWE-36 — Absolute Path Traversal: The product uses external input to construct a pathname that should be within a restricted directory, but it does not properly neutralize absolute path sequences such as "/abs/path" that can resolve to a location that is outside of that directory.

  • [Implementation] Assume all input is malicious. Use an "accept known good" input validation strategy, i.e., use a list of acceptable inputs that strictly conform to specifications. Reject any input that does not strictly conform to specifications, or transform it into something that does. When performing input validation, consider all potentially relevant properties, including length, type of input, the full range of acceptable values, missing or extra inputs, syntax, consistency across related fields, and conformance to business rules. As an example of business rule logic, "boat" may be syntactically valid because it only contains alphanumeric characters, but it is not valid if the input is only expected to contain colors such as "red" or "blue." Do not rely exclusively on looking for malicious or malformed inputs. This is likely to miss at least one undesirable input, especially if the code's environment changes. This can give attackers enough room to bypass the intended validation. However, denylis
  • [Implementation] Inputs should be decoded and canonicalized to the application's current internal representation before being validated (CWE-180). Make sure that the application does not decode the same input twice (CWE-174). Such errors could be used to bypass allowlist validation schemes by introducing dangerous inputs after they have been checked.

Source: MITRE CWE corpus.

CVSS Vector

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N

Timeline

Published
March 24, 2023
Last Modified
November 21, 2024
First Seen
March 24, 2023

Related Vulnerabilities