SimpleHelp CVE-2026-48558 — TaskWeaver Loader & Djinn Stealer

OIDC authentication bypass in SimpleHelp RMM (CVSS 10.0) abused to push a Node.js loader and a cross-platform credential stealer onto managed endpoints.
Threat
CVE-2026-48558 · SimpleHelp RMM
Severity
EXPLOITED ITW · CVSS 10
Type
Auth Bypass → Loader → Stealer
Access
Unauthenticated (network)
Version
v0.2 · 2026-06-30
Author
HuntPack
Confidence
High (vendor-corroborated)
01

Executive Summary

CVE-2026-48558 is a critical (CVSS 10.0) authentication bypass in the OpenID Connect (OIDC) login flow of SimpleHelp remote-support / RMM servers. When OIDC is configured, the server does not verify the cryptographic signature of identity tokens, so an unauthenticated attacker can submit a forged token and be issued a fully authenticated Technician session. A Technician can remote into managed endpoints, transfer files, and execute scripts — turning a single internet-exposed RMM server into a fan-out point across every device it manages.

Horizon3.ai disclosed the flaw on June 12, 2026; by late June it was under active exploitation and added to the CISA KEV catalog (BOD 26-04 remediation due July 7, 2026). In intrusions reported by Blackpoint, attackers used the technician session to drop TaskWeaver — a heavily obfuscated Node.js loader delivered as a ~1.08 MB single-line jquery.js run through node.exe — which fingerprints the host and stages Djinn Stealer, a cross-platform (Windows/macOS/Linux) info-stealer that harvests cloud keys, SSH keys, source-control sessions, AI-tooling configs, and crypto wallets. Nearly 14,000 SimpleHelp servers are internet-exposed and ~7% run the vulnerable OIDC configuration.

Highest-value defensive angle: the RMM server process tree is the choke point. SimpleHelp's service spawning node.exe, interactive shells, or download utilities — and node.exe executing a bloated jquery.js — is high-fidelity and rare in benign operations. The stolen-credential blast radius (cloud/SSH/SCM) means containment must include credential rotation, not just server patching.

Defender priority: Hunt for the SimpleHelp service (Remote Access.exe / RemoteWorker.exe) spawning node.exe or shells (Q1, Q5), and treat any hit as a credential-theft incident — rotate cloud keys, SSH keys, and SCM tokens for every account that touched affected hosts.

02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry Forward
1 · VendorHorizon3.ai disclosure + IOCsRoot cause: OIDC token signature not verified; forged-token → Technician. Log IOCs in server.log ("Registering technician login", "Configuration save requested (Forged Attacker…)").Yes
1 · GovCISA KEV (BOD 26-04)Added to KEV; federal remediation due 2026-07-07. Confirms active exploitation.Yes
2 · IRBlackpoint (via Help Net Security, 2026-06-30)Post-exploit: technician session → file transfer + remote exec → TaskWeaver (jquery.js via node.exe) → Djinn Stealer.Yes
2 · PressSecurityWeek / Help Net Security (2026-06-16)~14,000 exposed servers; ~7.2% use vulnerable OIDC auth. CVSS 10.Partial
2 · PressCybersecurity NewsExposure grew from ~3,400 (2025) to ~14,000 (June 2026).Partial

Intel note: No atomic file hashes, C2 IPs, or stealer domains were published in primary sources as of the access date. Endpoint coverage here is therefore behavior-led; atomic-IOC slots in §10 are placeholders to be filled when vendor IOCs publish.

03

Hunt Brief & Attack Chain

Hunt hypotheses (fidelity-ordered)

  1. H1 (high): A SimpleHelp server-side process spawns node.exe on a managed host — TaskWeaver loader execution through the RMM channel.
  2. H2 (high): node.exe executes a script named jquery.js (or a similarly mis-named bulky JS) — direct TaskWeaver signature.
  3. H3 (high): The SimpleHelp service spawns interactive shells / LOLBins (powershell.exe, cmd.exe, curl.exe, certutil.exe) — hands-on-keyboard via forged technician.
  4. H4 (medium): node.exe makes outbound connections / DNS to ephemeral Cloudflare-style hosting (loader pull or stealer exfil).
  5. H5 (medium): A process enumerates credential stores (.aws, .ssh, gh CLI, Docker, kube, wallets) — Djinn Stealer harvest.
  6. H6 (server-side): SimpleHelp server.log shows an unexpected technician registration / forged config-save — primary server-side IOC (native hunt §7).

