Jan 30, 2026·6 min read·35 visits
Sitecore admins copy-pasted 'example' encryption keys from official docs into production. Attackers are using these public keys to forge malicious ViewState payloads, achieving full Remote Code Execution (RCE) as SYSTEM. Active in the wild (UAT-8837).
A critical remote code execution vulnerability in Sitecore products caused by the widespread use of insecure, static ASP.NET machine keys derived from official vendor documentation. Attackers can forge ViewState data to execute arbitrary code without authentication.
We often joke about 'Stack Overflow Driven Development,' but usually, following the official vendor documentation is considered a safe bet. Not this time. CVE-2025-53690 is the cybersecurity equivalent of a vendor telling you to leave your house key under the doormat, and then acting surprised when burglars let themselves in.
This isn't a buffer overflow in a C++ library or a subtle race condition in the kernel. This is a configuration-based zero-day. For years, Sitecore's official deployment guides and documentation provided "sample" ASP.NET machineKey configurations. These XML snippets contained hardcoded cryptographic keys intended for illustration.
Unfortunately, human nature took over. Sysadmins and developers, under pressure to deploy complex environments (XP, XM, XC), simply copy-pasted these blocks directly into their production web.config files. The result? Thousands of enterprise Sitecore instances running on the open internet, all sharing the exact same cryptographic secrets. If you have the keys, you own the castle.
To understand why this is catastrophic, we have to look at the ancient, lumbering beast that is ASP.NET Web Forms. Sitecore relies heavily on this technology. Web Forms uses a mechanism called ViewState to persist the state of UI elements across HTTP requests (since HTTP is stateless).
ViewState is that massive, ugly Base64 string you see in the source code of legacy .NET sites (__VIEWSTATE). Because this data is stored on the client side (the browser), it must be protected from tampering. If a user could modify the ViewState, they could trick the server into thinking they are an admin or inject malicious data.
> [!NOTE]
> The Mechanism: ASP.NET uses the machineKey section in web.config to handle this protection. It uses a validationKey to sign the data (HMAC) and a decryptionKey to encrypt it.
When EnableViewStateMac is enabled (which it is by default), the server checks the signature of the incoming ViewState. If the signature matches, the server deserializes the object. Here is the flaw: If an attacker knows the validationKey and decryptionKey, they can craft their own malicious object, sign it perfectly, and encrypt it. The server will happily accept it, deserialize it, and execute whatever payload is hidden inside.
There is no "vulnerable code" to patch in the traditional sense. The vulnerability is in the configuration file. Below is a reconstruction of the tragedy found in the 2017 Sitecore documentation.
The Vulnerable Configuration (Do Not Use):
<!-- The configuration that launched a thousand shells -->
<system.web>
<machineKey
validationKey="CF1004...[REDACTED_KNOWN_KEY]...890"
decryptionKey="ISOLATED...[REDACTED_KNOWN_KEY]...123"
validation="SHA1"
decryption="AES"
/>
</system.web>Because this key was static and published in a PDF, it is effectively public knowledge. An attacker scanning the internet doesn't need to break into your server to get the key; they just need to check if your server accepts a ViewState signed with the 'Sitecore Default' key.
If the server processes the request without throwing a 'Viewstate MAC failed' error, the attacker knows you are vulnerable. It is a binary check: either you rotated your keys, or you are compromised.
Exploiting this is trivially easy for anyone familiar with .NET deserialization attacks. The attack chain leverages the CWE-502 weakness (Deserialization of Untrusted Data).
The Attack Recipe:
ActivitySurrogateSelector or similar gadgets available in tools like ysoserial.net./sitecore/blocked.aspx page is a popular target because it exists by default and processes ViewState.The server receives the blob, verifies the signature using the hardcoded key (it matches!), and proceeds to deserialize. During deserialization, the malicious object instantiates, and the payload executes in the context of the IIS worker process (w3wp.exe), usually giving the attacker NETWORK SERVICE or SYSTEM privileges.
This isn't theoretical. Mandiant has attributed active exploitation of this flaw to UAT-8837, a China-linked espionage group. They aren't just popping shells; they are moving in.
Once they achieve RCE, they drop a custom malware implant dubbed WEEPSTEEL. This is a sophisticated .NET backdoor designed for Sitecore environments. It allows for:
DWAgent.EarthWorm to pivot into the internal network.GoTokenTheft to steal domain admin credentials.> [!ALERT]
> Forensic Tip: Check your IIS logs for POST requests to /sitecore/blocked.aspx containing unusually large ViewState parameters. Also, look for the creation of local user accounts like asp$ or sawadmin—a hallmark of UAT-8837 persistence.
Patches from Sitecore essentially tell you to do what you should have done in the beginning: Manage your secrets.
Step 1: Key Rotation
You cannot simply "patch" the binary. You must generate new, cryptographically strong, random keys for the validationKey and decryptionKey attributes. Every environment (Dev, QA, Prod) should have unique keys.
Step 2: Configuration Encryption
Even with unique keys, leaving them in plaintext in web.config is risky if an attacker gains Local File Inclusion (LFI). Use the ASP.NET IIS Registration Tool to encrypt the section:
aspnet_regiis.exe -pe "system.web/machineKey" -app "/SitecoreInstanceName"Step 3: Verify Ensure that the old keys are completely removed. If you are running a Sitecore cluster, ensure the new keys are synchronized across all nodes, otherwise, ViewState generated on one server will fail validation on another.
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H| Product | Affected Versions | Fixed Version |
|---|---|---|
Sitecore Experience Platform Sitecore | <= 9.0 | Manual Config Fix |
Sitecore Experience Manager Sitecore | <= 9.0 | Manual Config Fix |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-502 |
| CVSS | 9.0 (Critical) |
| Attack Vector | Network (Remote) |
| Authentication | None |
| Exploit Status | Active Exploitation (KEV) |
| Threat Actor | UAT-8837 (China-linked) |
| Payload | WEEPSTEEL / .NET Deserialization |
The application deserializes untrusted data without sufficiently verifying the resulting data will be valid.
A local security vulnerability in the Nuxt development server (nuxt dev) allows local unprivileged users to access sensitive configuration files and source code. On Linux environments running Node.js 20+, Nuxt bound its internal vite-node IPC server to an abstract-namespace Unix socket without any peer authentication, enabling co-resident local users to connect and request module code directly.
Mozilla Bleach is an open-source HTML sanitizing library for Python. Versions up to and including 6.3.0 contain an incomplete filtering implementation in the URI validation logic ('sanitize_uri_value'). This logic fails to detect disallowed protocols, such as 'javascript:', if they contain Unicode invisible characters, whitespace characters, or characters with a code point greater than U+00A0. While standard-compliant web browsers do not directly execute invalid URI schemes containing these non-standard characters, downstream systems that normalize Unicode text by stripping invisible or non-ASCII characters can unintentionally reactivate the 'javascript:' prefix, causing Cross-Site Scripting (XSS). Additionally, this behavior violates Bleach's core sanitization contract by outputting URIs that bypass protocol allowlists configured by the caller.
An uncontrolled resource consumption vulnerability exists in the Python package Bleach when parsing text to linkify email addresses. When `parse_email=True` is enabled, the regular expression engine is forced into a quadratic-time complexity scan on specially crafted payloads lacking an '@' symbol. This causes immediate CPU exhaustion and blocks application server worker processes.
A path traversal and sandbox escape vulnerability in LangChain and LangChain-Anthropic Python packages allows unauthenticated local attackers to access files outside the restricted directory via crafted input, symbolic links, or prefix bypasses.
The PHP Secure Communications Library (phpseclib) contains a Server-Side Request Forgery (SSRF) vulnerability due to an insecure default implementation of Authority Information Access (AIA) certificate chasing. This flaw allows remote, unauthenticated attackers to coerce applications validating user-supplied X.509 certificates into generating arbitrary outbound HTTP requests to internal networks or local interfaces.
A directory traversal vulnerability exists in the Microsoft .NET System.Formats.Tar library during archive extraction. When extracting a TAR archive using the TarFile.ExtractToDirectory API, the extraction engine improperly resolves symbolic links prior to file creation, allowing local unauthorized attackers to write or overwrite arbitrary files outside the target directory. This can lead to local tampering, privilege escalation, or arbitrary code execution.