Skip to content

Commit e989144

Browse files
authored
Merge pull request #64 from timlegge/nosigs
Fixes #63: An unsigned XML should fail verification
2 parents 6fb7c5f + 74ea948 commit e989144

File tree

5 files changed

+45
-3
lines changed

5 files changed

+45
-3
lines changed

Changes

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@ Revision history for XML-Sig
22

33
{{$NEXT}}
44

5+
[Notable Changes since 0.67]
6+
- Fixed (CVE-2025-40934) issue where unsigned xml verified as true (thanks @gttds)
7+
8+
[Change Log]
9+
- 420d8c4 Fixes #63: An unsigned XML should fail verification
10+
511
0.67 -- Fri Nov 07 18:25:52 AST 2025
612

713
[Notable Changes since 0.65]

Makefile.PL

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ my %WriteMakefileArgs = (
4747
"Test::Lib" => 0,
4848
"Test::More" => 0
4949
},
50-
"VERSION" => "0.67",
50+
"VERSION" => "0.68",
5151
"test" => {
5252
"TESTS" => "t/*.t"
5353
}

README

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ NAME
33
Signatures
44

55
VERSION
6-
version 0.67
6+
version 0.68
77

88
SYNOPSIS
99
my $xml = '<foo ID="abc">123</foo>';

lib/XML/Sig.pm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,7 @@ sub verify {
500500
my $numsigs = $signature_nodeset->size();
501501
print ("NodeSet Size: $numsigs\n") if $DEBUG;
502502

503+
die 'XML::Sig - XML does not include any signatures' if $numsigs <= 0;
503504
# Loop through each Signature in the document checking each
504505
my $i;
505506
while (my $signature_node = $signature_nodeset->shift()) {
@@ -669,7 +670,7 @@ sub verify {
669670
return 0 unless ($refdigest eq _trim(encode_base64($digest, '')));
670671

671672
print ( "Signature $i Valid\n") if $DEBUG;
672-
}
673+
}
673674

674675
return 1;
675676
}

t/027_no_signatures_should_fail.t

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
use strict;
2+
use warnings;
3+
use Test::More;
4+
use Test::Exception;
5+
6+
use XML::Sig;
7+
8+
my $cert_text = '-----BEGIN CERTIFICATE-----
9+
MIIC4jCCAcoCCQC33wnybT5QZDANBgkqhkiG9w0BAQsFADAyMQswCQYDVQQGEwJV
10+
SzEPMA0GA1UECgwGQm94eUhRMRIwEAYDVQQDDAlNb2NrIFNBTUwwIBcNMjIwMjI4
11+
MjE0NjM4WhgPMzAyMTA3MDEyMTQ2MzhaMDIxCzAJBgNVBAYTAlVLMQ8wDQYDVQQK
12+
DAZCb3h5SFExEjAQBgNVBAMMCU1vY2sgU0FNTDCCASIwDQYJKoZIhvcNAQEBBQAD
13+
ggEPADCCAQoCggEBALGfYettMsct1T6tVUwTudNJH5Pnb9GGnkXi9Zw/e6x45DD0
14+
RuRONbFlJ2T4RjAE/uG+AjXxXQ8o2SZfb9+GgmCHuTJFNgHoZ1nFVXCmb/Hg8Hpd
15+
4vOAGXndixaReOiq3EH5XvpMjMkJ3+8+9VYMzMZOjkgQtAqO36eAFFfNKX7dTj3V
16+
pwLkvz6/KFCq8OAwY+AUi4eZm5J57D31GzjHwfjH9WTeX0MyndmnNB1qV75qQR3b
17+
2/W5sGHRv+9AarggJkF+ptUkXoLtVA51wcfYm6hILptpde5FQC8RWY1YrswBWAEZ
18+
NfyrR4JeSweElNHg4NVOs4TwGjOPwWGqzTfgTlECAwEAATANBgkqhkiG9w0BAQsF
19+
AAOCAQEAAYRlYflSXAWoZpFfwNiCQVE5d9zZ0DPzNdWhAybXcTyMf0z5mDf6FWBW
20+
5Gyoi9u3EMEDnzLcJNkwJAAc39Apa4I2/tml+Jy29dk8bTyX6m93ngmCgdLh5Za4
21+
khuU3AM3L63g7VexCuO7kwkjh/+LqdcIXsVGO6XDfu2QOs1Xpe9zIzLpwm/RNYeX
22+
UjbSj5ce/jekpAw7qyVVL4xOyh8AtUW1ek3wIw1MJvEgEPt0d16oshWJpoS1OT8L
23+
r/22SvYEo3EmSGdTVGgk3x3s+A0qWAqTcyjr7Q4s/GKYRFfomGwz0TZ4Iw1ZN99M
24+
m0eo2USlSRTVl7QHRTuiuSThHpLKQQ==
25+
-----END CERTIFICATE-----';
26+
27+
my $xml = '<foo ID="abc">123</foo>';
28+
my $signer = XML::Sig->new({
29+
cert_text => $cert_text,
30+
});
31+
32+
# verify a signature
33+
dies_ok( sub { $signer->verify($xml); }, "No Signatures found die properly.");
34+
35+
done_testing();

0 commit comments

Comments
 (0)