Public mode

No access to your tenant or devices. Every item links to its source. What this means

Some sources, documents or advisories need attention: 272/272 feeds/APIs · 469/469 docs · 8/9 advisories · checked 06:54 UTC Customize Public modeDiscuss ChangeIntel on Discord

Moov signedxml: Unauthenticated denial of service in exclusive XML canonicalization

Collected exploitation and prediction evidence

Risk source coverage

CISA KEV is observed exploitation evidence. FIRST EPSS is a dated prediction of exploitation in the next 30 days. Missing scores are unknown. This collector requests predictions only for explicit CVE aliases in the public NuGet archive; Microsoft release views retain their existing prediction scope.

No collected risk observation for these identifiers. This does not establish absence of exploitation or a zero probability.

cve-program · CVE-2026-113729

Published

Moov signedxml is a pure Go library for processing signed XML documents. Prior to 1.4.1, ExclusiveCanonicalization in exclusivecanonicalization.go copies the complete accumulated namespace map at every nested element before reference digest or signature checks. Attacker-controlled XML containing deeply nested elements with many unused namespace declarations causes quadratic allocation growth with depth and linear growth with prefixes per level, allowing a comparatively small document to consume multiple gigabytes of memory and terminate the process. The condition is reachable through ValidateReferences without a valid signature, matching certificate, or prior authentication, and it does not bypass signature verification. This issue is fixed in version 1.4.1.

Source published
20 Oct 2026 21:17:55 UTC
Source modified
27 Oct 2026 11:07:28 UTC
Observed here
27 Oct 2026 13:09:22 UTC
Source terms
CVE Program Terms of Use

Original source record · Cite this exact observation · Complete original publisher JSON

This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: cve-program · CVE Program Terms of Use. Source text is retained; field grouping and change labels are provided by ChangeIntel.

CVSS 3.1 · 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

euvd · EUVD-2026-105774

Published

Moov signedxml is a pure Go library for processing signed XML documents. Prior to 1.4.1, ExclusiveCanonicalization in exclusivecanonicalization.go copies the complete accumulated namespace map at every nested element before reference digest or signature checks. Attacker-controlled XML containing deeply nested elements with many unused namespace declarations causes quadratic allocation growth with depth and linear growth with prefixes per level, allowing a comparatively small document to consume multiple gigabytes of memory and terminate the process. The condition is reachable through ValidateReferences without a valid signature, matching certificate, or prior authentication, and it does not bypass signature verification. This issue is fixed in version 1.4.1.

EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON.

Original publisher date fields

datePublished: Oct 20, 2026, 9:17:55 PM

dateUpdated: Oct 27, 2026, 11:07:28 AM

Source published
Oct 20, 2026, 9:17:55 PM (timezone not stated)
Source modified
Oct 27, 2026, 11:07:28 AM (timezone not stated)
Observed here
1 Nov 2026 02:13:54 UTC
Source terms
ENISA EUVD · source terms and attribution apply

Original source record · Cite this exact observation · Complete original publisher JSON

This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: euvd · ENISA EUVD · source terms and attribution apply. Source text is retained; field grouping and change labels are provided by ChangeIntel.

EUVD CVSS 3.1 · 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

nvd · CVE-2026-113729

Published

Moov signedxml is a pure Go library for processing signed XML documents. Prior to 1.4.1, ExclusiveCanonicalization in exclusivecanonicalization.go copies the complete accumulated namespace map at every nested element before reference digest or signature checks. Attacker-controlled XML containing deeply nested elements with many unused namespace declarations causes quadratic allocation growth with depth and linear growth with prefixes per level, allowing a comparatively small document to consume multiple gigabytes of memory and terminate the process. The condition is reachable through ValidateReferences without a valid signature, matching certificate, or prior authentication, and it does not bypass signature verification. This issue is fixed in version 1.4.1.

NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON.

Source analysis status: Awaiting Analysis

Weakness classifications: CWE-400 · CWE-407 · CWE-770

Original publisher date fields

published: 2026-10-20T22:19:29.887

lastModified: 2026-10-27T12:17:06.147

