{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2026-86304", "assignerOrgId": "9b29abf9-4ab0-4765-b253-1875cd9b441e", "state": "PUBLISHED", "assignerShortName": "CPANSec", "dateReserved": "2026-09-06T17:59:12.036Z", "datePublished": "2026-09-06T22:24:19.368Z", "dateUpdated": "2026-09-06T22:24:19.368Z" }, "containers": { "cna": { "affected": [ { "collectionURL": "https://cpan.org/modules", "defaultStatus": "unaffected", "modules": [ "MojoX::Authentication" ], "packageName": "MojoX-Authentication", "packageURL": "pkg:cpan/MojoX-Authentication", "programFiles": [ "lib/MojoX/Authentication/Model/SAML2.pm" ], "programRoutines": [ { "name": "MojoX::Authentication::Model::SAML2::parse_assertion" } ], "versions": [ { "lessThan": "0.006", "status": "affected", "version": "0", "versionType": "custom" } ] } ], "descriptions": [ { "lang": "en", "value": "MojoX::Authentication versions before 0.006 for Perl allow SAML authentication bypass because parse_assertion builds Net::SAML2::Binding::POST without a trust anchor.\n\nparse_assertion in MojoX::Authentication::Model::SAML2 calls Net::SAML2::Binding::POST->new with no cacert, cert_text or anchors argument, then passes the returned XML to Net::SAML2::Protocol::Assertion->new_from_xml with the IdP signing certificate as cacert. In Net::SAML2 before 0.86 that certificate guards only encrypted assertions, so the signature on an unencrypted assertion is checked against the certificate the response itself carries.\n\nAn attacker starts a SAML login, then posts a response signed with a certificate of their own. The audience, InResponseTo and timestamp checks that follow are all satisfiable by the attacker, so the response authenticates any NameID it carries." } ], "impacts": [ { "capecId": "CAPEC-115", "descriptions": [ { "lang": "en", "value": "CAPEC-115 Authentication Bypass" } ] } ], "problemTypes": [ { "descriptions": [ { "cweId": "CWE-347", "description": "CWE-347 Improper Verification of Cryptographic Signature", "lang": "en", "type": "CWE" } ] } ], "providerMetadata": { "orgId": "9b29abf9-4ab0-4765-b253-1875cd9b441e", "shortName": "CPANSec", "dateUpdated": "2026-09-06T22:24:19.368Z" }, "references": [ { "tags": [ "release-notes" ], "url": "https://metacpan.org/release/POLETTIX/MojoX-Authentication-0.006/source/Changes" }, { "url": "https://metacpan.org/release/POLETTIX/MojoX-Authentication-0.004/source/lib/MojoX/Authentication/Model/SAML2.pm#L188" }, { "tags": [ "related" ], "url": "https://www.cve.org/CVERecord?id=CVE-2026-18089" } ], "solutions": [ { "lang": "en", "value": "Upgrade to MojoX-Authentication 0.006 or later." } ], "source": { "discovery": "UNKNOWN" }, "timeline": [ { "lang": "en", "time": "2026-07-31T00:00:00.000Z", "value": "Version 0.006 released with fix." } ], "title": "MojoX::Authentication versions before 0.006 for Perl allow SAML authentication bypass because parse_assertion builds Net::SAML2::Binding::POST without a trust anchor", "workarounds": [ { "lang": "en", "value": "For deployments that cannot upgrade, install Net::SAML2 0.86 or later. SAML login then fails rather than accepting a forged assertion." } ], "x_generator": { "engine": "cpansec-cna-tool 0.1" } } } }