Skip to main content

XML::Sig CVE-2026-9487

| EUVDEUVD-2026-52270 CRITICAL
Improper Verification of Cryptographic Signature (CWE-347)
2026-08-03 CPANSec GHSA-wqp7-2ww4-q6mf
9.1
CVSS 3.1 · Vendor: CPANSec
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain a validly signed XML/SAML assertion
  2. Delivery
    Duplicate its ID on a forged attacker element
  3. Exploit
    Submit wrapped document to verifier
  4. Execution
    XML::Sig validates first node, returns success
  5. Persist
    Application reads second element by ID
  6. Impact
    Authentication 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.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

XML::Sig 0 <0.71

Affected Packages

euvd xml_sig fix: 0.71

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

Vendor (CPANSec) PRIMARY 9.1 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
vuln.today AI 9.1 CRITICAL

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (CPANSec).

CVSS VectorVendor: CPANSec

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
None

Lifecycle Timeline

3
CVSS changed
Aug 03, 2026 - 20:22 NVD
9.1 (CRITICAL)
CVE Published
Aug 03, 2026 - 13:14 cve.org
UNKNOWN (no severity yet)
CVE Published
Aug 03, 2026 - 13:14 cve.org
CRITICAL 9.1

DescriptionCVE.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

Why It Matters

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.

Business Impact: Severe
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 94% exploitable
Prevalence
Low
niche Perl xmldsig/SAML library, mainly Net::SAML2 deployments
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

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.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Out-of-Cycle
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
Very High
Technical Impact
Total

Priority Score

46
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +46
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy