{"id":"CVE-2025-29774","aliases":["EUVD-2025-7890","GHSA-9p8x-f768-wp2g","ROOT-APP-NPM-CVE-2025-29774"],"status":"published","title":"xml-crypto Vulnerable to XML Signature Verification Bypass via Multiple SignedInfo References","description":"xml-crypto is an XML digital signature and encryption library for Node.js. An attacker may be able to exploit a vulnerability in versions prior to 6.0.1, 3.2.1, and 2.1.6 to bypass authentication or authorization mechanisms in systems that rely on xml-crypto for verifying signed XML documents. The vulnerability allows an attacker to modify a valid signed XML message in a way that still passes signature verification checks. For example, it could be used to alter critical identity or access control attributes, enabling an attacker with a valid account to escalate privileges or impersonate another user. Users of versions 6.0.0 and prior should upgrade to version 6.0.1 to receive a fix. Those who are still using v2.x or v3.x should upgrade to patched versions 2.1.6 or 3.2.1, respectively.","severity":{"version":"4.0","score":9.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","level":"critical","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-10","score":0.09103,"percentile":0.95345,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":true,"fix_available":true},"cwes":["CWE-347"],"published":"2025-03-14T17:05:53Z","modified":"2026-11-06T08:15:03Z","exploits":[{"source":"pocgithub","id":"demining/Digital-Signature-Forgery-Attack","title":"demining/Digital-Signature-Forgery-Attack","date":"2025-07-23","url":"https://github.com/demining/Digital-Signature-Forgery-Attack"},{"source":"pocgithub","id":"demining/Phantom-Signature-Attack","title":"demining/Phantom-Signature-Attack","date":"2026-01-15","url":"https://github.com/demining/Phantom-Signature-Attack"}],"fixes":[{"ecosystem":"npm","package":"xml-crypto","fixed_in":["6.0.1","3.2.1","2.1.6"],"sources":["ghsa","osv"]},{"ecosystem":"Root:npm","package":"xml-crypto","fixed_in":["2.1.5-aikido.1","2.1.3-aikido.1"],"sources":["osv"]},{"ecosystem":"Root:npm","package":"@rootio/xml-crypto","fixed_in":["2.1.5-root.io.1","2.1.3-root.io.1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"npm","package":"xml-crypto","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.0.0"},{"fixed":"6.0.1"}]}]},{"source":"ghsa","ecosystem":"npm","package":"xml-crypto","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"3.0.0"},{"fixed":"3.2.1"}]}]},{"source":"ghsa","ecosystem":"npm","package":"xml-crypto","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.1.6"}]}]},{"source":"osv","ecosystem":"npm","package":"xml-crypto","ranges":[{"type":"SEMVER","events":[{"introduced":"4.0.0"},{"fixed":"6.0.1"}]}]},{"source":"osv","ecosystem":"npm","package":"xml-crypto","ranges":[{"type":"SEMVER","events":[{"introduced":"3.0.0"},{"fixed":"3.2.1"}]}]},{"source":"osv","ecosystem":"npm","package":"xml-crypto","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"2.1.6"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"xml-crypto","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.1.5-aikido.1"},{"fixed":"2.1.3-aikido.1"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"@rootio/xml-crypto","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.1.5-root.io.1"},{"fixed":"2.1.3-root.io.1"}]}]}],"products":[{"vendor":"node-saml","product":"xml-crypto"}],"references":[{"url":"https://github.com/node-saml/xml-crypto/security/advisories/GHSA-9p8x-f768-wp2g","tags":["x_refsource_CONFIRM","advisory","web"]},{"url":"https://github.com/node-saml/xml-crypto/commit/28f92218ecbb8dcbd238afa4efbbd50302aa9aed","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/node-saml/xml-crypto/commit/886dc63a8b4bb5ae1db9f41c7854b171eb83aa98","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/node-saml/xml-crypto/commit/8ac6118ee7978b46aa56b82cbcaa5fca58c93a07","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/node-saml/xml-crypto/releases/tag/v2.1.6","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/node-saml/xml-crypto/releases/tag/v3.2.1","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/node-saml/xml-crypto/releases/tag/v6.0.1","tags":["x_refsource_MISC","web"]},{"url":"https://workos.com/blog/samlstorm","tags":["article","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2025-29774","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-9p8x-f768-wp2g"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2025/29xxx/CVE-2025-29774.json","tags":["advisory"]},{"url":"https://github.com/node-saml/xml-crypto","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2025-29774","title":"xml-crypto Vulnerable to XML Signature Verification Bypass via Multiple SignedInfo References","description":"xml-crypto is an XML digital signature and encryption library for Node.js. An attacker may be able to exploit a vulnerability in versions prior to 6.0.1, 3.2.1, and 2.1.6 to bypass authentication or authorization mechanisms in systems that rely on xml-crypto for verifying signed XML documents. The vulnerability allows an attacker to modify a valid signed XML message in a way that still passes signature verification checks. For example, it could be used to alter critical identity or access control attributes, enabling an attacker with a valid account to escalate privileges or impersonate another user. Users of versions 6.0.0 and prior should upgrade to version 6.0.1 to receive a fix. Those who are still using v2.x or v3.x should upgrade to patched versions 2.1.6 or 3.2.1, respectively.","status":"published","published":"2025-03-14T17:05:53.943Z","modified":"2025-03-15T20:50:21.614Z","cvss":[{"version":"4.0","score":9.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","level":"critical","assessor":"cna"}],"cwes":["CWE-347"],"updated_at":"2026-11-02T14:32:45.797843Z"}],"euvd":[{"id":"EUVD-2025-7890","description":"xml-crypto is an XML digital signature and encryption library for Node.js. An attacker may be able to exploit a vulnerability in versions prior to 6.0.1, 3.2.1, and 2.1.6 to bypass authentication or authorization mechanisms in systems that rely on xml-crypto for verifying signed XML documents. The vulnerability allows an attacker to modify a valid signed XML message in a way that still passes signature verification checks. For example, it could be used to alter critical identity or access control attributes, enabling an attacker with a valid account to escalate privileges or impersonate another user. Users of versions 6.0.0 and prior should upgrade to version 6.0.1 to receive a fix. Those who are still using v2.x or v3.x should upgrade to patched versions 2.1.6 or 3.2.1, respectively.","status":"published","published":"2025-03-14T17:05:53Z","modified":"2025-03-15T20:50:21Z","cvss":[{"version":"4.0","score":9.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","level":"critical"}],"updated_at":"2026-11-02T20:53:02.264374Z"}],"ghsa":[{"id":"GHSA-9p8x-f768-wp2g","title":"xml-crypto Vulnerable to XML Signature Verification Bypass via Multiple SignedInfo References","description":"# Impact\nAn attacker may be able to exploit this vulnerability to bypass authentication or authorization mechanisms in systems that rely on xml-crypto for verifying signed XML documents. The vulnerability allows an attacker to modify a valid signed XML message in a way that still passes signature verification checks. For example, it could be used to alter critical identity or access control attributes, enabling an attacker with a valid account to escalate privileges or impersonate another user.\n\n# Patches\nAll versions \u003c= 6.0.0 are affected. Please upgrade to version 6.0.1.\n\nIf you are still using v2.x or v3.x please upgrade to the associated patch version.\n\n# Indicators of Compromise\n\nWhen logging XML payloads, check for the following indicators. If the payload includes encrypted elements, ensure you analyze the decrypted version for a complete assessment. (If encryption is not used, analyze the original XML document directly). This applies to various XML-based authentication and authorization flows, such as SAML Response payloads.\n\n### Multiple SignedInfo Nodes\nThere should not be more than one SignedInfo node inside a Signature. If you find multiple SignedInfo nodes, it could indicate an attack.\n\n```xml\n\u003cSignature\u003e\n    \u003cSomeNode\u003e\n      \u003cSignedInfo\u003e\n        \u003cReference URI=\"somefakereference\"\u003e\n          \u003cDigestValue\u003eforgeddigestvalue\u003c/DigestValue\u003e\n        \u003c/Reference\u003e\n      \u003c/SignedInfo\u003e\n    \u003c/SomeNode\u003e\n    \u003cSignedInfo\u003e\n        \u003cReference URI=\"realsignedreference\"\u003e\n          \u003cDigestValue\u003erealdigestvalue\u003c/DigestValue\u003e\n        \u003c/Reference\u003e\n      \u003c/SignedInfo\u003e\n    \u003c/SignedInfo\u003e\n\u003c/Signature\u003e\n```\n\n### Code to test\n\nPass in the decrypted version of the document\n```js\ndecryptedDocument = ... // yours to implement\n\n// This check is per-Signature node, not per-document\nconst signedInfoNodes = xpath.select(\".//*[local-name(.)='SignedInfo']\", signatureNode);\n\nif (signedInfoNodes.length === 0) {\n  // Not necessarily a compromise, but invalid. Should contain exactly one SignedInfo node\n  // Yours to implement\n}\n\nif (signedInfoNodes.length \u003e 1) {\n  // Compromise detected, yours to implement\n}\n```","status":"published","published":"2025-03-14T17:14:23Z","modified":"2025-03-16T21:34:48Z","cvss":[{"version":"4.0","score":9.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","level":"critical"}],"cwes":["CWE-347"],"updated_at":"2026-11-02T14:38:34.992855Z"}],"nvd":[{"id":"CVE-2025-29774","description":"xml-crypto is an XML digital signature and encryption library for Node.js. An attacker may be able to exploit a vulnerability in versions prior to 6.0.1, 3.2.1, and 2.1.6 to bypass authentication or authorization mechanisms in systems that rely on xml-crypto for verifying signed XML documents. The vulnerability allows an attacker to modify a valid signed XML message in a way that still passes signature verification checks. For example, it could be used to alter critical identity or access control attributes, enabling an attacker with a valid account to escalate privileges or impersonate another user. Users of versions 6.0.0 and prior should upgrade to version 6.0.1 to receive a fix. Those who are still using v2.x or v3.x should upgrade to patched versions 2.1.6 or 3.2.1, respectively.","status":"published","published":"2025-03-14T17:15:52.87Z","modified":"2026-06-17T09:05:38.92Z","cvss":[{"version":"4.0","score":9.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"critical","assessor":"secondary"}],"cwes":["CWE-347"],"updated_at":"2026-11-02T14:10:53.93104Z"}],"osv":[{"id":"CVE-2025-29774","title":"xml-crypto Vulnerable to XML Signature Verification Bypass via Multiple SignedInfo References","description":"xml-crypto is an XML digital signature and encryption library for Node.js. An attacker may be able to exploit a vulnerability in versions prior to 6.0.1, 3.2.1, and 2.1.6 to bypass authentication or authorization mechanisms in systems that rely on xml-crypto for verifying signed XML documents. The vulnerability allows an attacker to modify a valid signed XML message in a way that still passes signature verification checks. For example, it could be used to alter critical identity or access control attributes, enabling an attacker with a valid account to escalate privileges or impersonate another user. Users of versions 6.0.0 and prior should upgrade to version 6.0.1 to receive a fix. Those who are still using v2.x or v3.x should upgrade to patched versions 2.1.6 or 3.2.1, respectively.","status":"published","published":"2025-03-14T17:05:53.943Z","modified":"2026-10-28T02:30:31.187021408Z","cvss":[{"version":"4.0","score":9.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","level":"critical"}],"cwes":["CWE-347"],"updated_at":"2026-11-02T15:44:47.708311Z"},{"id":"GHSA-9p8x-f768-wp2g","title":"xml-crypto Vulnerable to XML Signature Verification Bypass via Multiple SignedInfo References","description":"# Impact\nAn attacker may be able to exploit this vulnerability to bypass authentication or authorization mechanisms in systems that rely on xml-crypto for verifying signed XML documents. The vulnerability allows an attacker to modify a valid signed XML message in a way that still passes signature verification checks. For example, it could be used to alter critical identity or access control attributes, enabling an attacker with a valid account to escalate privileges or impersonate another user.\n\n# Patches\nAll versions \u003c= 6.0.0 are affected. Please upgrade to version 6.0.1.\n\nIf you are still using v2.x or v3.x please upgrade to the associated patch version.\n\n# Indicators of Compromise\n\nWhen logging XML payloads, check for the following indicators. If the payload includes encrypted elements, ensure you analyze the decrypted version for a complete assessment. (If encryption is not used, analyze the original XML document directly). This applies to various XML-based authentication and authorization flows, such as SAML Response payloads.\n\n### Multiple SignedInfo Nodes\nThere should not be more than one SignedInfo node inside a Signature. If you find multiple SignedInfo nodes, it could indicate an attack.\n\n```xml\n\u003cSignature\u003e\n    \u003cSomeNode\u003e\n      \u003cSignedInfo\u003e\n        \u003cReference URI=\"somefakereference\"\u003e\n          \u003cDigestValue\u003eforgeddigestvalue\u003c/DigestValue\u003e\n        \u003c/Reference\u003e\n      \u003c/SignedInfo\u003e\n    \u003c/SomeNode\u003e\n    \u003cSignedInfo\u003e\n        \u003cReference URI=\"realsignedreference\"\u003e\n          \u003cDigestValue\u003erealdigestvalue\u003c/DigestValue\u003e\n        \u003c/Reference\u003e\n      \u003c/SignedInfo\u003e\n    \u003c/SignedInfo\u003e\n\u003c/Signature\u003e\n```\n\n### Code to test\n\nPass in the decrypted version of the document\n```js\ndecryptedDocument = ... // yours to implement\n\n// This check is per-Signature node, not per-document\nconst signedInfoNodes = xpath.select(\".//*[local-name(.)='SignedInfo']\", signatureNode);\n\nif (signedInfoNodes.length === 0) {\n  // Not necessarily a compromise, but invalid. Should contain exactly one SignedInfo node\n  // Yours to implement\n}\n\nif (signedInfoNodes.length \u003e 1) {\n  // Compromise detected, yours to implement\n}\n```","status":"published","published":"2025-03-14T17:14:23Z","modified":"2026-09-10T03:49:48.483681113Z","cvss":[{"version":"4.0","score":9.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","level":"critical"}],"cwes":["CWE-347"],"updated_at":"2026-11-02T15:46:43.875515Z"},{"id":"ROOT-APP-NPM-CVE-2025-29774","title":"CVE-2025-29774 in xml-crypto - Patched by Root","description":"Root has patched CVE-2025-29774 in the xml-crypto package for Root:npm. Multiple fixed versions available.","status":"published","published":"2026-11-06T07:51:37Z","modified":"2026-11-06T08:15:03.280523811Z","cvss":[{"version":"4.0","score":9.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","level":"critical"}],"updated_at":"2026-11-06T08:36:29.497632Z"}]}}