Attack chain

StepActionTelemetryHunt Angle
1 · Initial AccessForged OIDC token → Technician session on exposed SimpleHelp serverSimpleHelp server.log; web/proxy logsNative log hunt (§7) — unexpected technician registration
2 · ExecutionTechnician transfers + runs TaskWeaver (jquery.js) via node.exeProcessRollup2Q1, Q2
3 · DiscoveryTaskWeaver fingerprints host; beacons reconNetworkConnectIP4, DnsRequestQ4, Q7
4 · Credential AccessDjinn Stealer harvests cloud/SSH/SCM/AI/wallet credsProcessRollup2 (cmd-line), file readsQ6
5 · Hands-on-keyboardOperator runs shells / download utilities via RMMProcessRollup2Q5
6 · Persistence (off-host)Stolen cloud/SSH/SCM creds reused to re-enter independent of RMMCloud/IdP logs (out of EDR scope)Identity hunt (§7)
04

Consolidated IOC Table

TypeValueConfidenceActionContext
Filenamejquery.js (~1.08 MB, single line, obfuscated)mediumhuntTaskWeaver loader run via node.exe (Blackpoint)
Process behaviorSimpleHelp service → node.exehighhuntLoader exec via RMM channel
Infra patternEphemeral Cloudflare hosting (e.g. *.trycloudflare.com, *.workers.dev)mediumhuntLoader retrieved from temporary Cloudflare URL
Log stringRegistering technician login for <email>highhuntSimpleHelp server.log — forged technician (Horizon3)
Log stringConfiguration save requested (Forged Attacker - <email> [Technicians] [New Anon])highhuntServer config tamper (Horizon3)
ToolingTaskWeaver (Node.js loader) · Djinn Stealer (cross-platform)highhuntNamed by Blackpoint / Help Net Security
SHA256REPLACE_WITH_TASKWEAVER_SHA256n/adetectPlaceholder — populate when published
Domain/IPREPLACE_WITH_C2n/adetectPlaceholder — populate when published

No atomic hashes / IPs were published in primary sources at access time (2026-06-30). The two SHA256/Domain rows are explicit placeholders — do not deploy them as-is.

05

Affected Surface & Telemetry Matrix

SurfaceRequired TelemetryPriorityGap Risk
SimpleHelp server (the exposed RMM)Application server.log; web/proxy logsCriticalHigh — app logs often not in EDR
Managed Windows endpointsProcessRollup2, NetworkConnectIP4, DnsRequestCriticalLow — native Falcon
Managed macOS / Linux endpointsProcessRollup2 (Falcon for Mac/Linux)HighMedium — sensor coverage varies
Cloud / IdP (AWS, Azure, GCP, Okta, GitHub)Control-plane / auth logsHighHigh — post-theft reuse is off-host
06

ATT&CK Mapping

TacticTechniqueObserved BehaviorQuery / Control
Initial AccessT1190 Exploit Public-Facing AppForged OIDC token → SimpleHelp Technician session§7, Patch
ExecutionT1059.007 JavaScriptTaskWeaver jquery.js run via node.exeQ1, Q2
ExecutionT1219 Remote Access SoftwareSimpleHelp RMM used as execution vectorQ1, Q5
Command & ControlT1105 Ingress Tool TransferLoader pulled from ephemeral Cloudflare hostQ4, Q7
Credential AccessT1555 Credentials from Password StoresDjinn harvests cloud / SCM / wallet credsQ6
Credential AccessT1552.001 Credentials in FilesReads .aws, .ssh, gh, Docker, kube configsQ6
CollectionT1005 Data from Local SystemBrowser history, PGP, shell historyQ6
ExfiltrationT1041 Exfil Over C2 Channelnode.exe outbound to staging hostQ4, Q7
07

Native Audit-Log Hunts (non-CQL)

