Skip to content
Heist/ feed
Back to feed
Critical

XML::Sig versions before 0.71 for Perl allow XPath injection in ID lookup

Type: advisorySources: OSV

XML::Sig versions before 0.71 for Perl allow XPath injection in ID lookup. verify() and _get_signed_xml() in lib/XML/Sig.pm build XPath expressions by concatenating the SignedInfo/Reference/@URI value read from the document being verified. The value is neither escaped nor checked against the NCName grammar that XML requires of an ID, so a URI containing a single quote closes the string literal in the generated expression and appends arbitrary XPath operators. A crafted URI can make the lookup match elements the reference does not name, or every element in the document, so which node is selected for digest verification is decided by the injected expression rather than by the reference.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-9390
Confirmed fixed CVEs
Not specified
Updated in this feed
7 Nov 2026, 13:36 UTC · Revision 1

Source evidence

XML::Sig versions before 0.71 for Perl allow XPath injection in ID lookup

core-osv · Original source

Published 3 Aug 2026, 13:09 UTC

XML::Sig versions before 0.71 for Perl allow XPath injection in ID lookup. verify() and _get_signed_xml() in lib/XML/Sig.pm build XPath expressions by concatenating the SignedInfo/Reference/@URI value read from the document being verified. The value is neither escaped nor checked against the NCName grammar that XML requires of an ID, so a URI containing a single quote closes the string literal in the generated expression and appends arbitrary XPath operators. A crafted URI can make the lookup match elements the reference does not name, or every element in the document, so which node is selected for digest verification is decided by the injected expression rather than by the reference.

osv:CVE-2026-9390
Complete source record
{
  "id": "20aa960afe9cb73380e536c9a784a71fb27c768ca1c209e5b0ad93af0cf7670e",
  "url": "https://osv.dev/vulnerability/CVE-2026-9390",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "XML::Sig versions before 0.71 for Perl allow XPath injection in ID lookup",
    "summary": "XML::Sig versions before 0.71 for Perl allow XPath injection in ID lookup. verify() and _get_signed_xml() in lib/XML/Sig.pm build XPath expressions by concatenating the SignedInfo/Reference/@URI value read from the document being verified. The value is neither escaped nor checked against the NCName grammar that XML requires of an ID, so a URI containing a single quote closes the string literal in the generated expression and appends arbitrary XPath operators. A crafted URI can make the lookup match elements the reference does not name, or every element in the document, so which node is selected for digest verification is decided by the injected expression rather than by the reference.",
    "evidence": "osv:CVE-2026-9390",
    "products": [],
    "severity": "critical",
    "structured": {
      "id": "CVE-2026-9390",
      "aliases": [
        "CVE-2026-9390"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/perl-net-saml2/perl-xml-sig",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "7ac376f7377495e38b97e5a83c29b41c8f718b8a"
                },
                {
                  "fixed": "69ad2b421118fadd33d57f50b110b8d161e8fef5"
                },
                {
                  "fixed": "a85aad21aa767ac1c158bbfc19447683941ab376"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "cpe": "cpe:2.3:a:xml\\:\\:sig_project:xml\\:\\:sig:*:*:*:*:*:perl:*:*",
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "0.71"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "range": [
                      {
                        "fixed": "69ad2b421118fadd33d57f50b110b8d161e8fef5"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "a85aad21aa767ac1c158bbfc19447683941ab376"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  }
                ]
              }
            }
          ],
          "versions": [
            "0.70",
            "0.69",
            "0.68",
            "0.67",
            "0.66",
            "0.65",
            "0.64",
            "0.63",
            "0.62",
            "0.61",
            "0.60",
            "0.59",
            "0.58",
            "0.57",
            "0.56",
            "0.55",
            "0.54",
            "0.53",
            "0.52",
            "0.51",
            "0.50",
            "0.49",
            "0.48-TRIAL",
            "0.47",
            "0.46-TRIAL",
            "0.45",
            "0.44-TRIAL",
            "0.43",
            "0.42-TRIAL",
            "0.41-TRIAL",
            "v0.40-TRIAL",
            "0.40-TRIAL",
            "0.39",
            "0.38",
            "0.37-TRIAL",
            "0.36",
            "0.35-TRIAL",
            "0.33",
            "0.32",
            "0.31-TRIAL",
            "0.30-TRIAL",
            "0.23",
            "0.22",
            "0.21",
            "0.2.1",
            "0.2",
            "0.1"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-9390.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:50.761087470Z",
      "provider": "osv",
      "references": [
        "https://cpan.org/modules",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/9xxx/CVE-2026-9390.json",
        "https://metacpan.org/release/TIMLEGGE/XML-Sig-0.71/changes",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-9390",
        "https://github.com/perl-net-saml2/perl-XML-Sig/commit/69ad2b421118fadd33d57f50b110b8d161e8fef5.patch",
        "https://github.com/perl-net-saml2/perl-XML-Sig/commit/a85aad21aa767ac1c158bbfc19447683941ab376.patch",
        "https://github.com/perl-net-saml2/perl-XML-Sig"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-1287",
          "CWE-643"
        ],
        "cna_assigner": "CPANSec",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/9xxx/CVE-2026-9390.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-9390",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 519480,
  "published_at": "2026-08-03T13:09:40.158+00:00"
}