Dell RecoverPoint Appliance Intrusion and Persistence
An adversary is exploiting hardcoded credentials (CVE-2026-22769) to deploy SLAYSTYLE web shells and persistent GRIMBOLT backdoors on Dell RecoverPoint for Virtual Machines appliances.
Based on research by Mandiant 2026-09-20 11 steps · 3 queries T1071 T1133 T1190 T1505.003
Brief
Why this hunt
Recent reporting by the Google Cloud blog titled UNC6201 exploiting a Dell RecoverPoint zero-day (https://cloud.google.com/blog/topics/threat-intelligence/unc6201-exploiting-dell-recoverpoint-zero-day) details how adversaries exploit hardcoded credentials. This vulnerability, tracked as CVE-2026-22769, provides root-level access to Dell RecoverPoint for Virtual Machines appliances. Once compromised, the adversary deploys SLAYSTYLE web shells and GRIMBOLT backdoors to maintain long-term access. These appliances often operate without traditional EDR coverage, making them ideal targets for lateral movement and virtual infrastructure manipulation.
How the Hunt Flows
The hunt begins by identifying vulnerable appliances. A scoping query checks vulnerability management findings for CVE-2026-22769 and maps affected assets to hostnames. This step is a gate; the hunt only proceeds if the environment contains known-vulnerable hosts. This prevents running expensive historical queries across the entire fleet if no exposure exists.
The second phase fans out to examine HTTP traffic. The query searches for HTTP PUT requests targeting the Apache Tomcat Manager text and HTML deployment endpoints. These requests indicate the delivery of a malicious WAR file used to host a web shell. The hunt focuses on requests that include deployment-related paths or specific URL queries known to trigger the manager API during exploitation.
Simultaneously, the hunt looks for rare file-system markers. It identifies WAR files in Tomcat directories and modifications to boot scripts such as convert_hosts.sh. By calculating the prevalence of these file paths across the appliance estate, the hunt highlights artifacts present on only one or two hosts. This allows an analyst to distinguish legitimate system updates from targeted persistence and unauthorized configuration changes.
The final phase correlates the vulnerability findings with the observed traffic and file activity. An analyst reviews the results to provide a verdict for each host. If the hunt confirms a compromise, it provides instructions for network isolation and manual disk forensics, specifically targeting logs that standard telemetry might miss, such as the fapi_cl_audit_log.log.
What This Hunt Cannot See
A host might be exploited before a vulnerability scanner flags it. If the scoping gate closes because of missing or delayed vulnerability data, the hunt will not find the intrusion. Additionally, endpoint auditing may not cover the specific Tomcat cache directories where the adversary stages files. Finally, the hunt cannot see application-level success codes for certain commands; these reside in proprietary audit logs which require manual extraction and review.
In this series
Steps
-
Identify vulnerable Dell RecoverPoint appliances
Query · scopingFind Dell RecoverPoint appliances currently reporting the hardcoded credential vulnerability and map them to hostnames.
reads hb_vulnerability_findingsqlSELECT d.hostname AS device_hostname, f.device_uid, f.affected_package_name, f.affected_package_version, f.severity, f.status, f.first_seen FROM hb_vulnerability_finding AS f JOIN hb_devices AS d ON f.device_uid = d.device_uid AND f.provider = d.provider WHERE f.cve_uid = '{{target_cve}}' AND f.status != 'suppressed'What a hit looks like. A list of hostnames and device UIDs flagging CVE-2026-22769. Silence proves no vulnerable hosts are currently reporting.
-
Evaluate exposure level
Agent triageAnalyze the lead results to determine if a full forensic investigation of the appliance estate is required.
-
Should the hunt proceed to deep investigation?
DecisionGate the expensive fan-out queries on the presence of vulnerable appliances.
-
HTTP exploitation of Tomcat Manager
Query · triageIdentify PUT requests targeting the Tomcat Manager deployment endpoint via both text and HTML APIs.
reads hb_http_activitysqlSELECT device_hostname, url_full, http_method, src_endpoint_ip, time FROM hb_http_activity WHERE (LOWER(url_path) LIKE '%/manager/text/deploy%' OR LOWER(url_path) LIKE '%/manager/html/deploy%' OR LOWER(url_query) LIKE '%path=/%') AND http_method = 'PUT' AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')What a hit looks like. PUT requests to the manager endpoint indicate attempt or success in deploying a malicious WAR file.
-
Rare persistence markers on Dell appliances
Query · baselineIdentify rare WAR file deployments, boot script modifications, or audit log tampering across the entire fleet.
reads hb_file_activitysqlSELECT file_path, COUNT(DISTINCT device_hostname) AS host_count, MIN(time) AS first_seen FROM hb_file_activity WHERE (LOWER(file_path) LIKE '/var/lib/tomcat9/%.war' OR LOWER(file_path) LIKE '/var/cache/tomcat9/catalina/%' OR LOWER(file_path) LIKE '%convert_hosts.sh' OR LOWER(file_path) LIKE '/home/kos/auditlog/fapi_cl_audit_log.log') AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY file_path HAVING host_count <= 2What a hit looks like. A file path seen on only one or two appliances fleet-wide indicates a malicious artifact.
-
Triage compromise per host
Agent triageCorrelate vulnerability exposure with observed HTTP activity and rare file modifications to confirm intrusion.
-
Route on triage verdict
DecisionTake action on compromised hosts or route for manual review.
-
Isolate compromised appliance
Response actionContain the threat by severing network access to the compromised host.
-
Manual analyst review
Analyst taskConfirm the agent findings and prepare for deep forensic analysis.
-
Close out hunt
Analyst taskRecord findings and update the vulnerability tracking status.
Coverage
Scenario coverage
| Stage | Covered | How, or why not |
|---|---|---|
| Tomcat Manager Zero-Day Exploitation T1190 · T1133 |
Yes | vulnerable-appliances, http-exploitation |
| SLAYSTYLE Web Shell Deployment T1505.003 |
Yes | rare-persistence-markers |
| Backdoor Persistence via Boot Script T1505.003 |
Yes | rare-persistence-markers |
| Stealthy Proxying via IPTables T1090.003 |
Out of scope | Belongs to another part of the 'UNC6201 exploiting a Dell RecoverPoint zero-day' series. |
| C2 via DNS-over-HTTPS T1071 |
Out of scope | Belongs to another part of the 'UNC6201 exploiting a Dell RecoverPoint zero-day' series. |
| Lateral Movement via Ghost NICs T1090.003 |
Out of scope | Belongs to another part of the 'UNC6201 exploiting a Dell RecoverPoint zero-day' series. |
Blind spots
- Needs hb_vulnerability_finding with CVE-2026-22769 coverage. A host may be exploited before it is flagged by vulnerability scanners, causing the gate to close prematurely. It would answer whether an appliance is vulnerable before the scanner updates.
- Needs hb_file_activity covering /var/cache/tomcat9. If endpoint auditing excludes the Tomcat cache directories, the deployment of SLAYSTYLE might remain invisible. It would answer whether we can see the compilation of the malicious WAR file.
- Needs /home/kos/auditlog/fapi_cl_audit_log.log. Standard HTTP logs show the request but not the application-level success or error codes only found in the proprietary audit log. It would answer whether the specific deployment command succeeded.
Parameters & data
Parameters
| Parameter | Type | Default | What it is |
|---|---|---|---|
lookback_days | number | 30 | Days of history to examine for exploitation and persistence markers. |
scope_hosts | list[host] | — | Optional list of hostnames to focus on, typically derived from the scoping step. |
target_cve | string | CVE-2026-22769 | The specific Dell RecoverPoint vulnerability ID. |
Telemetry
| Source | Category | Telemetry |
|---|---|---|
| Endpoint telemetry (hb_ surfaces) | endpoint | endpoint |
| Web server / proxy logs | siem | network |
Source
---
analysis: This hunt correlates vulnerability status with rare file-system behavior
and HTTP traffic patterns using a gated approach, allowing it to find intrusion
even when specific web shell filenames rotate.
blind_spots:
- id: missing-vulnerability-telemetry
question: whether an appliance is vulnerable before the scanner updates
requires: hb_vulnerability_finding with CVE-2026-22769 coverage
risk: A host may be exploited before it is flagged by vulnerability scanners, causing
the gate to close prematurely.
stage: tomcat-manager-zero-day-exploit
- id: insufficient-telemetry-for-verdict
question: whether we can see the compilation of the malicious WAR file
requires: hb_file_activity covering /var/cache/tomcat9
risk: If endpoint auditing excludes the Tomcat cache directories, the deployment
of SLAYSTYLE might remain invisible.
stage: webshell-war-persistence
- id: appliance-audit-logs
question: whether the specific deployment command succeeded
requires: /home/kos/auditlog/fapi_cl_audit_log.log
risk: Standard HTTP logs show the request but not the application-level success
or error codes only found in the proprietary audit log.
stage: tomcat-manager-zero-day-exploit
coverage:
- stage: tomcat-manager-zero-day-exploit
status: covered
steps:
- vulnerable-appliances
- http-exploitation
- stage: webshell-war-persistence
status: covered
steps:
- rare-persistence-markers
- stage: boot-script-backdoor-persistence
status: covered
steps:
- rare-persistence-markers
- reason: Belongs to another part of the 'UNC6201 exploiting a Dell RecoverPoint zero-day'
series.
stage: stealthy-iptables-proxying
status: out_of_scope
- reason: Belongs to another part of the 'UNC6201 exploiting a Dell RecoverPoint zero-day'
series.
stage: c2-doh-communication
status: out_of_scope
- reason: Belongs to another part of the 'UNC6201 exploiting a Dell RecoverPoint zero-day'
series.
stage: vmware-infrastructure-pivoting
status: out_of_scope
guardrails:
claims: no_unsupported
evidence: citation_required
missing_data: not_benign
telemetry: untrusted
hunt:
applicability: campaign-specific
handoff: keep-as-periodic-hunt
justification: Exploitation of a CVSS 10.0 zero-day in edge appliances allows root-level
persistence that bypasses traditional OS security controls.
methodology: model-assisted
trigger: intel-report
hypothesis: An adversary is exploiting hardcoded credentials (CVE-2026-22769) to deploy
SLAYSTYLE web shells and persistent GRIMBOLT backdoors on Dell RecoverPoint for
Virtual Machines appliances.
labels:
- hunt
- attack.t1190
- attack.t1133
- attack.t1505.003
- attack.t1071
name: Dell RecoverPoint Appliance Intrusion and Persistence
parameters:
lookback_days:
default: '30'
description: Days of history to examine for exploitation and persistence markers.
type: number
scope_hosts:
default: []
description: Optional list of hostnames to focus on, typically derived from the
scoping step.
type: list[host]
target_cve:
default: CVE-2026-22769
description: The specific Dell RecoverPoint vulnerability ID.
type: string
provenance:
authors:
- name: Huntbase hunt generation
org: huntbase.io
generated:
by: huntbase-hunt-generation
from: https://cloud.google.com/blog/topics/threat-intelligence/unc6201-exploiting-dell-recoverpoint-zero-day
gates:
- dry-run
- lint
model: hb_google/gemini-3-flash-preview
rationale: Focus on systems running Dell RecoverPoint software. If CVE telemetry is
delayed, search hb_software_inventory for the RecoverPoint package name.
references:
- name: UNC6201 exploiting a Dell RecoverPoint zero-day
url: https://cloud.google.com/blog/topics/threat-intelligence/unc6201-exploiting-dell-recoverpoint-zero-day
related:
- hunt: vmware-infrastructure-pivoting
reason: Compromised appliances are used as a beachhead to create Ghost NICs on the
virtual infrastructure.
relation: follows
scenario:
stages:
- name: Tomcat Manager Zero-Day Exploitation
observables:
- CVE-2026-22769
- HTTP PUT /manager/text/deploy?path=/
- admin user authentication to Apache Tomcat Manager
- /home/kos/tomcat9/tomcat-users.xml
- /home/kos/auditlog/fapi_cl_audit_log.log
slug: tomcat-manager-zero-day-exploit
tactic: initial-access
techniques:
- T1190
- T1133
- name: SLAYSTYLE Web Shell Deployment
observables:
- Malicious WAR file upload to /var/lib/tomcat9
- org.apache.catalina.startup.HostConfig.deployWAR
- /var/cache/tomcat9/Catalina
- java.io
- Base64.getDecoder
- Runtime.getRuntime().exec
slug: webshell-war-persistence
tactic: persistence
techniques:
- T1505.003
- name: Backdoor Persistence via Boot Script
observables:
- Modification of /home/kos/kbox/src/installation/distribution/convert_hosts.sh
- Execution via /etc/rc.local at boot
- GRIMBOLT C# Native AOT binary packed with UPX
- BRICKSTORM binary replacement
slug: boot-script-backdoor-persistence
tactic: persistence
techniques:
- T1505.003
- name: Stealthy Proxying via IPTables
observables:
- iptables -I INPUT -i eth0 -p tcp --dport 443 -m string --hex-string
- iptables REDIRECT --to-ports 10443
- Monitoring port 443 for Single Packet Authorization (SPA)
- Systemd Journal command recovery
slug: stealthy-iptables-proxying
tactic: command-and-control
techniques:
- T1090.003
- name: C2 via DNS-over-HTTPS
observables:
- DNS-over-HTTPS queries to Google, Cloudflare, and Amazon DNS services
- C2 traffic associated with GRIMBOLT and BRICKSTORM
slug: c2-doh-communication
tactic: command-and-control
techniques:
- T1071
- name: Lateral Movement via Ghost NICs
observables:
- Creation of temporary network ports (Ghost NICs) on virtual machines
- Pivoting from ESXi servers to internal or SaaS infrastructure
slug: vmware-infrastructure-pivoting
tactic: lateral-movement
techniques:
- T1090.003
summary: Suspected PRC-nexus actor UNC6201 exploited a zero-day (CVE-2026-22769)
in Dell RecoverPoint for Virtual Machines using hardcoded Tomcat Manager credentials.
They established persistent access via SLAYSTYLE web shells and backdoors, utilizing
modified boot scripts and complex iptables rules for stealthy network proxying
and Single Packet Authorization.
series:
index: 1
slug: unc6201-exploiting-a-dell-recoverpoint-zero-day
title: UNC6201 exploiting a Dell RecoverPoint zero-day
total: 2
severity: critical
targets:
analyst:
name: Tier-2 analyst
role: analyst
endpoint:
category: endpoint
name: Endpoint telemetry (hb_ surfaces)
telemetry:
- endpoint
hunter:
agent: true
name: Hunt agent
web:
category: siem
name: Web server / proxy logs
telemetry:
- network
tlp: clear
type: investigation
---
# Dell RecoverPoint Appliance Intrusion and Persistence
This hunt identifies compromised Dell RecoverPoint appliances using a gated flow. It begins by finding vulnerable assets through vulnerability scan data. If vulnerable hosts exist, the hunt fans out to search for HTTP exploitation attempts against the Apache Tomcat Manager and rare file-system markers. The hunt examines both web shell deployment in Tomcat cache directories and persistent backdoor entries in boot scripts.
## vulnerable-appliances
<!-- Identify vulnerable Dell RecoverPoint appliances -->
Find Dell RecoverPoint appliances currently reporting the hardcoded credential vulnerability and map them to hostnames.
```sqlite target=endpoint role=scoping params=(target_cve=target_cve)
~~~yaml
expected: A list of hostnames and device UIDs flagging CVE-2026-22769. Silence proves
no vulnerable hosts are currently reporting.
reads:
- device_uid
- hostname
- provider
- cve_uid
silence: evidence_of_absence
source: hb_vulnerability_finding
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT d.hostname AS device_hostname, f.device_uid, f.affected_package_name, f.affected_package_version, f.severity, f.status, f.first_seen FROM hb_vulnerability_finding AS f JOIN hb_devices AS d ON f.device_uid = d.device_uid AND f.provider = d.provider WHERE f.cve_uid = '{{target_cve}}' AND f.status != 'suppressed'
```
## evaluate-exposure
<!-- Evaluate exposure level -->
```agent target=hunter
cite: required
context:
- vulnerable-appliances
max_iterations: 3
objective: Determine if any Dell RecoverPoint appliances are vulnerable and prioritize
them for historical telemetry review.
success_criteria: A recommendation to fan out or close the hunt.
tools:
- endpoint
- web
```
## is-vulnerable
<!-- Should the hunt proceed to deep investigation? -->
if~: "vulnerable Dell RecoverPoint appliances were identified" (confidence: high, judge=hunter)
then: → fan-out
indeterminate: → manual-review
unavailable: → manual-review (blind_spot: missing-vulnerability-telemetry)
else: → close-out
## fan-out
<!-- Fan out forensic queries -->
parallel:
- → http-exploitation
- → rare-persistence-markers
join: → triage-compromise
## http-exploitation
<!-- HTTP exploitation of Tomcat Manager -->
Identify PUT requests targeting the Tomcat Manager deployment endpoint via both text and HTML APIs.
```sqlite target=web role=triage params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
expected: PUT requests to the manager endpoint indicate attempt or success in deploying
a malicious WAR file.
reads:
- device_hostname
- url_path
- url_query
- http_method
- time
silence: not_evidence_of_absence
source: hb_http_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, url_full, http_method, src_endpoint_ip, time FROM hb_http_activity WHERE (LOWER(url_path) LIKE '%/manager/text/deploy%' OR LOWER(url_path) LIKE '%/manager/html/deploy%' OR LOWER(url_query) LIKE '%path=/%') AND http_method = 'PUT' AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```
## rare-persistence-markers
<!-- Rare persistence markers on Dell appliances -->
Identify rare WAR file deployments, boot script modifications, or audit log tampering across the entire fleet.
```sqlite target=endpoint role=baseline params=(lookback_days=lookback_days)
~~~yaml
baseline:
compare: first_seen
window: '{{lookback_days}}d'
expected: A file path seen on only one or two appliances fleet-wide indicates a malicious
artifact.
prevalence:
by: device_hostname
key:
- file_path
rare_below: 3
reads:
- file_path
- device_hostname
- time
silence: not_evidence_of_absence
source: hb_file_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT file_path, COUNT(DISTINCT device_hostname) AS host_count, MIN(time) AS first_seen FROM hb_file_activity WHERE (LOWER(file_path) LIKE '/var/lib/tomcat9/%.war' OR LOWER(file_path) LIKE '/var/cache/tomcat9/catalina/%' OR LOWER(file_path) LIKE '%convert_hosts.sh' OR LOWER(file_path) LIKE '/home/kos/auditlog/fapi_cl_audit_log.log') AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY file_path HAVING host_count <= 2
```
## triage-compromise
<!-- Triage compromise per host -->
```agent target=hunter
cite: required
context:
- evaluate-exposure
- http-exploitation
- rare-persistence-markers
max_iterations: 6
objective: Determine if the vulnerable Dell appliances show conclusive signs of exploitation
(HTTP PUT) or persistence (rare WARs/scripts).
success_criteria: A malicious | suspicious | benign verdict for every host listed
in the results.
tools:
- endpoint
- web
```
## route-verdict
<!-- Route on triage verdict -->
if~: "the triage verdict is malicious or suspicious for at least one host" (confidence: high, judge=hunter)
then: → isolate-host
indeterminate: → manual-review
unavailable: → manual-review (blind_spot: insufficient-telemetry-for-verdict)
else: → close-out
## isolate-host
<!-- Isolate compromised appliance -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the Dell RecoverPoint appliance from the network and revoke any service credentials used by Apache Tomcat.
```
→ manual-review
## manual-review
<!-- Manual analyst review -->
```manual target=analyst
Review the cited rows from the triage step. For compromised hosts, acquire a disk image for analysis of the fapi_cl_audit_log.log and the Tomcat WAR cache.
```
→ close-out
## close-out
<!-- Close out hunt -->
```manual target=analyst
Document the final count of vulnerable vs. compromised appliances. If vulnerable appliances were found but no intrusion markers were present, notify the infrastructure team to prioritize patching.
```
→ end
Run it
Take this hunt into your environment.
Open it in Huntbase to run every step against your own connections, with Scout weighing the evidence and your analysts in command. Or take the open hunt.md file anywhere that reads the format.
Machine-drafted by huntbase-hunt-generation using hb_google/gemini-3-flash-preview, gated by dry-run, lint, then reviewed by a person.