CVE-2026-47302
This Vulnerability has been fixed in the Never-Ending Support (NES) version offered by HeroDevs.
Overview
.NET is a free, open-source, cross-platform framework for building modern apps and powerful cloud services. It consists of a runtime and a developer platform made up of tools, programming languages, and libraries for building many different types of applications.
A Denial of Service (DoS) vulnerability (CVE-2026-47302) has been identified in the XML Encryption and XML Signature stack of the System.Security.Cryptography.Xml component, which allows attackers to exhaust CPU and memory on an application that processes attacker-influenced XML. A crafted document can chain an unbounded number of transforms, forcing the library to instantiate and run every one of them during signature verification or decryption.
Per CWE-770: Allocation of Resources Without Limits or Throttling, the product allocates a reusable resource or group of resources on behalf of an actor without imposing any restrictions on the size or number of resources that can be allocated, in violation of the intended security policy for that actor.
This issue affects .NET 6. On .NET 6, System.Security.Cryptography.Xml is not part of the shared framework; it ships as an opt-in NuGet package (https://www.nuget.org/packages/System.Security.Cryptography.Xml), so only applications that add an explicit package reference to it are exposed.
Details
Module Info
- Product: .NET
- Affected packages: System.Security.Cryptography.Xml
- Affected versions: System.Security.Cryptography.Xml >= 6.0.0 < 6.0.2
- GitHub repository: https://github.com/dotnet/runtime
- Published packages: Download .NET (Linux, macOS, and Windows)
- Package manager: NuGet
- Fixed in: NES for .NET 6.0.43
Vulnerability Info
This High-severity vulnerability is found in the System.Security.Cryptography.Xml package as shipped for .NET 6. When the library loads the <Transforms> element of a Reference or CipherReference, TransformChain.LoadXml reads every ds:Transform child and instantiates it. The loop rejects the empty case but places no upper bound on the number of transforms:
XmlNodeList transformNodes = value.SelectNodes("ds:Transform", nsm);
if (transformNodes.Count == 0)
throw new CryptographicException(SR.Cryptography_Xml_InvalidElement, "Transforms");
_transforms.Clear();
for (int i = 0; i < transformNodes.Count; ++i)
{
// ...
transform.LoadInnerXml(transformElement.ChildNodes);
_transforms.Add(transform);
}
Any application that verifies a signature with SignedXml or decrypts a document with EncryptedXml runs this path over attacker-supplied XML. A document carrying a very long transform chain (for example an encoded-DTD amplification payload with dozens of chained transforms) multiplies the work and allocation performed per document, with no privileges or user interaction required, producing an availability impact.
The fixed releases cap the transform-chain length. The bound is configurable through the AppContext switch System.Security.Cryptography.Xml.MaxTransformsPerChain (default 20); setting it to 0 disables the limit for callers that legitimately need longer chains.
This vulnerability has been present since at least .NET 6.0 and likely earlier.
Mitigation
.NET 6 is End-of-Life and will not receive any updates to address this issue. For more information see .NET and .NET Core official support policy.
Users of the affected components should apply one of the following mitigations:
- Upgrade affected applications to one of:
- System.Security.Cryptography.Xml >= 8.0.4
- System.Security.Cryptography.Xml >= 9.0.18
- System.Security.Cryptography.Xml >= 10.0.10
- Leverage a commercial support partner like HeroDevs for post-EOL security support, including NES for .NET 6.0.43 or later.
Credits
Microsoft credits Levi Broderick of Microsoft for reporting this vulnerability.