Source published
20 Oct 2026 22:19:29 UTC
Source modified
27 Oct 2026 12:17:06 UTC
Observed here
29 Oct 2026 06:48:04 UTC
Source terms
NIST NVD usage terms; underlying source attribution retained

Original source record · Cite this exact observation · Complete original publisher JSON

This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: nvd · NIST NVD usage terms; underlying source attribution retained. Source text is retained; field grouping and change labels are provided by ChangeIntel.

CVSS 3.1 · [email protected] · Secondary · 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

osv · GHSA-5588-rp99-5fjh

Published

Exclusive XML canonicalization (`http://www.w3.org/2001/10/xml-exc-c14n#`) in `github.com/moov-io/signedxml` copied the entire accumulated namespace map at every node during `ValidateReferences()`, before any reference digest or signature check. For a chain of nested elements that each declare many unused namespace prefixes, that produced **O(m × depth²)** time and peak memory (`m` = prefixes per level). `beevik/etree` caps tree depth (~1024), but `m` is unbounded, so a small attacker-controlled document (on the order of 1 MB) could drive multi-gigabyte allocations and OOM the process. No valid signature, matching certificate, or authentication is required. This is the library’s core path for SAML / WS-Federation service providers, which canonicalize attacker-supplied XML prior to authentication. ### Affected - Package: `github.com/moov-io/signedxml` - Function: `ExclusiveCanonicalization` (`exclusivecanonicalization.go`) - Verified: **v1.4.0** and current default branch (commit `d79064a`). Earlier v1.2.x–v1.3.x releases are likely affected. ### Remediation Do not copy the whole namespace map per node. Maintain a single scope and push/pop only the prefixes introduced at each element. Replace linear prefix-in-scope scans with set lookups. Impose a defensive cap on in-scope namespace declarations and return an error rather than allocating unbounded memory. From @shuji-oh ``` Thanks for the fix — I re-ran my PoC against this branch and confirmed the memory blowup is gone. Before (main) -- Doubling depth each time (m=10 fixed): allocated grows ~4x each time ≈ O(depth^2) -- depth=250 m=10 payload= 0.07MB allocated= 45MB depth=500 m=10 payload= 0.14MB allocated= 179MB depth=1000 m=10 payload= 0.27MB allocated= 711MB -- Increasing m (depth=1000 fixed): allocated scales roughly linearly with m -- depth=1000 m=5 payload= 0.16MB allocated= 377MB depth=1000 m=100 payload= 2.57MB allocated= 6278MB After (fix/exc-c14n-namespace-dos) -- Doubling depth each time (m=10 fixed): allocated grows ~4x each time ≈ O(depth^2) -- depth=250 m=10 payload= 0.07MB allocated= 2MB depth=500 m=10 payload= 0.14MB allocated= 4MB depth=1000 m=10 payload= 0.27MB allocated= 7MB -- Increasing m (depth=1000 fixed): allocated scales roughly linearly with m -- depth=1000 m=5 payload= 0.16MB allocated= 4MB depth=1000 m=100 payload= 2.57MB allocated= 47MB That's roughly a 100–130x reduction in peak allocation for the same payload sizes, and no OOM in any of my runs. This looks like it resolves the issue — thanks for the quick fix! ``` ### Credit Reported by Shuji Ohira ([@shuji-oh](https://github.com/shuji-oh)).

Source published
21 Oct 2026 16:27:55 UTC
Source modified
21 Oct 2026 16:45:04 UTC
Observed here
24 Oct 2026 13:19:41 UTC
Source terms
GitHub Advisory Database · CC-BY-4.0

Original source record · Cite this exact observation · Complete original publisher JSON

This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: osv · GitHub Advisory Database · CC-BY-4.0. Source text is retained; field grouping and change labels are provided by ChangeIntel.

CVSS_V3 · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Publisher rating · HIGH

ChangeIntel

An IT change radar: releases, security, known issues, retirements, documentation changes, and service status from public sources. Every item links to supporting evidence; dates and statuses can change after they are read.

Sources read 1 Nov 06:54 UTC · 272 of 272 readable · 269 fully read · documentation 469/469 current