Edgecution — Malicious Microsoft Edge Extension Backdoor
Executive Summary
What it is. Edgecution (named by Zscaler ThreatLabz) is a malicious Microsoft Edge extension used as an initial-access foothold. The attacker poses as IT support on Microsoft Teams and steers the user to a fake "Outlook Updates Management Console" page — a ClickFix lure — which drops an obfuscated AutoHotKey script and an encrypted ZIP (PK magic bytes stripped). The payload installs an Edge extension ("Edge Monitoring Agent") that abuses the Chrome Native Messaging protocol as a bridge out of the browser sandbox to a batch launcher (native_host.bat) which starts an embedded Python 3.13.3 backdoor.
Why it matters. The extension component beacons to C2 over WebSocket (WSS) fronted by AWS CloudFront — blending with legitimate CDN traffic — while the Python backdoor delivers full host control: shell and PowerShell execution, arbitrary Python, file write, and process enumeration. To stay invisible, the extension is loaded into a headless Edge instance via a scheduled task, so there is no visible browser window. The operator is assessed to be an initial-access broker tied to the Payouts King ransomware operation — Edgecution is the front door; ransomware is the likely follow-on.
The hunt is favorable. Unlike an appliance exploit, Edgecution runs entirely on the endpoint and leaves crisp, high-fidelity artifacts: a headless msedge.exe launched with --load-extension + --headless=new against a non-default --user-data-dir; msedge.exe spawning cmd.exe/python.exe via native messaging; files under %LOCALAPPDATA%\Microsoft\Edge\User Data\test1; an AppKey value under HKCU\SOFTWARE\Microsoft\Edge; and WSS beacons to four specific CloudFront hosts. Published SHA256 hashes exist for both components.
Defender priority: A browser is not supposed to spawn a shell. Hunt msedge.exe loading an unpacked extension into a headless, non-default profile and any Edge → cmd/python/powershell parent-child chain — that single behavioral pair is the highest-value, lowest-FP catch, independent of the (perishable) C2 domains and hashes.
Source Review & Web Hunter Notes
| Tier | Source | Key finding | Carry fwd |
|---|---|---|---|
| 1 Vendor | Zscaler ThreatLabz — "Payouts King ransomware IAB deploys new Edgecution" | Full technical teardown: extension + native messaging + Python backdoor, install paths, registry AppKey, headless-Edge scheduled task, WSS/CloudFront C2, two SHA256 hashes, command IDs. | yes |
| 2 Press | BleepingComputer — "Malicious Edge extension abuses Native Messaging as bridge to malware" | Corroborates native-messaging sandbox-escape mechanism and ransomware initial-access context. | yes |
| 2 Press | SC Media — "New 'Edgecution' malware uses browser extension to deploy ransomware" | Confirms IAB→ransomware linkage and Teams-impersonation delivery. | yes |
| 3 Analytic | HivePro / SecurityOnline threat advisories | Independent restatement of the chain (ClickFix lure → extension → host compromise); no new atomics. | partial |
Intel gaps / perishability: C2 lives on AWS CloudFront, so the four *.cloudfront.net hosts are rotatable and will expire quickly — hunt them but do not rely on them long-term. The randomized native-messaging host name (com.[rand].api) varies per campaign, so match on the path/behavior rather than the exact host name. The two SHA256 hashes are point-in-time; the behavioral hunts (§8) are the durable coverage.
Hunt Brief & Attack Chain
Hunt hypotheses (fidelity-ordered)
| # | Hypothesis | MITRE | Telemetry | Conf |
|---|---|---|---|---|
| H1 | msedge.exe is launched with --load-extension + --headless=new against a non-default --user-data-dir (e.g. ...\User Data\Recovery) — the covert extension load. | T1547.013 | ProcessRollup2 | HIGH |
| H2 | msedge.exe (or its native-host .bat) spawns cmd.exe, python.exe, or powershell.exe — the native-messaging sandbox escape driving the backdoor. | T1059 / T1547.013 | ProcessRollup2 | HIGH |
| H3 | Files named native_host.bat / extension.log or any write under ...\Edge\User Data\test1 appear on disk. | T1105 / T1036.005 | FileCreateInfo / PeFileWritten | HIGH |
| H4 | Registry value AppKey is set under HKCU\SOFTWARE\Microsoft\Edge (holds the hex key for backdoor string decryption). | T1112 / T1140 | RegGenericValueUpdate | MED |
| H5 | Host resolves / connects to one of the four Edgecution CloudFront C2 hosts over WSS. | T1071.001 / T1102 | DnsRequest / NetworkConnectIP4 | HIGH |
| H6 | A scheduled task is registered whose action launches headless Edge with an unpacked extension (persistence for the beacon). | T1053.005 | ScheduledTaskRegistered | HIGH |
| H7 | ClickFix precursor: AutoHotKey executes, or a clipboard-pasted cmd/powershell one-liner runs from a browser-driven session. | T1204.001 / T1059 | ProcessRollup2 | MED |
| H8 | Either published SHA256 (extension background.js or Python backdoor) is seen on any host. | — | ProcessRollup2 / PeFileWritten | HIGH |
Attack chain
| Step | Action | Telemetry / hunt angle |
|---|---|---|
| 1 · Lure (T1566.002) | Attacker impersonates IT on Teams; directs user to fake "Outlook Updates Management Console". | Teams logs, proxy to lure domain. H7. |
| 2 · User execution (T1204.001) | Victim clicks a "download" button → obfuscated AutoHotKey / clipboard cmd / PowerShell / encrypted ZIP. | AHK run, clipboard-paste one-liner. H7. |
| 3 · Deobfuscate (T1140) | Encrypted ZIP (PK bytes removed) is reassembled; AppKey written for string decryption. | File writes, registry AppKey. H3/H4. |
| 4 · Install extension (T1547.013) | Extension + native host dropped to ...\Edge\User Data\test1\{extension,native}. | native_host.bat, test1 path. H3. |
| 5 · Sandbox escape (T1559/T1059) | Native messaging bridges the extension to native_host.bat → embedded Python backdoor. | msedge → cmd/python parent-child. H2. |
| 6 · Persist (T1053.005) | Scheduled task launches headless Edge with the unpacked extension each session. | Task with --headless=new + --load-extension. H1/H6. |
| 7 · C2 (T1071.001) | Extension beacons WSS to CloudFront; Python backdoor executes shell/PS/Python, writes files, enumerates processes. | DNS/net to 4 CloudFront hosts. H5. |
| 8 · Hand-off | Access brokered to Payouts King ransomware operators for follow-on encryption. | Downstream ransomware TTPs (out of scope here). |
Consolidated IOC Table
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| Domain (C2) | d3nh8sl98s2554.cloudfront[.]net | high | detect | WSS C2 /ws. CloudFront-fronted — perishable. |
| Domain (C2) | d2g6dl71gua1qa.cloudfront[.]net | high | detect | WSS C2 /ws. |
| Domain (C2) | d1jp293q9tvi92.cloudfront[.]net | high | detect | WSS C2 /ws. |
| Domain (C2) | d23l50n6ubud7p.cloudfront[.]net | high | detect | WSS C2 /ws. |
| SHA256 | a08d8e63b0cd3638fb40b8e6da546e26da69439597565827f9cec87915f78568 | high | detect | Extension background.js. |
| SHA256 | 3d1158884fb339b3328bd330fcc27598e1f1c94bcac39e75d1a272afa4deee1a | high | detect | Python backdoor. |
| Filename | native_host.bat | high | hunt | Native-messaging launcher (embedded Python). |
| Filename | extension.log | medium | hunt | Backdoor log artifact. |
| Filepath | %LOCALAPPDATA%\Microsoft\Edge\User Data\test1 | high | hunt | Install dir (extension/ + native/). |
| Registry | HKCU\SOFTWARE\Microsoft\Edge\AppKey | medium | hunt | Hex string-decryption key. AppKey is not a legitimate Edge value. |
| Behavioral | msedge.exe with --load-extension + --headless=new + non-default --user-data-dir | high | detect | Covert extension load / persistence. |
Affected Surface & Telemetry Matrix
| Surface | Required telemetry | Priority | Gap risk |
|---|---|---|---|
| Windows endpoints (Edge users) | ProcessRollup2, command line visibility | Critical | Low — core Falcon coverage |
| Windows endpoints (disk) | FileCreateInfo / PeFileWritten, RegGenericValueUpdate | High | Low |
| Network egress | DnsRequest, NetworkConnectIP4 | High | Medium — CloudFront blends with legit CDN; needs exact-host match |
| Collaboration (Teams) | Teams audit / message logs, proxy | Medium | High — outside EDR; needs M365/proxy logs |
ATT&CK Mapping
| Tactic | Technique | Observed behavior | Query / control |
|---|---|---|---|
| Initial Access | T1566.002 Spearphishing Link | Teams-impersonation → fake Outlook update page | Native §7; H7 |
| Execution | T1204.001 User Execution (link) | Victim runs AHK / clipboard cmd / PowerShell | Q7 |
| Execution | T1059.001 / T1059.003 | PowerShell / cmd driven by the Python backdoor | Q2, Q7 |
| Persistence | T1547.013 Browser Extensions | Unpacked Edge extension loaded via native messaging | Q1, Q2 |
| Persistence | T1053.005 Scheduled Task | Task launches headless Edge with the extension | Q6 |
| Defense Evasion | T1140 Deobfuscate / T1112 Modify Registry | Encrypted ZIP + AppKey decryption key | Q4 |
| Defense Evasion | T1036.005 Masquerading | "Edge Monitoring Agent" in an Edge-like path | Q3 |
| Command & Control | T1071.001 / T1102 Web Service | WSS beacon fronted by CloudFront | Q5 |
Native Audit-Log Hunts (non-CQL)
Microsoft Edge / browser management
- Unpacked extensions: via Edge management (or on-host) enumerate extensions loaded with
--load-extension/ developer mode. Any extension outside the managed allowlist — especially "Edge Monitoring Agent" — is suspect. - Native messaging hosts: inspect
%LOCALAPPDATA%\Microsoft\Edge\User Data\**\native\and the NativeMessagingHosts manifests for a host that points at a.bat(legit hosts point at signed executables). Edgecution's manifest points atnative_host.bat. - Rogue profile dirs: look for non-standard Edge
User Dataprofile folders (test1,Recovery) created outside normal profile setup.
Microsoft 365 / Teams
- Hunt Teams for external/guest senders impersonating "IT Support"/"Help Desk" that message multiple internal users, and for chats containing links to non-corporate "update/console" domains.
- Proxy/secure-web-gateway: alert on downloads of
.ahk/ AutoHotKey binaries and on fetches to newly-registered "Outlook/Office update" lookalike domains.
Network
- On the SWG/firewall, log WSS (
wss://) upgrades to*.cloudfront.netfrom user endpoints and match against the four known hosts; more broadly, flag long-lived WebSocket sessions to CloudFront from processes other than a normal foreground browser.
CrowdStrike LogScale CQL Hunt Queries
Looks for: msedge.exe started with both --headless=new and --load-extension — a headless browser silently sideloading an unpacked extension. This is Edgecution's signature persistence launch and is almost never legitimate on a user endpoint.
// HUNT: Headless Edge sideloading an unpacked extension (Edgecution) // MITRE: T1547.013 | CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^msedge(\.exe)?$/i | CommandLine=/--headless(=new)?/i | CommandLine=/--load-extension/i | table([ComputerName, aid, UserName, FileName, CommandLine, ParentBaseFileName], limit=200)
Looks for: msedge.exe as the parent of cmd.exe, python.exe, pythonw.exe, or powershell.exe — the native-messaging sandbox escape. FP: some managed browser policies or extensions legitimately invoke helpers; exclude your sanctioned native-messaging hosts and enterprise browser-management agents.
// HUNT: Edge spawning shell/Python via native messaging (Edgecution) // MITRE: T1547.013 / T1059 | CONF: high FP: medium COST: low | REQUIRES: ProcessRollup2 // TUNING: exclude sanctioned native-messaging hosts and enterprise browser-mgmt agents #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^msedge\.exe$/i | FileName=/^(cmd|python|pythonw|powershell)(\.exe)?$/i | table([ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Looks for: creation of native_host.bat / extension.log, or any file written under an Edge User Data\test1 path — the drop location for the extension and native host.
// HUNT: Edgecution install artifacts written to disk // MITRE: T1105 / T1036.005 | CONF: high FP: low COST: low | REQUIRES: FileCreateInfo / PeFileWritten #event_simpleName=/FileCreateInfo|PeFileWritten|NewExecutableWritten/ | TargetFileName=/(native_host\.bat|extension\.log|\\Edge\\User Data\\test1\\)/i | table([ComputerName, aid, UserName, TargetFileName], limit=200)
Looks for: a registry value named AppKey set under HKCU\SOFTWARE\Microsoft\Edge — Edgecution stores its hex string-decryption key there. FP: AppKey is a generic name; confirm the value is a long hex blob under the Edge key rather than a legitimate app setting elsewhere.
// HUNT: Edgecution AppKey decryption key in registry // MITRE: T1112 / T1140 | CONF: medium FP: medium COST: low | REQUIRES: RegGenericValueUpdate // TUNING: require the value sit under \Microsoft\Edge and hold a long hex string #event_simpleName=/RegGenericValueUpdate|RegSystemConfigValueUpdate/ | RegObjectName=/\\Microsoft\\Edge$/i | RegValueName=/^AppKey$/i | table([ComputerName, aid, UserName, RegObjectName, RegValueName, RegStringValue], limit=200)
Looks for: DNS resolution of any of the four known Edgecution CloudFront C2 hosts. Exact-host match keeps FP low despite CloudFront being shared infrastructure.
// HUNT: DNS to known Edgecution CloudFront C2 hosts // MITRE: T1071.001 / T1102 | CONF: high FP: low COST: low | REQUIRES: DnsRequest #event_simpleName=/DnsRequest/ | DomainName=/^(d3nh8sl98s2554|d2g6dl71gua1qa|d1jp293q9tvi92|d23l50n6ubud7p)\.cloudfront\.net$/i | table([ComputerName, aid, DomainName, ContextBaseFileName], limit=200)
Looks for: scheduled-task registration whose action launches Edge with --headless and --load-extension against a Recovery/non-default profile — the persistence mechanism for the beacon.
// HUNT: Scheduled task launching headless Edge with an extension // MITRE: T1053.005 | CONF: high FP: low COST: low | REQUIRES: ScheduledTaskRegistered #event_simpleName=/ScheduledTaskRegistered/ | CommandLine=/msedge/i | CommandLine=/--headless/i | CommandLine=/--load-extension/i | table([ComputerName, aid, UserName, TaskName, CommandLine], limit=200)
Looks for: AutoHotKey execution or a cmd/powershell one-liner spawned from a browser process — the ClickFix delivery step. FP: AHK is used by legitimate automation and PowerShell runs from many parents; scope to browser parents and unusual command content, and exclude sanctioned AHK deployments.
// HUNT: ClickFix delivery — AHK or browser-spawned shell one-liner // MITRE: T1204.001 / T1059 | CONF: medium FP: medium COST: low | REQUIRES: ProcessRollup2 // TUNING: exclude sanctioned AutoHotKey automation; scope to browser parents #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^(msedge|chrome|brave)\.exe$/i | FileName=/^(autohotkey|autohotkeyu?64|cmd|powershell|mshta|wscript|cscript)(\.exe)?$/i | table([ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Looks for: execution or write of either published Edgecution component hash. Point-in-time, but a certain match where it fires.
// HUNT: Known Edgecution component hashes // MITRE: — | CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 / PeFileWritten #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2|PeFileWritten/ | SHA256HashData=/^(a08d8e63b0cd3638fb40b8e6da546e26da69439597565827f9cec87915f78568|3d1158884fb339b3328bd330fcc27598e1f1c94bcac39e75d1a272afa4deee1a)$/i | table([ComputerName, aid, FileName, SHA256HashData], limit=200)
Custom IOA Recommendations
| IOA name | Pattern | Exclusions | Path |
|---|---|---|---|
| Headless Edge + Unpacked Extension | msedge.exe with --headless=new AND --load-extension | Sanctioned automated-browser/testing hosts | Investigate → Detect/Block after baseline (Q1) |
| Browser Spawns Shell/Python | ParentImage msedge.exe → cmd/python/pythonw/powershell | Approved native-messaging hosts, browser-mgmt agents | Investigate → Detect (Q2) |
| Rogue Edge Native Host (.bat) | Write of native_host.bat or file under ...\Edge\User Data\test1 | None expected | Detect (Q3) |
| Edgecution C2 | DNS/connect to the four CloudFront C2 hosts | None | Detect/Block (Q5) — refresh as infra rotates |
Machine-Readable IOC Appendix
type,value,action,severity,expiration,description,tags domain,d3nh8sl98s2554.cloudfront.net,detect,high,2026-10-05,Edgecution WSS C2,campaign:Edgecution domain,d2g6dl71gua1qa.cloudfront.net,detect,high,2026-10-05,Edgecution WSS C2,campaign:Edgecution domain,d1jp293q9tvi92.cloudfront.net,detect,high,2026-10-05,Edgecution WSS C2,campaign:Edgecution domain,d23l50n6ubud7p.cloudfront.net,detect,high,2026-10-05,Edgecution WSS C2,campaign:Edgecution sha256,a08d8e63b0cd3638fb40b8e6da546e26da69439597565827f9cec87915f78568,prevent,critical,2027-01-05,Edgecution extension background.js,campaign:Edgecution sha256,3d1158884fb339b3328bd330fcc27598e1f1c94bcac39e75d1a272afa4deee1a,prevent,critical,2027-01-05,Edgecution Python backdoor,campaign:Edgecution
# Files: native_host.bat extension.log %LOCALAPPDATA%\Microsoft\Edge\User Data\test1\ # extension\ + native\ %LOCALAPPDATA%\Microsoft\Edge\User Data\Recovery\ # headless-launch profile # Registry: HKCU\SOFTWARE\Microsoft\Edge -> value "AppKey" (hex string-decryption key) # Native-messaging manifest host name (randomized per campaign): com.[rand_chars].api -> points at native_host.bat (legit hosts point at signed .exe)
# Persistence launch:
msedge.exe --user-data-dir="%LOCALAPPDATA%\Microsoft\Edge\User Data\Recovery"
--load-extension=<dir> --no-first-run --disable-sync --headless=new
# Sandbox escape:
msedge.exe -> native_host.bat -> python.exe (embedded Python 3.13.3)
# C2: WSS upgrade to wss://<host>.cloudfront.net/ws ; 20s ping heartbeat
# Backdoor caps: shell(3) / file-write(4) / python(5) / proc-enum(6) / powershell(7)
# Edge policy (block sideloading + control native messaging):
# ExtensionInstallBlocklist = ["*"]
# ExtensionInstallAllowlist = [<approved IDs>]
# BlockExternalExtensions = true
# NativeMessagingBlocklist = ["*"]
# NativeMessagingAllowlist = [<approved hosts>]
# DeveloperToolsAvailability = 2 # disallow / restrict
# Audit for the rogue load flags:
# Get-CimInstance Win32_Process -Filter "Name='msedge.exe'" |
# ? { $_.CommandLine -match '--load-extension|--headless' }
Detection Validation Gates
| Gate | Check | Pass criterion |
|---|---|---|
| Telemetry ready | ProcessRollup2 with command lines, FileCreateInfo, RegGenericValueUpdate, DnsRequest all flowing | Events queryable in SIEM within last 24h |
| Benign baseline | Confirm no legitimate app on your estate launches Edge with --load-extension/--headless | Q1/Q6 return zero in a clean window |
| Positive test | In a lab, launch msedge --headless=new --load-extension=<benign>; confirm Q1 fires | Q1 matches |
| C2 freshness | Re-check the four CloudFront hosts against current threat intel | IOC list refreshed; expired hosts pruned |
| Promotion | Q2/Q7 reviewed for native-messaging FP before Detect/Block | <1 FP/host/week after tuning |
Hardening — Tiered & Deployable
- Lock down Edge extensions by policy — set
ExtensionInstallBlocklist=*+ an explicit allowlist, andBlockExternalExtensions=true, so unpacked/sideloaded extensions cannot load. MITRE M1042 (Disable or Remove Feature); authority: Microsoft Edge browser policy docs / CIS Microsoft Edge Benchmark. - Restrict Native Messaging —
NativeMessagingBlocklist=*+ allowlist only sanctioned hosts, killing the sandbox-escape bridge. MITRE M1042; Microsoft Edge policy. - Block the four CloudFront C2 hosts and push the two SHA256 hashes to Falcon prevention. MITRE M1037 (Filter Network Traffic) / M1040.
- Neutralize the ClickFix lure — disable/limit external Teams chat and label external senders; user-education on "IT support" DMs. MITRE M1017 (User Training) / M1042 (restrict external federation).
- ASR + script controls — enable "Block executable content from email/webmail" and constrain AutoHotKey/HTA/WSH via WDAC or AppLocker. MITRE M1038 (Execution Prevention); MS Security Baseline / ASR.
- Disable Edge developer-mode extension loading for standard users (
DeveloperToolsAvailability=2). MITRE M1042.
- Application control (WDAC/AppLocker) so only signed, approved interpreters run, blocking embedded-Python launched from a browser path. MITRE M1038; MS WDAC guidance.
- Egress control for WebSocket/CDN — inspect and constrain long-lived WSS to CDN from non-browser processes. MITRE M1037.
- Phishing-resistant MFA + identity hardening to blunt the ransomware follow-on if a foothold is achieved. MITRE M1032.
Deployable Playbooks
Playbook A — Edge extension & native-messaging lockdown (GPO / Intune ADMX)
# Microsoft Edge policies (HKLM\SOFTWARE\Policies\Microsoft\Edge): ExtensionInstallBlocklist = ["*"] ExtensionInstallAllowlist = ["<approved_ext_id_1>","<approved_ext_id_2>"] BlockExternalExtensions = 1 NativeMessagingBlocklist = ["*"] NativeMessagingAllowlist = ["com.google.chrome.example","<approved_host>"] DeveloperToolsAvailability = 2 # 2 = disallowed # Deploy via GPO (Administrative Templates > Microsoft Edge) or Intune Settings Catalog.
Playbook B — Hunt & clean an infected host (PowerShell)
# 1. Detect the rogue load / install
Get-CimInstance Win32_Process -Filter "Name='msedge.exe'" |
Where-Object { $_.CommandLine -match '--load-extension|--headless' } |
Select-Object ProcessId, CommandLine
Test-Path "$env:LOCALAPPDATA\Microsoft\Edge\User Data\test1"
Get-ItemProperty "HKCU:\SOFTWARE\Microsoft\Edge" -Name AppKey -ErrorAction SilentlyContinue
# 2. Remove persistence + artifacts (after evidence capture)
Get-ScheduledTask | Where-Object { $_.Actions.Arguments -match '--load-extension|--headless' } |
Unregister-ScheduledTask -Confirm:$false
Remove-Item "$env:LOCALAPPDATA\Microsoft\Edge\User Data\test1" -Recurse -Force -ErrorAction SilentlyContinue
Remove-ItemProperty "HKCU:\SOFTWARE\Microsoft\Edge" -Name AppKey -ErrorAction SilentlyContinue
Playbook C — Block C2 & hashes (Falcon IOC import)
# Import the §10 CSV via Falcon > Endpoint Security > IOC Management, # or the API: POST /iocs/entities/indicators/v1 # domains -> detect (4 CloudFront hosts) # sha256 -> prevent (background.js + Python backdoor) # Refresh the domain set as CloudFront infrastructure rotates.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Falcon network-contain hosts flagged by Q1–Q3/Q5/Q8; block the four CloudFront C2 hosts at the SWG. | SOC | Containment IDs, blocked-domain log |
| Eradicate | Kill headless msedge + Python; remove the scheduled task, test1 dir, and AppKey value (Playbook B); push the two hashes to prevent. | IR | Task-removal log, deleted-artifact hashes |
| Recover | Reset credentials for the user (backdoor could keylog/PowerShell); deploy Edge extension/native-messaging policy (Playbook A); re-image if backdoor ran arbitrary code. | IR + IAM | Reset log, policy IDs, re-image ticket |
| Post-incident | Restrict external Teams chat; user-education on the "IT support" lure; deploy ASR/WDAC; add the behavioral IOAs. | SecEng | Policy IDs, IOA IDs |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1566.002 | Teams-impersonation lure | — | — | GAP (M365/proxy only) |
| T1204.001 / T1059 | ClickFix AHK / shell one-liner | Q7 | — | Partial |
| T1547.013 | Headless Edge + unpacked extension | Q1 | Headless Edge IOA | Good |
| T1547.013 / T1059 | Native-messaging sandbox escape | Q2 | Browser→Shell IOA | Good |
| T1105 / T1036.005 | Install artifacts on disk | Q3 | Rogue Native Host IOA | Good |
| T1112 / T1140 | AppKey decryption key | Q4 | — | Partial |
| T1053.005 | Headless-Edge scheduled task | Q6 | — | Good |
| T1071.001 / T1102 | WSS/CloudFront C2 | Q5, Q8 | Edgecution C2 IOA | Good |
Known gaps: the Teams lure (T1566.002) is off-EDR — close it with M365/Teams audit + proxy hunts (§7). C2 domains are CloudFront-fronted and will rotate; the behavioral queries (Q1/Q2/Q3/Q6) are the durable coverage.
Validation: the telemetry-ready and benign-baseline gates (§11) must pass before Q2/Q7 are promoted from Investigate to Detect/Block.
Hunt Summary Ticket
TITLE: Edgecution — Malicious Edge Extension Backdoor (Payouts King IAB)
SEVERITY: High (initial-access broker foothold; ransomware follow-on likely)
SCOPE: Windows endpoints running Microsoft Edge
HYPOTHESIS: ClickFix/Teams lure -> sideloaded Edge extension -> native-messaging
sandbox escape -> embedded-Python backdoor -> WSS/CloudFront C2
QUERIES: Q1 headless-edge+extension · Q2 edge->shell/python · Q3 install artifacts ·
Q4 AppKey reg · Q5 CloudFront C2 · Q6 sched-task · Q7 ClickFix · Q8 hashes
DO FIRST: 1) Run Q1+Q2 (highest fidelity) 2) Block 4 CloudFront hosts + 2 SHA256
3) Push Edge extension + native-messaging policy lockdown (Playbook A)
FINDINGS: <record headless-edge launches, edge->python chains, test1 dir, AppKey hits>
GAPS: Teams lure off-EDR (M365/proxy); CloudFront C2 rotates — refresh IOCs
ACTIONS: Falcon-contain flagged hosts; remove task+test1+AppKey (Playbook B);
reset creds for affected users; consider re-image (arbitrary code ran)
OWNER: <assign> VERSION: v0.2 · 2026-07-05
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 | Accessed |
|---|---|---|---|
| 1 Vendor | Zscaler ThreatLabz — Payouts King ransomware IAB deploys new Edgecution | Full technical teardown, IOCs, hashes, command IDs, install paths | 2026-07-05 |
| 2 Press | BleepingComputer — Malicious Edge extension abuses Native Messaging as bridge to malware | Native-messaging sandbox-escape corroboration | 2026-07-05 |
| 2 Press | SC Media — New 'Edgecution' malware uses browser extension to deploy ransomware | IAB → ransomware linkage, Teams delivery | 2026-07-05 |
| 3 Analytic | HivePro — Edgecution threat advisory | Independent chain corroboration | 2026-07-05 |