{"id":"CVE-2026-80104","summary":"DB-GPT 0.8.0 Path Traversal Arbitrary File Write via Skill Upload Filename","details":"DB-GPT builds the destination path for an uploaded skill from the multipart filename without constraining it to the upload directory. skill_upload in packages/dbgpt-app/src/dbgpt_app/openapi/api_v1/agentic_data_api.py takes file.filename as given and writes the request body to upload_dir / filename. A path composed with that operator discards the left operand when the right one is absolute and follows parent references otherwise, so a filename such as ../../../tmp/x or /tmp/x resolves outside the intended directory; nothing canonicalises the result, checks that it remains under the upload root, or prevents a .py suffix. The route's only dependency is get_user_from_headers in dbgpt_serve/utils/auth.py, which returns a request carrying the admin role whether or not a user_id header is supplied, so the endpoint is reachable without credentials. A remote attacker holding no account can therefore write attacker-controlled bytes to any path the server process can write, place a new Python module inside the application package or replace one the application already imports, and obtain code execution in the server process when that module is next imported.","modified":"2026-08-27T11:47:49.616152363Z","published":"2026-08-25T20:18:35.843Z","database_specific":{"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/80xxx/CVE-2026-80104.json","cna_assigner":"VulnCheck","cwe_ids":["CWE-22"]},"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/80xxx/CVE-2026-80104.json"},{"type":"ADVISORY","url":"https://github.com/eosphoros-ai/DB-GPT/releases/tag/v0.8.1"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-80104"},{"type":"ADVISORY","url":"https://www.vulncheck.com/advisories/db-gpt-0.8.0-path-traversal-arbitrary-file-write-via-skill-upload-filename"},{"type":"PACKAGE","url":"https://github.com/eosphoros-ai/DB-GPT"},{"type":"PACKAGE","url":"https://pypi.org/project/dbgpt-app/"},{"type":"ARTICLE","url":"https://github.com/eosphoros-ai/DB-GPT/blob/v0.8.0/packages/dbgpt-app/src/dbgpt_app/openapi/api_v1/agentic_data_api.py"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/eosphoros-ai/db-gpt","events":[{"introduced":"a3f21350a97aa713e6223b052984dd5d939233f2"},{"fixed":"177bfc84f77e7f7760c055a748b0e4bb82d9fa47"}],"database_specific":{"source":["AFFECTED_FIELD","REFERENCES"],"extracted_events":[{"introduced":"0.8.0"},{"fixed":"0.8.1"}]}}],"versions":["v0.8.0"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-80104.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V4","score":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N"}]}