SimpleHelp server (most important — server-side)

  • Search server.log (and rotated logs/<YYYYMMDD-HHMMSS>/server.log) for Registering technician login for and Configuration save requested (Forged Attacker. Any unrecognized technician = compromise.
  • In the SimpleHelp admin console: Administration → Technicians → Gear → Show Group Authenticated Users and review for unexpected/anonymous accounts.
  • Confirm whether OIDC is enabled with a TechnicianGroup and "Allow group authenticated logins" — that trio is the exploit precondition.

Identity / cloud (post-theft reuse)

  • AWS CloudTrail / Azure sign-in / GCP audit: look for access-key or session reuse from new ASNs shortly after any affected host's activity.
  • GitHub audit log: new PATs, SSH keys, or OAuth grants on accounts whose workstations are SimpleHelp-managed.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · SimpleHelp service spawning node.exe
CONF HIGHFP LOWCOST LOW

Looks for: the SimpleHelp server-side process tree launching node.exe — TaskWeaver execution through the RMM channel.

// HUNT: SimpleHelp service spawning node.exe (TaskWeaver loader via RMM)
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(Remote Access|RemoteWorker|SimpleService|SimpleHelpCustomer)\.exe$/i
| FileName=/^node\.exe$/i
| table([ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, SHA256HashData], limit=200)
Q2 · node.exe running jquery.js loader
CONF HIGHFP LOWCOST LOW

Looks for: node.exe executing a script named jquery.js — a JS framework name is never a legitimate Node entrypoint, making this a near-deterministic TaskWeaver signature.

// HUNT: node.exe executing jquery.js (TaskWeaver loader)
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^node\.exe$/i
| CommandLine=/jquery\.js/i
| table([ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Q5 · SimpleHelp session spawning shells / download utilities
CONF HIGHFP MEDCOST LOW

Looks for: hands-on-keyboard activity — the SimpleHelp service spawning shells or ingress utilities. FP: legitimate technicians do run PowerShell/cmd via RMM; scope to off-hours, unexpected hosts, or correlate with Q1/§7 forged-technician findings before escalating.

// HUNT: SimpleHelp service spawning interactive shells / ingress tools
// CONF: high  FP: med  COST: low | REQUIRES: ProcessRollup2
// TUNING: exclude approved technician accounts / maintenance windows
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(Remote Access|RemoteWorker|SimpleService)\.exe$/i
| FileName=/^(powershell|pwsh|cmd|curl|certutil|bitsadmin|mshta)\.exe$/i
| table([ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Q4 · node.exe outbound connections (loader pull / exfil)
CONF MEDFP MEDCOST LOW

Looks for: external connections sourced from node.exe — loader download or stealer exfil. FP: Node dev workstations legitimately reach the internet; pair with Q1/Q2 hits or scope to servers/non-dev endpoints.

// HUNT: node.exe outbound network connections
// CONF: med  FP: med  COST: low | REQUIRES: NetworkConnectIP4
// TUNING: exclude RFC1918 destinations and known dev subnets
#event_simpleName=/NetworkConnectIP4/
| ContextBaseFileName=/^node\.exe$/i
| table([ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort, LocalPort], limit=200)
Q7 · node.exe DNS to ephemeral hosting
CONF MEDFP MEDCOST LOW

Looks for: node.exe resolving ephemeral Cloudflare-style hosting used to stage the loader. FP: some SaaS tooling uses *.workers.dev; validate the resolving process and timing against Q1/Q2.

// HUNT: node.exe DNS lookups to throwaway Cloudflare hosts
// CONF: med  FP: med  COST: low | REQUIRES: DnsRequest
// TUNING: workers.dev, pages.dev and r2.cloudflarestorage.com are shared Cloudflare infrastructure with heavy legitimate use -- treat those three as enrich-only and alert on trycloudflare.com, where a node.exe lookup has no benign explanation on a server. Exclude developer workstations running Wrangler.
#event_simpleName=/DnsRequest/
| ContextBaseFileName=/^node\.exe$/i
| DomainName=/trycloudflare\.com|workers\.dev|pages\.dev|r2\.cloudflarestorage\.com/i
| table([ComputerName, ContextBaseFileName, DomainName], limit=200)
Q6 · Credential-store enumeration (Djinn Stealer)
CONF MEDFP HIGHCOST MED

Looks for: process command lines referencing the cloud / SCM / wallet credential stores Djinn targets. FP: CLI tooling (aws, gh, kubectl, docker) references these paths normally — treat as a pivot, correlate with Q1/Q2, and prioritize when the parent is node.exe or a SimpleHelp child.

// HUNT: credential-store paths consistent with Djinn Stealer harvest
// CONF: med  FP: high  COST: med | REQUIRES: ProcessRollup2
// TUNING: prioritize where ParentBaseFileName=node.exe; exclude approved admin tooling
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| CommandLine=/\.aws|\.ssh|\.config\\gh|gh auth|docker\\config\.json|\.kube|keystore|wallet\.dat/i
| table([ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
09

CrowdStrike Custom IOA Recommendations

IOA NamePatternExclusionsAction
RMM-Spawns-Node (SimpleHelp)Parent Remote Access.exe/RemoteWorker.exe → child node.exeApproved Node-based RMM plugins (allowlist by hash)Detect → Block on confirm
Node-Runs-jQueryImage node.exe with command line containing jquery.jsNone expected — pseudo-deterministicBlock
RMM-Spawns-ShellParent SimpleHelp service → powershell/cmd/curl/certutilNamed maintenance accounts / change windowsDetect

Promote Q2 (Node-Runs-jQuery) first — lowest FP, highest specificity. Deploy others as Detect until baselined against legitimate technician activity, then raise to Block.

10

Machine-Readable IOC Appendix

One-click blocks for ingestion and audit. Atomic IOCs (hash/C2) are placeholders until vendors publish — the behavioral and audit blocks are deployable today.

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
sha256,REPLACE_WITH_TASKWEAVER_SHA256,prevent,critical,2026-12-30,TaskWeaver loader,campaign:SimpleHelp-CVE-2026-48558
domain,REPLACE_WITH_C2,detect,high,2026-09-30,Djinn staging/C2,campaign:SimpleHelp-CVE-2026-48558
Behavioral Signatureshunt logic
SimpleHelp service (Remote Access.exe / RemoteWorker.exe) -> node.exe
node.exe -> jquery.js  (bloated ~1MB single-line JS)
SimpleHelp service -> powershell/cmd/curl/certutil/mshta
node.exe -> outbound to trycloudflare.com / *.workers.dev / *.pages.dev
Named Toolingreference
TaskWeaver  - Node.js loader, delivered as jquery.js, host fingerprint + stage
Djinn Stealer - cross-platform (Win/macOS/Linux); steals AWS/Azure/GCP/Oracle/
  Okta/Cloudflare/DO/Linode keys, GitHub CLI + git config, SSH keys, Docker auth,
  Helm, npm/pnpm/Yarn creds, Claude/Gemini/Codex/Cline configs, BTC/ETH/XMR wallets,
  browser history + PGP + shell history
CVE-2026-48558 - SimpleHelp OIDC token-signature bypass -> forged Technician
SimpleHelp Server Log Auditserver-side
# Grep SimpleHelp server.log (and rotated logs/<ts>/server.log)
Registering technician login for
Configuration save requested (Forged Attacker -
# Admin console: Technicians -> Gear -> Show Group Authenticated Users
# Precondition check: OIDC enabled + TechnicianGroup + "Allow group authenticated logins"
11

Detection Validation Gates

GateCheckPass Criteria
Telemetry readyProcessRollup2 + NetworkConnectIP4 + DnsRequest flowing from managed endpointsRecent events for representative hosts
Benign baselineRun Q1/Q5 over 7–14 daysCatalog any legitimate Node-based RMM plugins / technician shell use before alerting
Positive testIn a lab, launch node.exe innocuous.js from a service parentQ1/Q2 fire; tune filename match
PromotionQ2 to Custom IOA Block; Q1/Q5 to DetectZero FP across baseline window before Block
12

Hardening — Tiered

Immediate (this week)
  • Patch SimpleHelp to the fixed release and verify version on every server (CISA KEV due 2026-07-07). (M1051 Update Software)
  • Take SimpleHelp servers off the public internet — front with VPN/ZTNA or IP allowlist. ~14k servers are exposed; exposure is the core risk. (M1035 Limit Access to Resource Over Network)
  • If OIDC isn't required, disable group-authenticated technician logins (the exploit precondition). (M1018 User Account Management)
  • Audit + purge unexpected technician accounts (console + server.log). (M1018)
Near term (1–4 weeks)
  • Deploy the §8 CQL as scheduled searches; promote Q2 to a Custom IOA. (M1040 Behavior Prevention)
  • Rotate credentials with blast radius: cloud access keys, SSH keys, SCM/PAT tokens, AI-tool API keys for any identity on affected hosts. Stolen creds outlive the RMM server. (M1027 Password Policies)
  • Enforce signed-token validation / IdP allowlisting on any remaining OIDC integrations. (M1032 Multi-factor Authentication)
Strategic (1–3 months)
  • Application-allowlist node.exe on servers/non-dev endpoints (WDAC/AppLocker) so RMM-spawned Node is blocked outright. (M1038 Execution Prevention)
  • Move RMM administration behind phishing-resistant MFA and a privileged-access workstation model. (M1032, M1026)
  • Short-lived, workload-scoped cloud credentials (OIDC federation, no long-lived keys on endpoints) to shrink stealer value. (M1027)

⚠ Vendor-specific: confirm the exact fixed SimpleHelp version and OIDC config steps against current SimpleHelp release notes before deploying.

13

Deployable Playbooks

1 · WDAC/AppLocker — block node.exe on servers (PowerShell, AppLocker example)

# Create a deny rule for node.exe on systems that should never run Node.
# PILOT ON ONE RING FIRST -- node.exe is legitimate on developer workstations and on
# anything shipping an Electron app (Teams, Slack, VS Code).
#
# PREREQUISITE: the Application Identity service (AppIDSvc) must be Running/Automatic,
# or AppLocker evaluates nothing.
#
# New-AppLockerPolicy requires -FileInformation piped from Get-AppLockerFileInformation,
# and -Xml is a SWITCH, not a value parameter. It also only emits Allow rules -- there is
# no Deny mode, so the deny is made by editing Action in the generated XML.

$nodePath = "C:\Program Files\nodejs\node.exe"

# 1. Generate a path rule for the binary (this produces an ALLOW rule).
Get-AppLockerFileInformation -Path $nodePath |
  New-AppLockerPolicy -RuleType Path -User "BUILTIN\Users" `
    -RuleNamePrefix "Block-Node-RMM" -Xml |
  Out-File C:\Temp\block-node.xml -Encoding utf8

# 2. EDIT C:\Temp\block-node.xml before merging:
#      - change Action="Allow" to Action="Deny" on the generated FilePathRule
#      - set EnforcementMode="AuditOnly" on the RuleCollection for the pilot week
#      - keep the three default Allow rules (Program Files, Windows, Administrators).
#        AppLocker is default-deny: a collection holding only a Deny rule and no Allow
#        rules blocks EVERY executable on the machine, including your RMM agent.

# 3. Merge, then review audit events for a week before enforcing.
Set-AppLockerPolicy -XmlPolicy C:\Temp\block-node.xml -Merge

Verify: during the AuditOnly week, check Applications and Services Logs > Microsoft > Windows > AppLocker > EXE and DLL for EventID 8003 (would-have-blocked). Zero unexpected entries means it is safe to set EnforcementMode="Enabled"; a real block then logs EventID 8004.
Rollback: set EnforcementMode="NotConfigured" and re-merge, or unlink the GPO and gpupdate /force. If a host is locked out by an over-broad policy, boot to Safe Mode (AppLocker does not enforce there) and stop AppIDSvc.

2 · Restrict SimpleHelp exposure (host firewall allowlist)

# Limit inbound to the SimpleHelp listener to your VPN/ZTNA egress range only.
#
# DO NOT add a companion "-RemoteAddress Any -Action Block" rule on TCP/443. Two reasons:
#   1. The Windows Filtering Platform does not evaluate host rules in creation order --
#      an explicit Block always overrides an explicit Allow, so it would also block the
#      VPN range this rule exists to permit.
#   2. Port 443 is not exclusive to SimpleHelp. An unscoped Block on 443 takes out ALL
#      inbound HTTPS on the host, not just the RMM listener.
# Scope the Allow, then let the profile default do the blocking.

# PILOT ON ONE HOST. Staged disabled -- review, then enable deliberately.
$vpnRange = "10.20.0.0/16"    # <-- replace with your real VPN/ZTNA egress range

# 1. Record current state so you can roll back exactly.
Get-NetFirewallProfile | Select-Object Name, DefaultInboundAction

# 2. Create the scoped allow rule, DISABLED. Nothing changes yet.
#    -Program scopes it to the SimpleHelp service binary so other HTTPS is untouched.
New-NetFirewallRule -DisplayName "SimpleHelp-Allow-VPN-only" -Direction Inbound `
  -Protocol TCP -LocalPort 443 -RemoteAddress $vpnRange -Action Allow -Enabled False

# 3. Confirm the rule matches what you intended, THEN enable it.
Get-NetFirewallRule -DisplayName "SimpleHelp-Allow-VPN-only" | Get-NetFirewallAddressFilter
# Enable-NetFirewallRule -DisplayName "SimpleHelp-Allow-VPN-only"

# 4. Only after step 3 verifies clean, set the profile default for the profile the
#    listener is exposed on. This is what blocks the public internet.
# Set-NetFirewallProfile -Name Public -DefaultInboundAction Block

Verify: from inside the VPN range, Test-NetConnection <host> -Port 443 returns TcpTestSucceeded : True; from outside it must fail. Confirm any other HTTPS service on the host is still reachable.
Rollback: Remove-NetFirewallRule -DisplayName "SimpleHelp-Allow-VPN-only" and Set-NetFirewallProfile -Name Public -DefaultInboundAction NotConfigured (or whatever step 1 recorded).

3 · Falcon CQL spot-check after hardening

# Should return ZERO results once node.exe is blocked on RMM servers:
#event_simpleName=/ProcessRollup2/
| ParentBaseFileName=/^(Remote Access|RemoteWorker)\.exe$/i
| FileName=/^node\.exe$/i
| table([ComputerName, FileName, CommandLine])
14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain affected endpoints in Falcon; take the SimpleHelp server off public internet; disable/lock unexpected technician accountsSOC / IT OpsContainment ID, console screenshots, server.log
EradicatePatch SimpleHelp; remove TaskWeaver artifacts (jquery.js) + Djinn payloads; kill node.exe chains; disable vulnerable OIDC group-authIT OpsFile hashes, process timeline
RotateRotate all creds Djinn can reach: cloud keys, SSH keys, SCM/PAT, AI API keys, browser-saved + wallet secrets for affected identitiesIdentity / Cloud teamKey-rotation tickets, IdP audit
RecoverRestore from known-good; re-enroll endpoints; confirm §8 queries return cleanIT OpsClean-scan results
LessonsVerify exposure reduced; deploy IOAs; brief on RMM-as-vector riskSecurity leadPost-incident report
15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1190OIDC forged-token auth bypassGAP — server-side log only (§7)
T1059.007 / T1219TaskWeaver via node.exe / RMMQ1, Q2YesGood
T1105Loader pull / exfilQ4, Q7Partial — IP/domain not yet published
T1555 / T1552.001Djinn credential harvestQ6Partial — high FP, pivot only
T1041Exfil over C2Q4Partial
Post-theft reuseStolen cloud/SCM cred reuseGAP — cloud/IdP logs (§7)

Strongest coverage is at execution (Q1/Q2 — high CONF, low FP). Two structural gaps remain: the server-side auth bypass (covered by native log hunts in §7, not EDR) and off-host credential reuse (cloud/IdP telemetry). Validation: baseline Q1/Q5 for benign technician activity before promoting to Block.

16

Hunt Summary Ticket

TITLE:      SimpleHelp CVE-2026-48558 -> TaskWeaver / Djinn Stealer
SEVERITY:   Critical (CVSS 10.0, exploited in the wild, CISA KEV)
SCOPE:      SimpleHelp RMM servers + all managed endpoints (Win/macOS/Linux)
HYPOTHESIS: Forged OIDC token -> Technician session -> node.exe loader -> stealer
QUERIES:    Q1 RMM->node | Q2 node->jquery.js | Q5 RMM->shell | Q4 net | Q7 dns | Q6 creds
DO FIRST:   Run Q1+Q2; grep server.log for "Registering technician login" /
            "Configuration save requested (Forged Attacker"; review technician list
FINDINGS:   <fill in>
GAPS:       Server-side auth bypass (log-only); off-host cred reuse (cloud/IdP)
ACTIONS:    Patch + de-expose SimpleHelp; purge rogue technicians; ROTATE cloud/SSH/
            SCM/AI keys for affected identities
OWNER:      <assign>
VERSION:    v0.2 · 2026-06-30
17

Changelog

v0.22026-07-24CQL correctness pass. All 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.
v0.12026-06-30Initial pack — 6 CQL hunts, IOA recs, server-side log hunts, tiered hardening, containment with mandatory credential rotation. Atomic hash/C2 IOCs are placeholders pending vendor publication.
18

References

TierSourceUsed ForAccess Date
1 · VendorHorizon3.ai — CVE-2026-48558 IOCsRoot cause, server-log IOCs, exploit preconditions2026-06-30
1 · GovCISA KEV CatalogActive exploitation, remediation deadline2026-06-30
2 · IR/PressHelp Net Security — exploited to deliver Djinn StealerTaskWeaver / Djinn behavior, jquery.js, node.exe2026-06-30
2 · PressHelp Net Security — RMM flaw, full endpoint accessCVSS, exposure scale, OIDC details2026-06-30
2 · PressSecurityWeek — exploited for malware deliveryCorroboration of in-the-wild use2026-06-30
2 · PressCybersecurity News — ~14,000 servers exposedExposure trend2026-06-30