{"id":12232,"date":"2026-09-04T18:54:12","date_gmt":"2026-09-04T10:54:12","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-81730"},"modified":"2026-09-04T18:54:12","modified_gmt":"2026-09-04T10:54:12","slug":"cve-2026-81730","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-81730","title":{"rendered":"CVE-2026-81730 [HIGH] &#8211; Dolibarr 9.0.0 through 23.0.4 saves inbound email attachments under the name supplied in t"},"content":{"rendered":"<p>Dolibarr 9.0.0 through 23.0.4 saves inbound email attachments under the name supplied in the message&#8217;s MIME headers without reducing it to a safe basename. The global saveAttachment() in htdocs\/emailcollector\/lib\/emailcollector.lib.php builds $filepath = $path . $filename . &#8216;.&#8217; . $ext and hands it to file_put_contents(), and the private saveAttachment() in htdocs\/emailcollector\/class\/emailcollector.class.php writes to $destdir.&#8217;\/&#8217;.$filename; the name reaches both from the attachment&#8217;s own getName() or getFilename() value by way of the record-join, create-ticket and create-project operations. A traversal sequence in the filename therefore survives intact, so any sender who can email a mailbox that an EmailCollector monitors, which is the module&#8217;s ordinary use for a support or ticket inbox, can place attacker-controlled content outside the per-object attachment directory without holding a Dolibarr account. Under the hardened layout Dolibarr&#8217;s SECURITY.md requires, with htdocs read-only, the write is confined to the documents tree and corrupts or forges other objects&#8217; documents; where htdocs is writable the same primitive reaches a web-executable path. Version 24.0.0 applies dol_sanitizePathName() and dol_sanitizeFileName() before the write.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dolibarr 9.0.0 through 23.0.4 saves inbound email attachments under the name supplied in the message&#8217;s MIME headers without reducing it to a safe basename. The global saveAttachment() in htdocs\/emailc<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-12232","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/12232","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=12232"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=12232"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=12232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}