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.