CVE-2026-9487
Full vulnerability record from the local CVENow database.
Description
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.
View original CVE JSON
{
"id": "CVE-2026-9487",
"sourceIdentifier": "9b29abf9-4ab0-4765-b253-1875cd9b441e",
"published": "2026-08-03T14:16:31.110",
"lastModified": "2026-10-23T21:10:00.157",
"vulnStatus": "Analyzed",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "XML::Sig versions before 0.71 for Perl allow signature wrapping via duplicate ID.\n\n_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.\n\nSuch 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."
},
{
"lang": "es",
"value": "Las versiones de XML::Sig anteriores a la 0.71 para Perl permiten la envoltura de firma a través de un ID duplicado.\n\n_get_signed_xml() en lib/XML/Sig.pm, llamado desde verify(), resuelve el SignedInfo Reference/@URI a un nodo con la expresión XPath ’//*[@ID=’$id’]’ y devuelve el primer nodo del conjunto de nodos resultante. Se acepta un documento en el que dos elementos comparten ese valor de ID: el resumen y la firma se verifican contra el elemento que aparece primero en el orden del documento, y no se detecta el duplicado.\n\nDicho documento se verifica con éxito mientras que una aplicación que resuelve el mismo ID de forma independiente puede leer el segundo elemento, el suministrado por el atacante; en un contexto SAML2, esto coloca el contenido de una ’Assertion’ bajo el control del atacante."
}
],
"affected": [
{
"source": "9b29abf9-4ab0-4765-b253-1875cd9b441e",
"affectedData": [
{
"vendor": "TIMLEGGE",
"product": "XML::Sig",
"defaultStatus": "unaffected",
"collectionURL": "https://cpan.org/modules",
"packageName": "XML-Sig",
"programFiles": [
"lib/XML/Sig.pm"
],
"programRoutines": [
{
"name": "XML::Sig::verify"
},
{
"name": "XML::Sig::_get_signed_xml"
}
],
"repo": "https://github.com/perl-net-saml2/perl-XML-Sig",
"versions": [
{
"version": "0",
"lessThan": "0.71",
"versionType": "custom",
"status": "affected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV31": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"type": "Secondary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N",
"baseScore": 9.1,
"baseSeverity": "CRITICAL",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"availabilityImpact": "NONE"
},
"exploitabilityScore": 3.9,
"impactScore": 5.2
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-08-03T19:59:25.051641Z",
"id": "CVE-2026-9487",
"options": [
{
"exploitation": "none"
},
{
"automatable": "yes"
},
{
"technicalImpact": "total"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "9b29abf9-4ab0-4765-b253-1875cd9b441e",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-347"
}
]
}
],
"configurations": [
{
"nodes": [
{
"operator": "OR",
"negate": false,
"cpeMatch": [
{
"vulnerable": true,
"criteria": "cpe:2.3:a:xml\\:\\:sig_project:xml\\:\\:sig:*:*:*:*:*:perl:*:*",
"versionEndExcluding": "0.71",
"matchCriteriaId": "FC1BDEFE-0662-4F7C-9641-A32B9CF06366"
}
]
}
]
}
],
"references": [
{
"url": "https://github.com/perl-net-saml2/perl-XML-Sig/commit/4976bde5245df69b8e02c6ae061acbd4891cd7f9.patch",
"source": "9b29abf9-4ab0-4765-b253-1875cd9b441e",
"tags": [
"Patch"
]
},
{
"url": "https://metacpan.org/release/TIMLEGGE/XML-Sig-0.71/source/Changes",
"source": "9b29abf9-4ab0-4765-b253-1875cd9b441e",
"tags": [
"Release Notes"
]
}
]
}