{"id":11808,"date":"2026-09-04T18:53:53","date_gmt":"2026-09-04T10:53:53","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80104"},"modified":"2026-09-04T18:53:53","modified_gmt":"2026-09-04T10:53:53","slug":"cve-2026-80104","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80104","title":{"rendered":"CVE-2026-80104 [CRITICAL] &#8211; DB-GPT builds the destination path for an uploaded skill from the multipart filename witho"},"content":{"rendered":"<p>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&#8217;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.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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\/ag<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-11808","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/11808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11808"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11808"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}