{"id":26835,"date":"2026-09-19T20:32:00","date_gmt":"2026-09-19T12:32:00","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-78030"},"modified":"2026-09-19T20:32:00","modified_gmt":"2026-09-19T12:32:00","slug":"cve-2026-78030","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-78030","title":{"rendered":"CVE-2026-78030 &#8211; DBI versions before 1.653 for Perl load arbitrary modules via unvalidated dbm_type and dbm"},"content":{"rendered":"<p>DBI versions before 1.653 for Perl load arbitrary modules via unvalidated dbm_type and dbm_mldbm attributes in DBD::DBM.<\/p>\n<p>DBD::DBM passes the dbm_type and dbm_mldbm connect attributes to require without checking that the value names a module. require treats a path-shaped string as a literal filename and does not consult @INC, so the attribute chooses the file that Perl loads and runs.<\/p>\n<p>The MLDBM::Serializer:: prefix that DBD::DBM prepends to dbm_mldbm is not a boundary: only the :: separators are rewritten to \/, so a value containing \/ traverses out of the serializer directory. The value is also assigned to $MLDBM::Serializer, which MLDBM requires the same way when it ties the table.<\/p>\n<p>A caller that lets an untrusted party influence either attribute, for example through a DSN fragment or a parameter that selects a storage backend, runs the file-scope code of whatever module the value names.<\/p>\n<p>For example,<\/p>\n<p>    my $dsn = &#8220;dbi:DBM:f_dir=\/var\/db;dbm_type=..\/..\/Untrusted.pm&#8221;<br \/>\n    my $dbh = DBI-&gt;connect( $dsn );<\/p>\n<p>Note that DBD::Gofer forwards connect attributes to the server side, and DBI::ProxyServer checks only that a DSN starts with a driver prefix.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>DBI versions before 1.653 for Perl load arbitrary modules via unvalidated dbm_type and dbm_mldbm attributes in DBD::DBM.<\/p>\n<p>DBD::DBM passes the dbm_type and dbm_mldbm connect attributes to require witho<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-26835","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/26835","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=26835"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=26835"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=26835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}