Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Network-reachable ACS, no auth or interaction, and a published cert make it AV:N/AC:L/PR:N/UI:N; full identity impersonation yields C:H/I:H/A:H, though it applies only to SPs accepting EncryptedAssertions.
Primary rating from Vendor (CPANSec).
CVSS VectorVendor: CPANSec
Lifecycle Timeline
5DescriptionCVE.org
Net::SAML2 versions before 0.86 for Perl allow authentication bypass because _verify_encrypted_assertion accepts an EncryptedAssertion whose decrypted content carries no signature.
_verify_encrypted_assertion decrypts the EncryptedAssertion and returns it as verified when it carries no signature, via "return $xml unless $xpath->exists('dsig:Signature', $assert);". The signature check and the trust anchor check that follow run only when a signature is present, so a decrypted assertion with no dsig:Signature element reaches new_from_xml unverified and its NameID and attributes are read into the assertion object. An SP's encryption certificate is published in its SAML metadata so the IdP can encrypt to it, so any party can encrypt an unsigned assertion to that certificate, wrap it in a samlp:Response, and post it to the assertion consumer service.
Any caller that configures a decryption key_file, and so accepts EncryptedAssertions, takes identity fields from an assertion that no trust anchor covers, and an unauthenticated party can authenticate as an arbitrary user. Callers with no key_file configured do not decrypt and are unaffected.
AnalysisAI
Authentication bypass in the Net::SAML2 Perl module before 0.86 lets an unauthenticated attacker log in as any user against Service Providers that accept EncryptedAssertions. The flaw stems from _verify_encrypted_assertion returning a decrypted assertion as 'verified' whenever it contains no dsig:Signature element, skipping both the signature and trust-anchor checks. Because an SP publishes its encryption certificate in SAML metadata, anyone can encrypt a forged unsigned assertion to it, wrap it in a samlp:Response, and post it to the assertion consumer service; no public exploit identified at time of analysis but the logic bug is trivially reproducible.
Technical ContextAI
Net::SAML2 is a Perl SAML 2.0 toolkit (CPAN distribution timlegge/Net::SAML2) used to build SAML Service Providers and Identity Providers. In SAML SSO, an IdP asserts a user's identity via a signed Assertion; when confidentiality is required the assertion is delivered as an EncryptedAssertion encrypted to the SP's published encryption certificate. Integrity and authenticity are supposed to come from an XML Digital Signature (dsig:Signature) that the SP validates against a trusted IdP certificate (trust anchor). The root cause is CWE-347 (Improper Verification of Cryptographic Signature): in Assertion.pm, _verify_encrypted_assertion executes 'return $xml unless $xpath->exists('dsig:Signature', $assert);', meaning that when the decrypted assertion has no signature at all, the code short-circuits and treats it as valid instead of rejecting it. The signature verification and cacert trust-anchor logic are gated behind the presence of a signature, so an unsigned assertion never reaches them and its NameID and attributes are consumed by new_from_xml. The patch (commit d9164685) removes the best-effort anchoring on the first signature reference and instead croaks 'No trusted signature found in the assertion' unless the caller explicitly opts in with insecure_trust_embedded_cert => 1 (documented dev/test only), and adds a guard that dies when no Assertion is present.
RemediationAI
Vendor-released patch: upgrade Net::SAML2 to version 0.86 or later, which rejects assertions lacking a trusted signature (see https://metacpan.org/release/TIMLEGGE/Net-SAML2-0.86/changes and fixing commit https://github.com/perl-net-saml2/perl-Net-SAML2/commit/d916468586404518b8cf3c78dbd001cc1f1046a7.patch). Do not set the new insecure_trust_embedded_cert => 1 flag in production - it re-enables trusting embedded certificates and is documented for dev/test only. If you cannot upgrade immediately, the most effective compensating control is to remove the decryption key_file from the SP configuration so EncryptedAssertions are no longer accepted; the trade-off is that any IdP relying on assertion encryption will break, so coordinate with your IdP to use signed (unencrypted) assertions delivered over TLS in the interim. Additionally, enforce that every accepted assertion is signed at the application layer and validate the IdP signing certificate against a pinned trust anchor before consuming NameID/attributes.
More in Jwt Attack
View allWhy is Microsoft republishing a CVE from 2013? We are republishing CVE-2013-3900 in the Security Update Guide to update
Authentication bypass in SimpleHelp 5.5.15 and prior (plus 6.0 pre-release builds) allows remote unauthenticated attacke
Authentication bypass in Fortinet FortiOS, FortiProxy, and FortiSwitchManager allows unauthenticated remote attackers to
ruby-saml provides security assertion markup language (SAML) single sign-on (SSO) for Ruby. Rated critical severity (CVS
ruby-saml provides security assertion markup language (SAML) single sign-on (SSO) for Ruby. Rated critical severity (CVS
The package jsrsasign before 10.5.25 are vulnerable to Improper Verification of Cryptographic Signature when JWS or JWT
A library injection vulnerability exists in Microsoft Teams (work or school) 24046.2813.2770.1094 for macOS. Rated criti
A library injection vulnerability exists in the WebView.app helper app of Microsoft Teams (work or school) 24046.2813.27
A library injection vulnerability exists in the com.microsoft.teams2.modulehost.app helper app of Microsoft Teams (work
The Ruby SAML library is for implementing the client side of a SAML authorization. Rated critical severity (CVSS 9.8), t
cosign is a container signing and verification utility. Rated critical severity (CVSS 9.8), this vulnerability is remote
Biscuit is an authentication and authorization token for microservices architectures. Rated critical severity (CVSS 9.8)
Same technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-52268
GHSA-g48m-j5m7-625h