CVE-2023-2356: MLflow: path traversal allows unauthenticated file read
HIGH PoC AVAILABLE NUCLEI TEMPLATE CISA: ATTENDAny internet-accessible MLflow tracking server running below 2.3.1 is fully exposed — no credentials required, single HTTP request. Patch immediately to 2.3.1+; if patching is delayed, isolate MLflow behind a VPN or internal network boundary. Audit whether your MLflow instances store cloud credentials, API keys, or model artifacts on the same filesystem.
What is the risk?
Effective risk is HIGH to CRITICAL in practice despite the CVSS 7.5 score. The combination of no authentication, no user interaction, low complexity, and network access makes this trivially weaponizable. MLflow is often deployed with broad filesystem access on servers that also store cloud provider credentials, Hugging Face tokens, and training datasets. Organizations that expose MLflow tracking servers directly (dev shortcuts, misconfigured cloud SGs) face immediate data breach risk.
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| MLflow | pip | — | No patch |
Do you use MLflow? You're affected.
How severe is it?
What is the attack surface?
What should I do?
5 steps-
PATCH
Upgrade MLflow to 2.3.1 or later immediately — this is the only complete fix.
-
NETWORK ISOLATION
If patching is delayed, restrict MLflow access to VPN/internal networks via firewall rules or security groups. Block public internet access.
-
LEAST PRIVILEGE
Run MLflow process with a dedicated service account with minimal filesystem permissions — no access to ~/.aws, ~/.ssh, or application secrets.
-
DETECTION
Search logs for requests containing '../', '%2e%2e', or URL-encoded path traversal sequences against MLflow endpoints. Alert on any request that resolves outside the MLflow artifact root.
-
AUDIT
Enumerate all MLflow deployments in your environment; check if any are publicly accessible via cloud provider asset inventory tools.
What does CISA's SSVC say?
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:
Frequently Asked Questions
What is CVE-2023-2356?
Any internet-accessible MLflow tracking server running below 2.3.1 is fully exposed — no credentials required, single HTTP request. Patch immediately to 2.3.1+; if patching is delayed, isolate MLflow behind a VPN or internal network boundary. Audit whether your MLflow instances store cloud credentials, API keys, or model artifacts on the same filesystem.
Is CVE-2023-2356 actively exploited?
Proof-of-concept exploit code is publicly available for CVE-2023-2356, increasing the risk of exploitation.
How to fix CVE-2023-2356?
1. PATCH: Upgrade MLflow to 2.3.1 or later immediately — this is the only complete fix. 2. NETWORK ISOLATION: If patching is delayed, restrict MLflow access to VPN/internal networks via firewall rules or security groups. Block public internet access. 3. LEAST PRIVILEGE: Run MLflow process with a dedicated service account with minimal filesystem permissions — no access to ~/.aws, ~/.ssh, or application secrets. 4. DETECTION: Search logs for requests containing '../', '%2e%2e', or URL-encoded path traversal sequences against MLflow endpoints. Alert on any request that resolves outside the MLflow artifact root. 5. AUDIT: Enumerate all MLflow deployments in your environment; check if any are publicly accessible via cloud provider asset inventory tools.
What systems are affected by CVE-2023-2356?
This vulnerability affects the following AI/ML architecture patterns: MLOps platforms, model registries, training pipelines, experiment tracking systems, model serving.
What is the CVSS score for CVE-2023-2356?
CVE-2023-2356 has a CVSS v3.1 base score of 7.5 (HIGH). The EPSS exploitation probability is 4.15%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0007 Discover AI Artifacts AML.T0025 Exfiltration via Cyber Means AML.T0035 AI Artifact Collection AML.T0049 Exploit Public-Facing Application AML.T0055 Unsecured Credentials Compliance Controls Affected
What are the technical details?
Original Advisory
Relative Path Traversal in GitHub repository mlflow/mlflow prior to 2.3.1.
Exploitation Scenario
An adversary scanning for exposed MLflow tracking servers (port 5000/5001, or via cloud metadata) identifies an unpatched instance. They craft a GET request to the MLflow artifact API with a relative path traversal payload (e.g., /api/2.0/mlflow/artifacts/get?path=../../.aws/credentials&run_id=<valid_run_id>). With no authentication enforced, the server returns the AWS credentials file. The attacker uses the harvested keys to access S3 buckets containing proprietary model weights, training datasets, or customer data. In a more targeted scenario, the attacker reads the MLflow database connection string or a mounted secrets file to pivot laterally into the ML infrastructure.
Weaknesses (CWE)
CWE-23 — Relative Path Traversal: The product uses external input to construct a pathname that should be within a restricted directory, but it does not properly neutralize sequences such as ".." 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. Use a built-in path canonicalization function (such as realpath() in C) that produces the canonical version of the pathname, which effectively removes ".." sequences and symbolic links (CWE-23, CWE-59). This includes: realpath() in C getCanonicalPath() in Java GetFullPath() in ASP.NET realpath() or abs_path() in Perl realpath() in PHP
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N References
Timeline
Scanner Template Available
A Nuclei vulnerability scanner template exists for this CVE. You can scan your infrastructure for this vulnerability immediately.
View template on GitHubnuclei -t http/cves/2023/CVE-2023-2356.yaml -u https://target.example.com Related Vulnerabilities
CVE-2025-15379 10.0 MLflow: RCE via unsanitized model dependency specs
Same package: mlflow CVE-2023-3765 10.0 MLflow: path traversal allows arbitrary file read
Same package: mlflow CVE-2023-2780 9.8 MLflow: path traversal allows arbitrary file read/write
Same package: mlflow CVE-2026-2635 9.8 mlflow: security flaw enables exploitation
Same package: mlflow CVE-2023-1177 9.8 MLflow: path traversal allows arbitrary file read/write
Same package: mlflow