SimpleHelp CVE-2026-48558 — TaskWeaver Loader & Djinn Stealer
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.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry Forward |
|---|---|---|---|
| 1 · Vendor | Horizon3.ai disclosure + IOCs | Root cause: OIDC token signature not verified; forged-token → Technician. Log IOCs in server.log ("Registering technician login", "Configuration save requested (Forged Attacker…)"). | Yes |
| 1 · Gov | CISA KEV (BOD 26-04) | Added to KEV; federal remediation due 2026-07-07. Confirms active exploitation. | Yes |
| 2 · IR | Blackpoint (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 · Press | SecurityWeek / Help Net Security (2026-06-16) | ~14,000 exposed servers; ~7.2% use vulnerable OIDC auth. CVSS 10. | Partial |
| 2 · Press | Cybersecurity News | Exposure 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.
Hunt Brief & Attack Chain
Hunt hypotheses (fidelity-ordered)
- H1 (high): A SimpleHelp server-side process spawns
node.exeon a managed host — TaskWeaver loader execution through the RMM channel. - H2 (high):
node.exeexecutes a script namedjquery.js(or a similarly mis-named bulky JS) — direct TaskWeaver signature. - H3 (high): The SimpleHelp service spawns interactive shells / LOLBins (
powershell.exe,cmd.exe,curl.exe,certutil.exe) — hands-on-keyboard via forged technician. - H4 (medium):
node.exemakes outbound connections / DNS to ephemeral Cloudflare-style hosting (loader pull or stealer exfil). - H5 (medium): A process enumerates credential stores (
.aws,.ssh,ghCLI, Docker, kube, wallets) — Djinn Stealer harvest. - H6 (server-side): SimpleHelp
server.logshows an unexpected technician registration / forged config-save — primary server-side IOC (native hunt §7).
Attack chain
| Step | Action | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 · Initial Access | Forged OIDC token → Technician session on exposed SimpleHelp server | SimpleHelp server.log; web/proxy logs | Native log hunt (§7) — unexpected technician registration |
| 2 · Execution | Technician transfers + runs TaskWeaver (jquery.js) via node.exe | ProcessRollup2 | Q1, Q2 |
| 3 · Discovery | TaskWeaver fingerprints host; beacons recon | NetworkConnectIP4, DnsRequest | Q4, Q7 |
| 4 · Credential Access | Djinn Stealer harvests cloud/SSH/SCM/AI/wallet creds | ProcessRollup2 (cmd-line), file reads | Q6 |
| 5 · Hands-on-keyboard | Operator runs shells / download utilities via RMM | ProcessRollup2 | Q5 |
| 6 · Persistence (off-host) | Stolen cloud/SSH/SCM creds reused to re-enter independent of RMM | Cloud/IdP logs (out of EDR scope) | Identity hunt (§7) |
Consolidated IOC Table
| Type | Value | Confidence | Action | Context |
|---|---|---|---|---|
| Filename | jquery.js (~1.08 MB, single line, obfuscated) | medium | hunt | TaskWeaver loader run via node.exe (Blackpoint) |
| Process behavior | SimpleHelp service → node.exe | high | hunt | Loader exec via RMM channel |
| Infra pattern | Ephemeral Cloudflare hosting (e.g. *.trycloudflare.com, *.workers.dev) | medium | hunt | Loader retrieved from temporary Cloudflare URL |
| Log string | Registering technician login for <email> | high | hunt | SimpleHelp server.log — forged technician (Horizon3) |
| Log string | Configuration save requested (Forged Attacker - <email> [Technicians] [New Anon]) | high | hunt | Server config tamper (Horizon3) |
| Tooling | TaskWeaver (Node.js loader) · Djinn Stealer (cross-platform) | high | hunt | Named by Blackpoint / Help Net Security |
| SHA256 | REPLACE_WITH_TASKWEAVER_SHA256 | n/a | detect | Placeholder — populate when published |
| Domain/IP | REPLACE_WITH_C2 | n/a | detect | Placeholder — 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.
Affected Surface & Telemetry Matrix
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| SimpleHelp server (the exposed RMM) | Application server.log; web/proxy logs | Critical | High — app logs often not in EDR |
| Managed Windows endpoints | ProcessRollup2, NetworkConnectIP4, DnsRequest | Critical | Low — native Falcon |
| Managed macOS / Linux endpoints | ProcessRollup2 (Falcon for Mac/Linux) | High | Medium — sensor coverage varies |
| Cloud / IdP (AWS, Azure, GCP, Okta, GitHub) | Control-plane / auth logs | High | High — post-theft reuse is off-host |
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Query / Control |
|---|---|---|---|
| Initial Access | T1190 Exploit Public-Facing App | Forged OIDC token → SimpleHelp Technician session | §7, Patch |
| Execution | T1059.007 JavaScript | TaskWeaver jquery.js run via node.exe | Q1, Q2 |
| Execution | T1219 Remote Access Software | SimpleHelp RMM used as execution vector | Q1, Q5 |
| Command & Control | T1105 Ingress Tool Transfer | Loader pulled from ephemeral Cloudflare host | Q4, Q7 |
| Credential Access | T1555 Credentials from Password Stores | Djinn harvests cloud / SCM / wallet creds | Q6 |
| Credential Access | T1552.001 Credentials in Files | Reads .aws, .ssh, gh, Docker, kube configs | Q6 |
| Collection | T1005 Data from Local System | Browser history, PGP, shell history | Q6 |
| Exfiltration | T1041 Exfil Over C2 Channel | node.exe outbound to staging host | Q4, Q7 |
Native Audit-Log Hunts (non-CQL)
SimpleHelp server (most important — server-side)
- Search
server.log(and rotatedlogs/<YYYYMMDD-HHMMSS>/server.log) forRegistering technician login forandConfiguration 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.
CrowdStrike LogScale CQL Hunt Queries
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)
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)
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)
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)
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)
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)
CrowdStrike Custom IOA Recommendations
| IOA Name | Pattern | Exclusions | Action |
|---|---|---|---|
| RMM-Spawns-Node (SimpleHelp) | Parent Remote Access.exe/RemoteWorker.exe → child node.exe | Approved Node-based RMM plugins (allowlist by hash) | Detect → Block on confirm |
| Node-Runs-jQuery | Image node.exe with command line containing jquery.js | None expected — pseudo-deterministic | Block |
| RMM-Spawns-Shell | Parent SimpleHelp service → powershell/cmd/curl/certutil | Named maintenance accounts / change windows | Detect |
Promote Q2 (Node-Runs-jQuery) first — lowest FP, highest specificity. Deploy others as Detect until baselined against legitimate technician activity, then raise to Block.
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.
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
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
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
# 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"
Detection Validation Gates
| Gate | Check | Pass Criteria |
|---|---|---|
| Telemetry ready | ProcessRollup2 + NetworkConnectIP4 + DnsRequest flowing from managed endpoints | Recent events for representative hosts |
| Benign baseline | Run Q1/Q5 over 7–14 days | Catalog any legitimate Node-based RMM plugins / technician shell use before alerting |
| Positive test | In a lab, launch node.exe innocuous.js from a service parent | Q1/Q2 fire; tune filename match |
| Promotion | Q2 to Custom IOA Block; Q1/Q5 to Detect | Zero FP across baseline window before Block |
Hardening — Tiered
- 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)
- 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)
- Application-allowlist
node.exeon 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.
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])
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain affected endpoints in Falcon; take the SimpleHelp server off public internet; disable/lock unexpected technician accounts | SOC / IT Ops | Containment ID, console screenshots, server.log |
| Eradicate | Patch SimpleHelp; remove TaskWeaver artifacts (jquery.js) + Djinn payloads; kill node.exe chains; disable vulnerable OIDC group-auth | IT Ops | File hashes, process timeline |
| Rotate | Rotate all creds Djinn can reach: cloud keys, SSH keys, SCM/PAT, AI API keys, browser-saved + wallet secrets for affected identities | Identity / Cloud team | Key-rotation tickets, IdP audit |
| Recover | Restore from known-good; re-enroll endpoints; confirm §8 queries return clean | IT Ops | Clean-scan results |
| Lessons | Verify exposure reduced; deploy IOAs; brief on RMM-as-vector risk | Security lead | Post-incident report |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1190 | OIDC forged-token auth bypass | — | — | GAP — server-side log only (§7) |
| T1059.007 / T1219 | TaskWeaver via node.exe / RMM | Q1, Q2 | Yes | Good |
| T1105 | Loader pull / exfil | Q4, Q7 | — | Partial — IP/domain not yet published |
| T1555 / T1552.001 | Djinn credential harvest | Q6 | — | Partial — high FP, pivot only |
| T1041 | Exfil over C2 | Q4 | — | Partial |
| Post-theft reuse | Stolen cloud/SCM cred reuse | — | — | GAP — 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.
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
Changelog
table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.References
| Tier | Source | Used For | Access Date |
|---|---|---|---|
| 1 · Vendor | Horizon3.ai — CVE-2026-48558 IOCs | Root cause, server-log IOCs, exploit preconditions | 2026-06-30 |
| 1 · Gov | CISA KEV Catalog | Active exploitation, remediation deadline | 2026-06-30 |
| 2 · IR/Press | Help Net Security — exploited to deliver Djinn Stealer | TaskWeaver / Djinn behavior, jquery.js, node.exe | 2026-06-30 |
| 2 · Press | Help Net Security — RMM flaw, full endpoint access | CVSS, exposure scale, OIDC details | 2026-06-30 |
| 2 · Press | SecurityWeek — exploited for malware delivery | Corroboration of in-the-wild use | 2026-06-30 |
| 2 · Press | Cybersecurity News — ~14,000 servers exposed | Exposure trend | 2026-06-30 |