Cavern Manticore — Iran-Linked Cavern (Cav3rn) Modular C2 via SysAid / WinDirStat DLL Side-Loading
Executive Summary
Cavern Manticore is a threat cluster tracked by Check Point Research and affiliated with Iran's Ministry of Intelligence and Security (MOIS). It shares tactical overlaps with MuddyWater and Lyceum and is focused on Israeli government and IT-services organizations — IT providers being a deliberate choice, since their trusted access into downstream customers makes them a stepping stone to harder targets.
The actor operates a previously undocumented, modular command-and-control framework called Cavern (aka Cav3rn). The intrusion begins by abusing SysAid's software-update feature to kick off a DLL side-loading chain: a legitimate signed WinDirStat.exe is dropped (observed at C:\ProgramData\WinDir\WinDirStat.exe) alongside a trojanized uxtheme.dll — the Cavern Agent. The Agent is built on a shared .NET foundation but deliberately mixes compilation formats (.NET Framework, Mixed-Mode C++/CLI, and .NET Native AOT) to force reverse engineers across multiple toolchains, and isolates each module in its own AppDomain as an anti-forensics measure.
The Agent's module dispatcher treats components whose names start with n- as native DLLs loaded via LoadLibraryA, and the rest as managed .NET assemblies. Modules include n-HTCommp.dll (HTTPS/WebSocket comms), mhm.dll (file manager), db.dll (SQL enumeration/export), ode.dll (Active Directory recon + LDAP brute-force), n-ten.dll (network recon, port & SMB brute-force), and n-sws.dll (SOCKS5 proxy + WebSocket tunnel). An older variant used a CAV3RN_Http_Module with a webshell (cac.aspx) hosted on a separate IIS server.
Defender priority: The highest-value, lowest-FP angles are WinDirStat.exe running from C:\ProgramData\WinDir\, a trojanized uxtheme.dll written outside the Windows system directories, the distinctive Cavern module DLLs (n-HTCommp / n-ten / n-sws / mhm / db / ode), the Check Point-published SHA-256 hashes, and DNS to the Cavern C2 domains (hospitalinstallation[.]com and its subdomains, adserviceupdate[.]com, hygienehistory[.]com). Patch/monitor SysAid and constrain DLL search order to break the side-load primitive.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry Fwd |
|---|---|---|---|
| 1 · Vendor | Check Point Research — "Cavern Manticore: Exposing Iran-Linked Modular C2 Framework" (2026-07-06) | Primary technical analysis: Cav3rn Agent (trojanized uxtheme.dll), SysAid + WinDirStat DLL side-load, module set & dispatcher, mixed .NET compilation, AppDomain isolation, C2 domains, SHA-256 hashes, host artifacts, cac.aspx webshell | yes |
| 2 · Press | The Hacker News — "Iran-Linked Hackers Use New Cavern C2 Framework to Target Israeli Organizations" (2026-07-06) | Corroborates MOIS attribution, SysAid update-feature abuse, uxtheme.dll side-load, module list, MuddyWater/Lyceum overlap | partial |
| 2 · Press | Cyber Security News / Infosecurity Magazine — Cavern Manticore SysAid & WinDirStat side-loading | Confirm WinDirStat.exe sideload vector, Israeli gov/IT targeting, IT-provider stepping-stone motive | partial |
Every atomic IOC below (SHA-256 hashes, C2 domains, module DLL filenames, host artifacts, deployment path, webshell name) traces to the Check Point Research indicator set. The SHA-256 hashes, C2 domains, and module DLL names are durable indicators; the deployment path C:\ProgramData\WinDir\ and mutex strings are strong but may vary between intrusions — hunt on the behaviour (WinDirStat side-loading uxtheme.dll) as the primary, atomic values as confirmation.
Hunt Brief & Attack Chain
Hunt hypotheses (fidelity-ordered)
- H1 (high):
WinDirStat.exeexecuted fromC:\ProgramData\WinDir\(or any user-writable path) — the Cavern side-load host in the wrong place. Covers T1574.002. - H2 (high): A trojanized
uxtheme.dllwas written outside the Windows system directories — the Cavern Agent staged for side-load. Covers T1574.002. - H3 (high): A distinctive Cavern module DLL (
n-HTCommp/n-ten/n-sws/mhm/db/ode) was written to a staging path. Module drop. - H4 (high): A file matching a Check Point-published Cavern SHA-256 executed or was written. Atomic.
- H5 (high): A host resolved a Cavern C2 domain (
hospitalinstallation[.]comand subdomains,adserviceupdate[.]com,hygienehistory[.]com). Covers T1071.001. - H6 (high):
WinDirStat.exespawned a shell or recon utility (cmd/powershell/rundll32/net/nltest/whoami) — the sideloaded Agent running commands. Covers module recon. - H7 (medium): Cavern host artifacts appeared — steganographic
.CvnC/.CvnA/.CvnR.png,config.txt, orinpt\/outpt\working dirs. On-host tells. - H8 (medium): A
cac.aspxwebshell was written to a web-server path, orw3wp.exespawned a shell. Covers older CAV3RN_Http_Module / T1505.003. - H9 (medium): The side-load host made SOCKS5 / WebSocket-style outbound connections (n-sws tunnel). Covers T1090 / T1571.
Attack chain
| Step | Behavior | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 · Initial access | SysAid software-update feature abused to stage the side-load pair | ProcessRollup2, PeFileWritten | Q1, Q2, native hunts |
| 2 · Side-load | Signed WinDirStat.exe (from C:\ProgramData\WinDir\) loads trojanized uxtheme.dll = Cavern Agent | ProcessRollup2, PeFileWritten | Q1, Q2 |
| 3 · Module load | Dispatcher loads n-* as native DLLs (LoadLibraryA) and the rest as .NET assemblies in isolated AppDomains | PeFileWritten | Q3, Q4 |
| 4 · Recon | ode.dll (AD/LDAP), n-ten.dll (port/SMB), db.dll (SQL) enumerate the environment | ProcessRollup2, NetworkConnectIP4 | Q6 |
| 5 · C2 | n-HTCommp.dll beacons over HTTPS/WebSocket to the Cavern domains | DnsRequest, NetworkConnectIP4 | Q5, Q9 |
| 6 · Tunnel / lateral | n-sws.dll opens a SOCKS5 proxy / WebSocket tunnel; file exfil via mhm.dll | NetworkConnectIP4 | Q9 |
| 7 · Alt. foothold | Older variant drops cac.aspx webshell (CAV3RN_Http_Module) on an IIS server | FileCreateInfo, ProcessRollup2 | Q8 |
Consolidated IOC Table
All values published by Check Point Research. SHA-256 hashes, C2 domains and module DLL names are durable; the deployment path and mutex strings are strong but may vary. uxtheme.dll is a legitimate Windows binary name — hunt on it only when it appears outside the system directories or is loaded by WinDirStat.exe from a staging path.
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| sha256 | 37e123bd7998af4eae32718ce254776f36365a80ba56952593dab46f536d4066 | high | detect | uxtheme.dll — Cavern Agent (build 02) |
| sha256 | 92cae0ad7f98f51a14bcc0ee05e372ebdc29ea96ea7bd161bd3f55198767603b | high | detect | uxtheme.dll — Cavern Agent (build 04) |
| sha256 | 5dc08bda6919a57a85e5f38b857985fa71529ca39c8299868d5a49a987e19b18 | high | detect | uxtheme.dll — Cavern Agent (oldest) |
| sha256 | a4aa217def4c38f4ecacdf47b1cd687f60cc74c18ab75195be3c4357a790bf41 | high | detect | n-HTCommp.dll — comms module |
| sha256 | b630c96d3763182533d4fb9b614134382bd644cb02c6c1c3ade848b6ecc31e86 | high | detect | n-HTCommp.dll — comms module |
| sha256 | 8e9425c0b46eeb516610ae913d13f2b3f44a023043cb099277031d4ec38a6134 | high | detect | mhm.dll — file manager |
| sha256 | 0a3663648a46771a5a5423ad01e91a4e7ba825595e99fa934cb35cbb4848adc8 | high | detect | mhm.dll — file manager (older) |
| sha256 | 5394d3b220de4695f731647e3a70545f951a8912ceb0c6585efab8d6842e8b42 | high | detect | db.dll — SQL browser |
| sha256 | 30cb4679c4b8599eeb3d63a551716475c6332bdc4d4b4e3de0964aadb3092a10 | high | detect | ode.dll — LDAP/AD module |
| sha256 | 2cb1ad3b22db8e3666ea138fee88034a87a87cf43db3d3265a675ebf221379b0 | high | detect | n-ten.dll — network recon |
| sha256 | 7d586fb7f94182a8e2a0e53c7e4deb898066da029da5cd9972a94a59ca6d255a | high | detect | n-sws.dll — SOCKS5 / tunnel |
| sha256 | 541b1f417b9e42078c3355693a8a492b6a76048850f6549a429e0be99e6819cb | high | detect | Older Cav3rn agent |
| sha256 | cbc9485db715e1b8cc384fe94b4bceadca4006cda8a5e28adc8848529cfafc93 | high | detect | Older Cav3rn agent |
| sha256 | ccf218189c3aadb1c761da14bfda3bae686769031e1e1b10007648bd72e34748 | high | detect | Older Cav3rn HTTP module |
| domain | hospitalinstallation[.]com (+ auth. / google.com. subdomains) | high | block | Cavern C2 (parent + newer/older agent hosts) |
| domain | adserviceupdate[.]com | high | block | Older Cav3rn C2 |
| domain | hygienehistory[.]com | high | block | Older Cav3rn C2 / cac.aspx webshell host |
| filename | uxtheme.dll (outside System32/WinSxS) · n-HTCommp / mhm / db / ode / n-ten / n-sws .dll | high | hunt | Cavern Agent + modules |
| path | C:\ProgramData\WinDir\WinDirStat.exe | high | hunt | side-load host deployment path |
| artifact | .CvnC.png / .CvnA.png / .CvnR.png · config.txt · inpt\ · outpt\ | med | hunt | stego payloads / config / working dirs |
| mutex | MYMUTEX123HELLP / MYMUTEX123HELLP02 / MYMUTEX123HELLP04 | med | hunt | Agent single-instance mutexes (native hunt) |
| webshell | cac.aspx | med | hunt | older CAV3RN_Http_Module (IIS) |
Affected Surface & Telemetry Matrix
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Windows endpoints / servers (SysAid, IT-mgmt hosts) | ProcessRollup2 / SyntheticProcessRollup2 | Critical | Low — default Falcon coverage |
| File writes (Agent + module DLLs, stego artifacts) | PeFileWritten / FileCreateInfo | High | Low |
| DNS / egress (C2 beacon, SOCKS/WebSocket tunnel) | DnsRequest, NetworkConnectIP4 | High | Med — scope to the side-load host to keep it tight |
| IIS web servers (older webshell variant) | FileCreateInfo, ProcessRollup2 (w3wp children) | Med | Med — needs server-role coverage |
| Active Directory (ode.dll LDAP recon / brute-force) | UserLogonFailed, LDAP/DC audit logs | Med | High — LDAP-query visibility often thin (§7) |
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Coverage |
|---|---|---|---|
| Initial Access / Persistence | T1195 / T1574.002 DLL Side-Loading | SysAid update abuse → WinDirStat.exe loads trojanized uxtheme.dll | Q1, Q2 |
| Defense Evasion | T1574.002 DLL Side-Loading | Signed host + malicious companion DLL; mixed .NET compilation; AppDomain isolation | Q1, Q2, Q3 |
| Execution | T1129 Shared Modules | Dispatcher loads n-* natives via LoadLibraryA; managed modules as .NET assemblies | Q3, Q4, Q6 |
| Discovery | T1087 Account Discovery / T1046 Network Service Discovery | ode.dll LDAP/AD recon; n-ten.dll port + SMB scan | Q6 |
| Collection | T1005 Data from Local System / T1213 Data from Repositories | mhm.dll file transfer; db.dll SQL enumeration/export | Q6, native hunts |
| Command & Control | T1071.001 Web Protocols | n-HTCommp.dll HTTPS/WebSocket beacon to Cavern domains | Q5, Q9 |
| Command & Control | T1090 Proxy / T1571 Non-Standard Port | n-sws.dll SOCKS5 proxy + WebSocket tunnel | Q9 |
| Persistence | T1505.003 Web Shell | Older CAV3RN_Http_Module drops cac.aspx on IIS | Q8 |
| Defense Evasion | T1027.003 Steganography | .CvnC/.CvnA/.CvnR.png carrier files | Q7 |
Native Audit-Log Hunts (non-CQL)
- SysAid server review: On any SysAid on-prem host, review the update/patch feature's activity and outbound history around the intrusion window, and confirm the server is fully patched. Cavern Manticore's initial access rides the SysAid software-update feature.
- Mutex sweep (RTR): On suspect hosts, enumerate named kernel objects for
MYMUTEX123HELLP,MYMUTEX123HELLP02, andMYMUTEX123HELLP04— the Cavern Agent's single-instance mutexes (not reliably in EDR telemetry, so check live). - File-system sweep: Look for a
C:\ProgramData\WinDir\directory, an out-of-placeuxtheme.dll,config.txt,inpt\/outpt\working dirs, and stego files named.CvnC.png/.CvnA.png/.CvnR.png. - Active Directory audit: Hunt for LDAP brute-force / heavy enumeration bursts (Event ID 4771/4625 spikes and abnormal LDAP query volume from a single workstation) consistent with
ode.dll. - IIS log review: On internet-facing IIS, search web logs and content for
cac.aspxand forw3wp.exespawningcmd.exe/powershell.exe— the older CAV3RN_Http_Module foothold.
CrowdStrike LogScale CQL Hunt Queries
Looks for: the legitimate WinDirStat.exe running from C:\ProgramData\WinDir\ (or any ProgramData/Users/Temp staging path) — the Cavern side-load host in an illegitimate location. WinDirStat normally lives in Program Files, so this is near-zero FP.
// HUNT: Cavern side-load host — WinDirStat.exe from a staging path // MITRE: T1574.002 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 // FALSE POSITIVES: none expected — WinDirStat normally runs from Program Files #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^WinDirStat\.exe$/i | FilePath=/\\(ProgramData|Users|Temp)\\/i | table([@timestamp, aid, ComputerName, UserName, FileName, FilePath, CommandLine, ParentBaseFileName], limit=200)
Looks for: a uxtheme.dll written to ProgramData, a user profile, or Temp — the Cavern Agent staged for side-load. The genuine uxtheme.dll only lives in System32/SysWOW64/WinSxS, so a copy anywhere else is the tell.
// HUNT: Cavern Agent — uxtheme.dll staged outside Windows system dirs // MITRE: T1574.002 // CONF: high FP: low COST: low | REQUIRES: PeFileWritten // FALSE POSITIVES: rare — some app installers bundle a private uxtheme.dll; confirm signer/path // TUNING: exclude known-good vendor install dirs if any legitimately ship uxtheme.dll #event_simpleName=/PeFileWritten|NewExecutableWritten/ | TargetFileName=/\\uxtheme\.dll$/i | TargetFileName=/\\(ProgramData|Users|Temp)\\/i | table([@timestamp, aid, ComputerName, TargetFileName, SHA256HashData], limit=200)
Looks for: the distinctive Cavern module DLLs (n-HTCommp, n-ten, n-sws, mhm, db, ode) written to a user-writable path. FP: db.dll / mhm.dll are somewhat generic names — scoping to staging paths and pairing with Q1/Q2 keeps this tight.
// HUNT: Cavern C2 module DLLs staged on disk // MITRE: T1129, T1574.002 // CONF: high FP: medium COST: low | REQUIRES: PeFileWritten // FALSE POSITIVES: db.dll / mhm.dll are generic names in some SDKs // TUNING: require the staging-path filter below and correlate with Q1/Q2 on the same aid #event_simpleName=/PeFileWritten|NewExecutableWritten/ | TargetFileName=/\\(n-HTCommp|n-ten|n-sws|mhm|db|ode)\.dll$/i | TargetFileName=/\\(ProgramData|Users|Temp|WinDir)\\/i | table([@timestamp, aid, ComputerName, TargetFileName, SHA256HashData], limit=200)
Looks for: execution or write of any Check Point-listed Cavern Agent / module SHA-256. Atomic — promote straight to a Custom IOC block (see §10).
// HUNT: Cavern Agent / module known-bad SHA-256 hashes (Check Point) // MITRE: T1574.002, T1129 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 / PeFileWritten #event_simpleName=/ProcessRollup2|PeFileWritten|NewExecutableWritten/ | in(SHA256HashData, values=["37e123bd7998af4eae32718ce254776f36365a80ba56952593dab46f536d4066", "92cae0ad7f98f51a14bcc0ee05e372ebdc29ea96ea7bd161bd3f55198767603b", "5dc08bda6919a57a85e5f38b857985fa71529ca39c8299868d5a49a987e19b18", "a4aa217def4c38f4ecacdf47b1cd687f60cc74c18ab75195be3c4357a790bf41", "b630c96d3763182533d4fb9b614134382bd644cb02c6c1c3ade848b6ecc31e86", "8e9425c0b46eeb516610ae913d13f2b3f44a023043cb099277031d4ec38a6134", "0a3663648a46771a5a5423ad01e91a4e7ba825595e99fa934cb35cbb4848adc8", "5394d3b220de4695f731647e3a70545f951a8912ceb0c6585efab8d6842e8b42", "30cb4679c4b8599eeb3d63a551716475c6332bdc4d4b4e3de0964aadb3092a10", "2cb1ad3b22db8e3666ea138fee88034a87a87cf43db3d3265a675ebf221379b0", "7d586fb7f94182a8e2a0e53c7e4deb898066da029da5cd9972a94a59ca6d255a", "541b1f417b9e42078c3355693a8a492b6a76048850f6549a429e0be99e6819cb", "cbc9485db715e1b8cc384fe94b4bceadca4006cda8a5e28adc8848529cfafc93", "ccf218189c3aadb1c761da14bfda3bae686769031e1e1b10007648bd72e34748"]) | table([@timestamp, aid, ComputerName, UserName, FileName, FilePath, SHA256HashData], limit=max)
Looks for: resolution of any Cavern C2 domain — the parent hospitalinstallation[.]com (matches auth. and google.com. subdomains), adserviceupdate[.]com, and hygienehistory[.]com. Atomic C2 indicator — any hit is high-signal.
// HUNT: Cavern C2 domain resolution // MITRE: T1071.001 // CONF: high FP: low COST: low | REQUIRES: DnsRequest #event_simpleName=/DnsRequest/ | DomainName=/(^|\.)(hospitalinstallation|adserviceupdate|hygienehistory)\.com$/i | table([@timestamp, aid, ComputerName, DomainName, ContextBaseFileName], limit=200)
Looks for: WinDirStat.exe as the parent of a shell or discovery tool (cmd/powershell/rundll32/net/nltest/whoami/ipconfig/systeminfo/dsquery). WinDirStat is a disk-usage GUI that never spawns these — so a hit means the sideloaded Cavern Agent is running commands. Very low FP.
// HUNT: Cavern Agent recon — WinDirStat.exe spawns shell/discovery tools // MITRE: T1059, T1087, T1046 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^WinDirStat\.exe$/i | FileName=/^(cmd|powershell|pwsh|rundll32|regsvr32|net|net1|whoami|nltest|ipconfig|systeminfo|dsquery|ldifde|arp|route)\.exe$/i | table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Looks for: creation of Cavern's steganographic carrier files (.CvnC.png, .CvnA.png, .CvnR.png) or a config.txt under an inpt\/outpt\ working directory. Distinctive names → low FP; medium confidence because file names may vary between intrusions.
// HUNT: Cavern stego payloads / config / working directories // MITRE: T1027.003 // CONF: medium FP: low COST: low | REQUIRES: FileCreateInfo / PeFileWritten #event_simpleName=/FileCreateInfo|PeFileWritten|NewExecutableWritten/ | TargetFileName=/(\\\.Cvn[CAR]\.png|\\(inpt|outpt)\\config\.txt)$/i | table([@timestamp, aid, ComputerName, TargetFileName, ContextBaseFileName], limit=200)
Looks for: creation of a cac.aspx file — the older CAV3RN_Http_Module webshell. Pair this on the same host with the native IIS hunt for w3wp.exe spawning a shell (§7). FP: a legitimately-named cac.aspx is unlikely but confirm the web app before acting.
// HUNT: Cavern (older) cac.aspx webshell write // MITRE: T1505.003 // CONF: medium FP: medium COST: medium | REQUIRES: FileCreateInfo // FALSE POSITIVES: verify no legitimate app ships a file named cac.aspx // TUNING: scope to IIS content roots (inetpub\wwwroot) and pair with w3wp child-spawn (native hunt) #event_simpleName=/FileCreateInfo|PeFileWritten|NewExecutableWritten/ | TargetFileName=/\\cac\.aspx$/i | table([@timestamp, aid, ComputerName, TargetFileName, FilePath, ContextBaseFileName], limit=200)
Looks for: outbound network connections whose owning process is WinDirStat.exe — a disk-usage tool that has no business making network connections. Any egress here is the Cavern Agent's n-HTCommp beacon or n-sws SOCKS5/WebSocket tunnel. FP: scope to the abused host; review the remote address/port.
// HUNT: Cavern C2 / tunnel egress owned by the side-load host // MITRE: T1071.001, T1090, T1571 // CONF: medium FP: medium COST: medium | REQUIRES: NetworkConnectIP4 // FALSE POSITIVES: none expected — WinDirStat does not make network connections // TUNING: enrich RemoteAddressIP4 against threat intel; alert on any non-RFC1918 destination #event_simpleName=/NetworkConnectIP4/ | ContextBaseFileName=/^WinDirStat\.exe$/i | table([@timestamp, aid, ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort], limit=200)
CrowdStrike Custom IOA Recommendations
| IOA Name | Pattern | Action | Exclusions |
|---|---|---|---|
| Cavern — Side-load Host in Staging Path | WinDirStat.exe from ProgramData/Users/Temp (Q1) | Detect → Block (after baseline) | None expected — abnormal location |
| Cavern — Agent DLL Staged | uxtheme.dll written outside system dirs (Q2) | Detect (high) | Vendor installers bundling a private uxtheme.dll |
| Cavern — Host Spawns Recon | WinDirStat.exe parent of cmd/powershell/net/nltest (Q6) | Detect → Block | None expected |
| Cavern — C2 Domain | DNS to hospitalinstallation / adserviceupdate / hygienehistory (Q5) | Detect (high) | None — dedicated actor infra |
Promotion path: validate the high-CONF/low-FP queries (Q1, Q2, Q5, Q6) against 7–14 days of baseline, confirm zero benign hits, then promote to Custom IOAs in detect mode; escalate Q1/Q6 to block once clean. Q4 hashes and Q5 domains → Custom IOC Management (block).
Machine-Readable IOC Appendix
One-click blocks for SOC tooling. Hashes and domains are Check Point-published; swap expirations to fit your policy. Note WinDirStat.exe and uxtheme.dll are legitimate signed binaries — hunt on location/behaviour, do not blanket-block by name.
type,value,action,severity,expiration,description,tags sha256,37e123bd7998af4eae32718ce254776f36365a80ba56952593dab46f536d4066,prevent,critical,2026-12-31,Cavern Agent uxtheme.dll b02,actor:CavernManticore;tool:Cavern sha256,92cae0ad7f98f51a14bcc0ee05e372ebdc29ea96ea7bd161bd3f55198767603b,prevent,critical,2026-12-31,Cavern Agent uxtheme.dll b04,actor:CavernManticore;tool:Cavern sha256,5dc08bda6919a57a85e5f38b857985fa71529ca39c8299868d5a49a987e19b18,prevent,critical,2026-12-31,Cavern Agent uxtheme.dll old,actor:CavernManticore;tool:Cavern sha256,a4aa217def4c38f4ecacdf47b1cd687f60cc74c18ab75195be3c4357a790bf41,prevent,critical,2026-12-31,n-HTCommp.dll comms,actor:CavernManticore;tool:Cavern sha256,b630c96d3763182533d4fb9b614134382bd644cb02c6c1c3ade848b6ecc31e86,prevent,critical,2026-12-31,n-HTCommp.dll comms,actor:CavernManticore;tool:Cavern sha256,8e9425c0b46eeb516610ae913d13f2b3f44a023043cb099277031d4ec38a6134,prevent,critical,2026-12-31,mhm.dll file manager,actor:CavernManticore;tool:Cavern sha256,0a3663648a46771a5a5423ad01e91a4e7ba825595e99fa934cb35cbb4848adc8,prevent,critical,2026-12-31,mhm.dll file manager old,actor:CavernManticore;tool:Cavern sha256,5394d3b220de4695f731647e3a70545f951a8912ceb0c6585efab8d6842e8b42,prevent,critical,2026-12-31,db.dll SQL browser,actor:CavernManticore;tool:Cavern sha256,30cb4679c4b8599eeb3d63a551716475c6332bdc4d4b4e3de0964aadb3092a10,prevent,critical,2026-12-31,ode.dll LDAP AD,actor:CavernManticore;tool:Cavern sha256,2cb1ad3b22db8e3666ea138fee88034a87a87cf43db3d3265a675ebf221379b0,prevent,critical,2026-12-31,n-ten.dll network recon,actor:CavernManticore;tool:Cavern sha256,7d586fb7f94182a8e2a0e53c7e4deb898066da029da5cd9972a94a59ca6d255a,prevent,critical,2026-12-31,n-sws.dll SOCKS5 tunnel,actor:CavernManticore;tool:Cavern sha256,541b1f417b9e42078c3355693a8a492b6a76048850f6549a429e0be99e6819cb,prevent,critical,2026-12-31,Cav3rn agent old,actor:CavernManticore;tool:Cavern sha256,cbc9485db715e1b8cc384fe94b4bceadca4006cda8a5e28adc8848529cfafc93,prevent,critical,2026-12-31,Cav3rn agent old,actor:CavernManticore;tool:Cavern sha256,ccf218189c3aadb1c761da14bfda3bae686769031e1e1b10007648bd72e34748,prevent,critical,2026-12-31,Cav3rn HTTP module old,actor:CavernManticore;tool:Cavern domain,hospitalinstallation.com,block,critical,2026-12-31,Cavern C2 parent,actor:CavernManticore;tool:Cavern domain,adserviceupdate.com,block,critical,2026-12-31,Cavern C2 old,actor:CavernManticore;tool:Cavern domain,hygienehistory.com,block,critical,2026-12-31,Cavern C2 old / cac.aspx host,actor:CavernManticore;tool:Cavern
[ Cavern Manticore / Cav3rn behaviors ] - WinDirStat.exe running from C:\ProgramData\WinDir\ (or Users/Temp) - uxtheme.dll written/loaded outside System32/SysWOW64/WinSxS - Module DLLs: n-HTCommp / n-ten / n-sws / mhm / db / ode (.dll) - WinDirStat.exe as parent of cmd/powershell/net/nltest/whoami - DNS to hospitalinstallation[.]com (+ auth./google.com. subs), adserviceupdate[.]com, hygienehistory[.]com - Outbound network connections owned by WinDirStat.exe (n-sws tunnel) - Stego files .CvnC.png / .CvnA.png / .CvnR.png; config.txt; inpt\ outpt\ - Mutexes MYMUTEX123HELLP / ...02 / ...04 - cac.aspx webshell; w3wp.exe spawning cmd/powershell (older variant)
Actor: Cavern Manticore (Iran / MOIS-affiliated espionage)
Overlaps: MuddyWater, Lyceum
Framework: Cavern (aka Cav3rn) - modular .NET C2
Agent: trojanized uxtheme.dll (side-loaded by WinDirStat.exe)
Compile: .NET Framework + Mixed-Mode C++/CLI + .NET Native AOT
per-module AppDomain isolation (anti-forensics)
Modules: n-HTCommp (comms), mhm (files), db (SQL),
ode (AD/LDAP), n-ten (net recon), n-sws (SOCKS5/tunnel)
Access: SysAid software-update feature abuse
Older: CAV3RN_Http_Module -> cac.aspx webshell (IIS)
Targets: Israeli government & IT-services organizations
[ ] SysAid on-prem fully patched; update feature monitored [ ] WDAC/AppLocker deny EXEs under C:\ProgramData, \Users\Public, \Windows\Temp [ ] Block/alert DNS to hospitalinstallation / adserviceupdate / hygienehistory .com [ ] Enable CFG / Safe DLL search order; audit side-loading of uxtheme.dll [ ] IIS content roots reviewed for cac.aspx; w3wp child-spawn alerting on [ ] AD: LDAP query/logon-failure baselining for ode.dll brute-force [ ] RTR sweep for MYMUTEX123HELLP mutexes + C:\ProgramData\WinDir\ [ ] Egress filtering: block/inspect non-browser processes making WebSocket/SOCKS
Detection Validation Gates
- Telemetry ready: Confirm ProcessRollup2, PeFileWritten, FileCreateInfo, DnsRequest, and NetworkConnectIP4 are flowing from in-scope Windows endpoints and servers (including any SysAid and IIS hosts).
- Benign baseline: Run Q2 and Q3 (DLL writes) over 7–14 days; record any vendor installer that legitimately ships a private
uxtheme.dllor a generically-nameddb.dll/mhm.dll, and exclude those paths before alerting. - Positive test: In a lab, copy
WinDirStat.exetoC:\ProgramData\WinDir\and launch it, then have it spawncmd.exe; confirm Q1 and Q6 fire. Write a dummyuxtheme.dlltoC:\ProgramData\WinDir\and confirm Q2 fires. Add a sinkholed DNS entry for one C2 domain and confirm Q5 fires. - Promotion: Only promote Q1/Q2/Q5/Q6 to detect/block after zero benign hits across the baseline window.
Hardening — Tiered & Deployable
- Patch and lock down SysAid on-prem — apply the latest fixes, restrict the admin/update interface to trusted networks, and monitor the software-update feature. This is Cavern Manticore's initial-access vector. (MITRE M1051 Update Software / M1030 Network Segmentation.)
- Block/alert on the Cavern C2 domains (
hospitalinstallation[.]com+ subdomains,adserviceupdate[.]com,hygienehistory[.]com) at DNS/proxy. (M1031 Network Intrusion Prevention.) - Sweep + alert on
C:\ProgramData\WinDir\and out-of-placeuxtheme.dllacross the fleet. (M1047 Audit.)
- WDAC/AppLocker: block execution of binaries under
C:\ProgramData,C:\Users\Public, andC:\Windows\Temp(deny-by-path). (M1038 Execution Prevention.) - Constrain DLL search order: enable Safe DLL Search Mode and set
CWDIllegalInDllSearch, and audit side-loading by signed binaries (uxtheme.dll loaded from a non-system path). (M1038 / M1052 User Account Control.) - Egress controls: restrict which processes/hosts may make arbitrary outbound HTTPS/WebSocket, and inspect for SOCKS-style tunneling from workstation processes. (M1037 Filter Network Traffic.)
- Segment IT-management infrastructure (SysAid/RMM) from crown-jewel systems, and treat provider-managed hosts as a distinct trust zone — Cavern targets IT providers precisely to pivot downstream. (M1030 Network Segmentation.)
- Tiered administration / LAPS and LDAP hardening (signing + channel binding, query rate-limiting) to blunt
ode.dllAD recon and brute-force. (M1026 Privileged Account Management / M1015 Active Directory Configuration.) - Application allow-listing for server roles (deny unsigned/unexpected .NET modules and webshell writes to IIS content roots). (M1045 Code Signing / M1038.)
Deployable Playbooks
P1 · Sweep for the Cavern side-load staging (WinDir + out-of-place uxtheme.dll)
$hits = @()
$dirs = 'C:\ProgramData\WinDir','C:\Users\Public','C:\Windows\Temp'
foreach ($d in $dirs) {
if (Test-Path $d) {
$hits += Get-ChildItem -Path $d -Recurse -Include 'WinDirStat.exe','uxtheme.dll',
'n-HTCommp.dll','n-ten.dll','n-sws.dll','mhm.dll','db.dll','ode.dll','config.txt' `
-ErrorAction SilentlyContinue | Select-Object FullName, Length, LastWriteTime
}
}
# Any uxtheme.dll NOT under System32/SysWOW64/WinSxS is suspect:
$hits += Get-ChildItem 'C:\' -Recurse -Filter 'uxtheme.dll' -ErrorAction SilentlyContinue |
Where-Object { $_.FullName -notmatch '\\Windows\\(System32|SysWOW64|WinSxS)\\' } |
Select-Object FullName, Length, LastWriteTime
$hits
P2 · Enforce Safe DLL search order + deny-by-path execution (WDAC/AppLocker prep)
# Safe DLL search mode (reduces side-load surface) Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager' ` -Name 'SafeDllSearchMode' -Type DWord -Value 1 Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager' ` -Name 'CWDIllegalInDllSearch' -Type DWord -Value 0xFFFFFFFF # Then author an AppLocker/WDAC deny rule for %ProgramData%, %Public%, %Windir%\Temp EXEs. Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager' -Name SafeDllSearchMode
P3 · Hunt IIS content roots for the cac.aspx webshell
$roots = Get-ChildItem 'C:\inetpub\wwwroot' -Directory -ErrorAction SilentlyContinue
Get-ChildItem 'C:\inetpub\wwwroot' -Recurse -Filter 'cac.aspx' -ErrorAction SilentlyContinue |
Select-Object FullName, Length, LastWriteTime, @{n='SHA256';e={(Get-FileHash $_.FullName -Algorithm SHA256).Hash}}
P4 · Block the Cavern C2 domains via local DNS sinkhole (stopgap)
$hostsFile = "$env:WINDIR\System32\drivers\etc\hosts"
$block = 'hospitalinstallation.com','adserviceupdate.com','hygienehistory.com'
foreach ($d in $block) {
if (-not (Select-String -Path $hostsFile -Pattern ([regex]::Escape($d)) -Quiet)) {
Add-Content -Path $hostsFile -Value "0.0.0.0 $d"
Add-Content -Path $hostsFile -Value "0.0.0.0 www.$d"
}
}
# Prefer an enterprise DNS/proxy block; the hosts file is a per-host stopgap only.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the host in Falcon; preserve memory, the C:\ProgramData\WinDir\ directory, and any inpt\/outpt\ working dirs; do NOT reboot (lose volatile module/AppDomain and tunnel state). | SOC | RTR capture, process tree, netconns |
| Eradicate | Kill WinDirStat.exe / the sideloaded Agent; delete the WinDirStat + uxtheme.dll pair, module DLLs, stego PNGs and config; remove any cac.aspx webshell; block Cavern hashes (Q4) and domains (Q5). | IR | Deleted-file hashes, task/service diff |
| Identity recovery | Reset credentials exposed to ode.dll AD recon (especially any brute-forced or privileged accounts); rotate service accounts on affected SQL servers (db.dll enumeration); review for new/altered AD objects. | IR + IdP | AD change log, password-reset record |
| Hunt-back | Sweep the fleet with Q1–Q9; pivot on the module SHA-256 and C2 domains; because Cavern targets IT providers to pivot, review trust relationships and downstream/managed hosts for the same side-load pattern. | Threat Hunt | Fleet query results, SysAid/IIS logs |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1574.002 | WinDirStat side-load host in staging path | Q1 | Yes | Good |
| T1574.002 | Cavern Agent uxtheme.dll staged | Q2 | Yes | Good |
| T1129 | Cavern module DLLs on disk | Q3 | — | Partial (FP-tuned) |
| Atomic hashes | Known-bad Agent / module files | Q4 | IOC | Good |
| T1071.001 | C2 domain resolution | Q5 | Yes | Good |
| T1059 / T1087 / T1046 | Sideloaded host runs shell/recon | Q6 | Yes | Good |
| T1027.003 | Stego payloads / config / working dirs | Q7 | — | Partial |
| T1505.003 | cac.aspx webshell (older variant) | Q8 | — | Partial (pair with §7) |
| T1090 / T1571 | SOCKS5 / WebSocket tunnel egress | Q9 | — | Partial (scoped) |
| AD / SQL recon (deep) | ode.dll LDAP brute-force, db.dll SQL export | — | — | Gap — LDAP/SQL query visibility via native audit (§7) |
Detection is strongest at the side-load primitive (WinDirStat from a staging path, out-of-place uxtheme.dll), the atomic hashes, the C2 domains, and the sideloaded-host-spawns-recon behaviour — all low-FP. Module-DLL and stego hunts need environment tuning. The deepest recon (LDAP/SQL enumeration inside the module code) is a partial gap best closed with directory/database audit logging (§7).
Hunt Summary Ticket
TITLE: Cavern Manticore / Cav3rn modular C2 hunt
SEVERITY: Critical - active Iran/MOIS espionage (IT-provider targeting)
SCOPE: Windows endpoints/servers (SysAid, IT-mgmt, IIS);
DNS/egress; Active Directory audit
HYPOTHESIS: Cavern Manticore abused SysAid's update feature to side-load
a trojanized uxtheme.dll (Cavern Agent) via WinDirStat.exe,
then loaded modules for AD/SQL recon, C2 and SOCKS tunneling.
QUERIES: Q1 WinDirStat staging | Q2 uxtheme.dll stage | Q3 module DLLs
Q4 hashes | Q5 C2 domains | Q6 host-spawns-recon
Q7 stego/config | Q8 cac.aspx webshell | Q9 tunnel egress
DO FIRST: Q1, Q2, Q5, Q6 (lowest FP, structural) then Q4, Q3.
FINDINGS: <record hosts / hashes / domains / SysAid + IIS findings here>
GAPS: Deep LDAP/SQL recon inside modules (use §7 native audit).
ACTIONS: Patch/monitor SysAid; block C2 domains; deny-by-path exec;
Safe DLL search order; block Q4 hashes; isolate + IR;
hunt downstream/managed hosts (provider pivot).
OWNER: HuntPack
VERSION: v0.2 · 2026-07-07
Changelog
table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.References
| Tier | Source | Used For | Access Date |
|---|---|---|---|
| 1 · Vendor | Check Point Research — Cavern Manticore: Exposing Iran-Linked Modular C2 Framework | Primary analysis, module set, side-load chain, C2 domains, SHA-256 hashes, host artifacts, cac.aspx webshell | 2026-07-07 |
| 2 · Press | The Hacker News — Iran-Linked Hackers Use New Cavern C2 Framework to Target Israeli Organizations | MOIS attribution, SysAid abuse, module list, MuddyWater/Lyceum overlap | 2026-07-07 |
| 2 · Press | Cyber Security News — Cavern Manticore Abuses SysAid RMM and WinDirStat DLL Sideloading | WinDirStat side-load vector, deployment path corroboration | 2026-07-07 |
| Ref | MITRE ATT&CK — T1574.002 DLL Side-Loading | Technique mapping, mitigations | 2026-07-07 |