Description
XML::Sig versions from 0.29 before 0.72 for Perl allow signature verification bypass because verify returns true when every signature was skipped before any cryptographic check.

verify in lib/XML/Sig.pm counts the `//dsig:Signature` elements into `$numsigs` and iterates over them, but two paths reach `next` before any digest or key check runs: a `SignedInfo/Reference/@URI` that resolves to no element while `$numsigs` is greater than 1, and, when `id_attr` is set, a reference that does not match the requested ID. The loop records nothing about what it checked, so when every signature takes one of those paths control reaches the unconditional `return 1` that ends verify. Two `Signature` elements whose Reference URI names an ID that no element carries is enough, as is one such element combined with `id_attr`.

Any caller that passes untrusted XML to verify can receive a true return for a document in which no digest and no signature value was checked; a `cert` or `cert_text` trust anchor does not change this, because no key check runs. Versions up to 0.28 use an XML::XPath based verify that has no such skip and are not affected.
Published: 2026-08-03
Score: 7.5 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The vulnerability resides in the XML::Sig Perl module, where the verify function can return a positive result without performing any cryptographic checks. If an attacker supplies XML that contains Signature elements with a Reference URI that resolves to no element (or mismatches the requested ID when id_attr is set), the function skips digest verification entirely and ultimately returns true. The affected module versions are 0.29 through 0.71; versions 0.28 and earlier are unaffected. This weakness (CWE-347) allows an adversary to bypass signature validation, potentially forging authenticated messages or modifying XML documents accepted as valid.

Affected Systems

Affected systems are installations of the Perl module XML::Sig from the author TIMLEGGE, specifically versions 0.29 up to 0.71. Any application that relies on this module to check the authenticity of XML data—such as SAML, WS‑Federation, or custom XML‑based protocols—may process unverified data if the module is in use. Versions up to 0.28 use an XML::XPath based verify that has no such skip and are not affected.

Risk and Exploitability

The risk is high because an attacker who can control the XML input to a victim system can cause it to accept tampered documents as authentic without any cryptographic evidence. EPSS information is not available, and the vulnerability is not listed in the CISA KEV catalog, but the lack of a verification step leaves systems vulnerable to replay or injection attacks. The exploit is a local or remote attack depending on the environment; any service that accepts XML data from a potentially untrusted source is a candidate for exploitation. The CVSS score of 7.5 indicates high severity.

Generated by OpenCVE AI on August 4, 2026 at 10:13 UTC.

Remediation

Vendor Solution

Upgrade to XML::Sig 0.72 or later, which returns false when no reference digest was checked and matched.


OpenCVE Recommended Actions

  • Upgrade XML::Sig to version 0.72 or later, which returns false when no reference digest is verified.
  • If an upgrade is not immediately feasible, restrict the module’s use to trusted XML sources or filter input to strip or reject XML containing unattached Signature elements before calling verify.
  • Audit system code to ensure no calls to XML::Sig::verify are made with untrusted data and consider replacing the module with an alternative that enforces strict signature checking.

Generated by OpenCVE AI on August 4, 2026 at 10:13 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Wed, 05 Aug 2026 10:45:00 +0000

Type Values Removed Values Added
First Time appeared Timlegge
Timlegge xml::sig
Vendors & Products Timlegge
Timlegge xml::sig

Mon, 03 Aug 2026 20:30:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 7.5, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N'}

ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Mon, 03 Aug 2026 15:30:00 +0000

Type Values Removed Values Added
Description XML::Sig versions from 0.29 before 0.72 for Perl allow signature verification bypass because verify returns true when every signature was skipped before any cryptographic check. verify in lib/XML/Sig.pm counts the `//dsig:Signature` elements into `$numsigs` and iterates over them, but two paths reach `next` before any digest or key check runs: a `SignedInfo/Reference/@URI` that resolves to no element while `$numsigs` is greater than 1, and, when `id_attr` is set, a reference that does not match the requested ID. The loop records nothing about what it checked, so when every signature takes one of those paths control reaches the unconditional `return 1` that ends verify. Two `Signature` elements whose Reference URI names an ID that no element carries is enough, as is one such element combined with `id_attr`. Any caller that passes untrusted XML to verify can receive a true return for a document in which no digest and no signature value was checked; a `cert` or `cert_text` trust anchor does not change this, because no key check runs. Versions up to 0.28 use an XML::XPath based verify that has no such skip and are not affected.
Title XML::Sig versions from 0.29 before 0.72 for Perl allow signature verification bypass because verify returns true when every signature was skipped before any cryptographic check
Weaknesses CWE-347
References

cve-icon MITRE

Status: PUBLISHED

Assigner: CPANSec

Published:

Updated: 2026-08-03T20:05:52.443Z

Reserved: 2026-08-02T00:59:21.745Z

Link: CVE-2026-18568

cve-icon Vulnrichment

Updated: 2026-08-03T20:05:38.192Z

cve-icon NVD

Status : Analyzed

Published: 2026-08-03T16:16:28.560

Modified: 2026-08-05T14:58:07.927

Link: CVE-2026-18568

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-05T10:22:15Z

Weaknesses
  • CWE-347

    Improper Verification of Cryptographic Signature