libdbi-perl: Fix CVE-2026-14380

Backport the ordered upstream fix and regression-test chain from DBI
1.650. Add perl-module-load to RDEPENDS to satisfy the runtime
dependency introduced by the primary fix's use of Module::Load.

[1] https://github.com/perl5-dbi/dbi/commit/b73d5d9901767fc1d16b6661ef08fbed4532e259
[2] https://github.com/perl5-dbi/dbi/commit/d982411aec73b3acfc4e9e465358bca9eb7fede8
[3] https://github.com/perl5-dbi/dbi/commit/f94685f415b08ea4b1f183d48430c4583c1c07d0
[4] https://github.com/perl5-dbi/dbi/commit/7949e551b3c7a8854926b6de84f6cc2ceafb2200
[5] https://nvd.nist.gov/vuln/detail/CVE-2026-14380

Signed-off-by: Hetvi Thakar <hthakar@cisco.com>
Signed-off-by: Anuj Mittal <anuj.mittal@oss.qualcomm.com>
This commit is contained in:
Hetvi Thakar
2026-07-29 02:25:53 -07:00
committed by Anuj Mittal
parent 3304a04085
commit dacd50f84e
5 changed files with 190 additions and 0 deletions
@@ -0,0 +1,37 @@
From b588d38661f00361bcf62b2665905ade844866ee Mon Sep 17 00:00:00 2001
From: Robert Rothenberg <perl@rhizomnic.com>
Date: Wed, 1 Jul 2026 22:31:56 +0100
Subject: [PATCH] Load profile packages using Module::Load [CVE-2026-14380]
CVE: CVE-2026-14380
Upstream-Status: Backport [https://github.com/perl5-dbi/dbi/commit/b73d5d9901767fc1d16b6661ef08fbed4532e259]
(cherry picked from commit b73d5d9901767fc1d16b6661ef08fbed4532e259)
Signed-off-by: Hetvi Thakar <hthakar@cisco.com>
---
lib/DBI/Profile.pm | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/lib/DBI/Profile.pm b/lib/DBI/Profile.pm
index f2cc886..4188462 100644
--- a/lib/DBI/Profile.pm
+++ b/lib/DBI/Profile.pm
@@ -679,6 +679,7 @@ use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
use Exporter ();
use UNIVERSAL ();
use Carp;
+use Module::Load ();
use DBI qw(dbi_time dbi_profile dbi_profile_merge_nodes dbi_profile_merge);
@@ -758,7 +759,9 @@ sub _auto_new {
}
}
- eval "require $package" if $package; # silently ignores errors
+ eval {
+ Module::Load::load $package if $package; # silently ignores errors
+ };
$package ||= $class;
return $package->new(Path => \@Path, @args);
@@ -0,0 +1,65 @@
From 54d3e792a236385930e387b28b6c8be779b8d7f7 Mon Sep 17 00:00:00 2001
From: Robert Rothenberg <perl@rhizomnic.com>
Date: Wed, 1 Jul 2026 23:03:34 +0100
Subject: [PATCH] Add tests for CVE-2026-14380
CVE: CVE-2026-14380
Upstream-Status: Backport [https://github.com/perl5-dbi/dbi/commit/d982411aec73b3acfc4e9e465358bca9eb7fede8]
(cherry picked from commit d982411aec73b3acfc4e9e465358bca9eb7fede8)
Signed-off-by: Hetvi Thakar <hthakar@cisco.com>
---
t/40profile.t | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/t/40profile.t b/t/40profile.t
index 7a71b8f..5c72449 100644
--- a/t/40profile.t
+++ b/t/40profile.t
@@ -458,8 +458,46 @@ is("@$totals", "27.00 2.93 0.11 0.01 0.23 1023110000.00 1023110010.00",
'merged time foo/bar');
is($total_time, 2.93, 'merged nodes foo/bar time');
+subtest "CVE-2026-14380" => sub {
+
+ {
+ my $marker = sprintf('dbi-test-payload-%u-%u-%u', time, $$, 1);
+ local $ENV{DBI_PROFILE} = payload_for($marker);
+ my $dbh = eval {
+ DBI->connect("dbi:Sponge:", "", "", { RaiseError => 0 })
+ };
+ ok !( -e "/tmp/$marker" ), "ENV DBI_PROFILE payload";
+ }
+
+ {
+ my $marker = sprintf('dbi-test-payload-%u-%u-%u', time, $$, 1);
+ my $dbh = DBI->connect("dbi:Sponge:", "", "", { RaiseError => 0 });
+ eval {
+ $dbh->{Profile} = payload_for($marker);
+ };
+ ok !( -e "/tmp/$marker" ), "Set Profile payload";
+ }
+
+ {
+ my $marker = sprintf('dbi-test-payload-%u-%u-%u', time, $$, 1);
+ my $payload = payload_for($marker);
+ my $dsn = "dbi:Sponge(Profile=>$payload):";
+ my $dbh = eval {
+ DBI->connect($dsn, "", "", { RaiseError => 0 })
+ };
+ ok !( -e "/tmp/$marker" ), "DSN payload";
+ }
+
+};
+
exit 0;
+sub payload_for {
+ my ($marker) = @_;
+ # Single-quoted q{...} so \x2f is literal backslash-x-2-f for split;
+ # the inner qq(...) re-interprets \x2f = / at eval-time.
+ return qq{2/system(qq(touch \\x2ftmp\\x2f$marker))};
+}
sub sanitize_tree {
my $data = shift;
@@ -0,0 +1,27 @@
From cbd61112415aaa9db84d1af6d0bb3d0f61de8ce0 Mon Sep 17 00:00:00 2001
From: Robert Rothenberg <perl@rhizomnic.com>
Date: Sat, 4 Jul 2026 13:34:20 +0100
Subject: [PATCH] t/40profile.t increase number of tests in the plan
CVE: CVE-2026-14380
Upstream-Status: Backport [https://github.com/perl5-dbi/dbi/commit/f94685f415b08ea4b1f183d48430c4583c1c07d0]
(cherry picked from commit f94685f415b08ea4b1f183d48430c4583c1c07d0)
Signed-off-by: Hetvi Thakar <hthakar@cisco.com>
---
t/40profile.t | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/t/40profile.t b/t/40profile.t
index d736da7..ba24421 100644
--- a/t/40profile.t
+++ b/t/40profile.t
@@ -31,7 +31,7 @@ BEGIN {
if $Config{osvers} =~ /xen/ # eg 2.6.18-4-xen-amd64
and $ENV{AUTOMATED_TESTING};
- plan tests => 60;
+ plan tests => 61;
}
$Data::Dumper::Indent = 1;
@@ -0,0 +1,56 @@
From ef28126fbb8d918307b4995030028984ff8796f5 Mon Sep 17 00:00:00 2001
From: Robert Rothenberg <perl@rhizomnic.com>
Date: Mon, 6 Jul 2026 09:13:26 +0100
Subject: [PATCH] Improve CVE-2026-14380 tests for Profile
CVE: CVE-2026-14380
Upstream-Status: Backport [https://github.com/perl5-dbi/dbi/commit/7949e551b3c7a8854926b6de84f6cc2ceafb2200]
(cherry picked from commit 7949e551b3c7a8854926b6de84f6cc2ceafb2200)
Signed-off-by: Hetvi Thakar <hthakar@cisco.com>
---
t/40profile.t | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/t/40profile.t b/t/40profile.t
index 5c72449..d736da7 100644
--- a/t/40profile.t
+++ b/t/40profile.t
@@ -461,31 +461,34 @@ is($total_time, 2.93, 'merged nodes foo/bar time');
subtest "CVE-2026-14380" => sub {
{
- my $marker = sprintf('dbi-test-payload-%u-%u-%u', time, $$, 1);
+ my $marker = sprintf('dbi-test-payload-%1.6f-%u-%u-%u', $], time, $$, 1);
local $ENV{DBI_PROFILE} = payload_for($marker);
my $dbh = eval {
DBI->connect("dbi:Sponge:", "", "", { RaiseError => 0 })
};
ok !( -e "/tmp/$marker" ), "ENV DBI_PROFILE payload";
+ unlink "/tmp/$marker" if -e "/tmp/$marker";
}
{
- my $marker = sprintf('dbi-test-payload-%u-%u-%u', time, $$, 1);
+ my $marker = sprintf('dbi-test-payload-%1.6f-%u-%u-%u', $], time, $$, 2);
my $dbh = DBI->connect("dbi:Sponge:", "", "", { RaiseError => 0 });
eval {
$dbh->{Profile} = payload_for($marker);
};
ok !( -e "/tmp/$marker" ), "Set Profile payload";
+ unlink "/tmp/$marker" if -e "/tmp/$marker";
}
{
- my $marker = sprintf('dbi-test-payload-%u-%u-%u', time, $$, 1);
+ my $marker = sprintf('dbi-test-payload-%1.6f-%u-%u-%u', $], time, $$, 3);
my $payload = payload_for($marker);
my $dsn = "dbi:Sponge(Profile=>$payload):";
my $dbh = eval {
DBI->connect($dsn, "", "", { RaiseError => 0 })
};
ok !( -e "/tmp/$marker" ), "DSN payload";
+ unlink "/tmp/$marker" if -e "/tmp/$marker";
}
};
@@ -13,6 +13,10 @@ SRC_URI = "http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-${PV}.tar.gz \
file://CVE-2014-10402.patch \
file://CVE-2026-9698.patch \
file://CVE-2026-10879.patch \
file://CVE-2026-14380_p1.patch \
file://CVE-2026-14380_p2.patch \
file://CVE-2026-14380_p3.patch \
file://CVE-2026-14380_p4.patch \
"
SRC_URI[md5sum] = "352f80b1e23769c116082a90905d7398"
SRC_URI[sha256sum] = "8a2b993db560a2c373c174ee976a51027dd780ec766ae17620c20393d2e836fa"
@@ -43,6 +47,7 @@ RDEPENDS:${PN}:class-target = " \
perl-module-exporter-heavy \
perl-module-dynaloader \
perl-module-io-dir \
perl-module-load \
perl-module-scalar-util \
perl-module-universal \
"