Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain a validly signed XML/SAML assertion
-
DeliveryDuplicate its ID on a forged attacker element
-
ExploitSubmit wrapped document to verifier
-
ExecutionXML::Sig validates first node, returns success
-
PersistApplication reads second element by ID
-
ImpactAuthentication bypass / assertion forgery
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Signature verification
|
| Exploitation Conditions | Exploitation requires that the target application uses XML::Sig (before 0.71) to verify a signature whose SignedInfo Reference points to an element by ID, and that some component downstream re-resolves that same ID independently to consume element content - the canonical case being a SAML2 Service Provider that verifies with XML::Sig and then reads the Assertion (the description's 'in a SAML2 context this places the contents of an Assertion under attacker control'). The attacker must be able to supply a crafted document containing two elements sharing the referenced ID value and must possess at least one validly signed element to wrap around (e.g., a captured or replayed signed assertion). Per CVSS AV:N/AC:L/PR:N/UI:N, no authentication or user interaction is needed to submit the document, but exploitation is limited to workflows that verify XML signatures via this library; installations already on 0.71+ are not exploitable, and applications that consume exactly the signed node (rather than re-querying by ID) are not affected in practice. |
| Impact | The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N, score 9.1) indicates a network-reachable, low-complexity, unauthenticated attack - consistent with the description, since an attacker only needs to submit a crafted XML/SAML document to a service that verifies with XML::Sig. There is no EPSS score, no KEV listing, and no explicit POC flag in the provided data, so this is not confirmed as actively exploited; however, the fix commit includes a working test (t/030-reject-duplicate-id.t) that demonstrates the bypass, meaning the exploitation technique is effectively public even if a packaged exploit is not. This is a genuine high priority for anyone using XML::Sig for SAML SSO, because successful exploitation is an authentication/impersonation bypass rather than a mere information leak. Two caveats: the supplied Tags ('Denial Of Service', 'Jwt Attack') look mislabeled - the actual impact is signature-wrapping/authentication bypass, not DoS or JWT - and Scope is scored S:U although the real impact falls on the consuming application (a signature library), so an S:C interpretation is defensible. |
| Exploit ScenarioDerived | An attacker obtains or intercepts a legitimately signed SAML assertion (ID="dup") and appends a second saml:Assertion with the same ID="dup" but attacker-chosen Subject content after the signed element. The Perl SAML SP calls XML::Sig->verify(), which matches the signature against the first (legit) assertion and returns success, while the application's assertion-consumption code reads the second element - logging the attacker in as an arbitrary user. The vendor's regression test t/030-reject-duplicate-id.t demonstrates exactly this wrapping technique end to end. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 03, 2026
Signature verification bypass in the Perl XML::Sig module before 0.71 allows XML Signature Wrapping (XSW) via duplicate ID attributes, letting attackers forge signed content that still validates. verify() resolves a signed Reference URI with the XPath "//*[@ID='$id']" and trusts the first matching node, so a document containing two elements with the same ID passes verification while a downstream consumer reads the attacker-supplied second element; in a SAML2 SP this puts Assertion contents under attacker control. Rated CVSS 9.1 (network, no authentication, no user interaction); no public exploit identified at time of analysis, though the vendor's fix ships a regression test that reproduces the technique.
RemediationAI
Upgrade to XML::Sig 0.71 or later - Vendor-released patch: version 0.71, which changes verify() to call findnodes('//*[@ID=...]') and reject any document where the reference ID matches more than one element (returns 0 when $ref_count > 1), plus zero-match handling; the fix is in commit 4976bde5245df69b8e02c6ae061acbd4891cd7f9 (https://github.com/perl-net-saml2/perl-XML-Sig/commit/4976bde5245df69b8e02c6ae061acbd4891cd7f9.patch) and documented at https://metacpan.org/release/TIMLEGGE/XML-Sig-0.71/source/Changes. If you cannot upgrade immediately, apply the same logic in your integration by rejecting any inbound document whose signed ID resolves to more than one element (schema-validate IDs as unique / enforce a single ID match before trusting content), and ensure your SAML consumer extracts the exact node the signature validated rather than re-resolving the ID independently; the trade-off is added parsing/validation cost and the need to touch calling code. Also constrain which endpoints accept externally supplied signed XML and log verification anomalies. Avoid ad-hoc regex or string handling of the assertion, which will not reliably catch wrapped elements.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
XML::Sig is a Perl library (CPE cpe:2.3:a:timlegge:xml::sig) for creating and verifying W3C XML Digital Signatures (xmldsig), commonly consumed by Net::SAML2 (perl-net-saml2) to validate SAML2 responses and assertions. The root cause maps to CWE-347 (Improper Verification of Cryptographic Signature): _get_signed_xml() in lib/XML/Sig.pm dereferences the SignedInfo Reference/@URI using findvalue('//*[@ID=...]') and returns only the first node of the node set, without asserting that the ID is unique. Because signature checking and application-level ID resolution are performed independently, an attacker can inject a second element bearing the same ID after the legitimately signed one - the digest/signature check succeeds against the first (legit) element while the SAML consumer extracts the second (attacker) element. This is the classic XML Signature Wrapping class described in USENIX Security 2012 'On Breaking SAML' and mirrors CVE-2025-29774 in xml-crypto, both cited in the fix commit.
Know when Xml gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Unauthenticated network submission of a crafted document (PR:N/AV:N/AC:L) bypasses signature checks, enabling assertion forgery and impersonation (I:H) and access as the victim (C:H); no availability impact.
Primary rating from Vendor (CPANSec).
CVSS VectorVendor: CPANSec
Lifecycle Timeline
3DescriptionCVE.org
XML::Sig versions before 0.71 for Perl allow signature wrapping via duplicate ID.
_get_signed_xml() in lib/XML/Sig.pm, called from verify(), resolves the SignedInfo Reference/@URI to a node with the XPath expression "//*[@ID='$id']" and returns the first node of the resulting node set. A document in which two elements share that ID value is accepted: the digest and signature are checked against whichever element comes first in document order, and the duplicate is not detected.
Such a document verifies successfully while an application that resolves the same ID independently can read the second, attacker supplied element; in a SAML2 context this places the contents of an Assertion under attacker control.
Executive ViewAI
The Perl XML::Sig module before version 0.71 contains a critical XML signature verification bypass (CVE-2026-9487, CVSS 9.1) that allows unauthenticated attackers to forge digitally signed XML documents. Organizations using SAML2-based single sign-on systems with this module face direct compromise of user authentication, enabling attackers to impersonate any user and gain unauthorized access to systems and data without valid credentials.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Malformed UTF-16 decoding in libexpat through 2.8.4 lets remote attackers hide XML markup from the parser: a lone high s
XML-Sig versions 0.27 through 0.67 for Perl incorrectly validates XML files if signatures are omitted. Rated critical se
Signature-verification bypass in the Perl XML::Sig module before 0.71 allows remote attackers to forge which document no
Out-of-bounds read in the XML::Bare Perl XML parser (all releases through 0.53) lets a remote attacker crash the parsing
Signature verification bypass in XML::Sig (Perl) versions 0.29 through 0.71 allows remote unauthenticated attackers to s
Out-of-bounds heap read in XML::LibXML for Perl (all versions through 2.0210) allows remote attackers to trigger denial-
Denial of service in the Perl XML::Bare module (versions through 0.53) allows remote attackers to force an infinite loop
EUVD-2026-52270
GHSA-wqp7-2ww4-q6mf
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB