CVE-2026-18089: Net::SAML2 versions before 0.86 for Perl allow SAML authentication bypass by verifying responses against the response-embedded certificate in verify_xml when no trust anchor is configured
Timothy Legge 03 Aug 2026 12:44 UTC
========================================================================
CVE-2026-18089 CPAN Security Group
========================================================================
CVE ID: CVE-2026-18089
Distribution: Net-SAML2
Versions: before 0.86
MetaCPAN: https://metacpan.org/dist/Net-SAML2
VCS Repo: https://github.com/perl-net-saml2/perl-Net-SAML2
Net::SAML2 versions before 0.86 for Perl allow SAML authentication
bypass by verifying responses against the response-embedded certificate
in verify_xml when no trust anchor is configured
Description
-----------
Net::SAML2 versions before 0.86 for Perl allow SAML authentication
bypass by verifying responses against the response-embedded certificate
in verify_xml when no trust anchor is configured.
verify_xml in Net::SAML2::Role::VerifyXML runs "return if !$anchors &&
!$cacert;" as soon as the XML::Sig check succeeds, and that check uses
the X.509 certificate taken from the response's own
dsig:KeyInfo/dsig:X509Certificate element, so an unanchored response is
checked only against the key it carries. Binding::POST declares cacert
as an optional Maybe[Str] with no default, so a POST binding built
without one takes that path, and _verify_encrypted_assertion returns
early the same way with "return $xml unless $cacert;".
Any caller that constructs Binding::POST or calls
Assertion->new_from_xml without a cacert, cert_text, or anchors
argument accepts a response signed by an attacker generated key whose
self-signed certificate is embedded in that response, authenticating an
arbitrary assertion.
Problem types
-------------
- CWE-347 Improper Verification of Cryptographic Signature
- CWE-295 Improper Certificate Validation
Workarounds
-----------
For deployments that cannot upgrade, construct
Net::SAML2::Binding::POST, and call
Net::SAML2::Protocol::Assertion->new_from_xml, with a cacert,
cert_text, or anchors argument identifying the IdP signing certificate.
Solutions
---------
Upgrade to Net::SAML2 0.86 or later, which requires a cacert or
cert_text trust anchor before a response or assertion signature is
verified.
References
----------
https://metacpan.org/release/TIMLEGGE/Net-SAML2-0.88/source/Changes
https://metacpan.org/release/TIMLEGGE/Net-SAML2-0.85/source/lib/Net/SAML2/Role/VerifyXML.pm#L32
https://metacpan.org/release/TIMLEGGE/Net-SAML2-0.85/source/lib/Net/SAML2/Binding/POST.pm#L21
https://metacpan.org/release/TIMLEGGE/Net-SAML2-0.85/source/lib/Net/SAML2/Protocol/Assertion.pm#L84
Timeline
--------
- 2026-07-31: Version 0.86 released with fix.
- 2026-07-31: Version 0.88 released, re-issuing 0.86 with a corrected
version number.