Scarlet Goldfinch — Fake-Update / ClickFix → NetSupport & Remcos
updateinstaller.zip) running malicious JavaScript — or, since 2025, a ClickFix fake-CAPTCHA paste-and-run — that installs NetSupport Manager RAT (and, since late 2025, Remcos). Defensive hunt & harden pack — no malicious code.Executive Summary
Scarlet Goldfinch is a Red Canary-tracked activity cluster that uses compromised websites to trick users into running malicious code that installs the NetSupport Manager RAT. Historically (pre-2025) it relied on fake browser-update lures — a compromised site claims a browser update is needed and serves a ZIP named like updateinstaller.zip / updateinstall.zip containing malicious JavaScript that drops the RAT. In 2025 the cluster followed the broader trend and pivoted to ClickFix fake-CAPTCHA "paste-and-run" lures for code execution, and in late 2025 began deploying Remcos RAT alongside NetSupport.
Both delivery paths converge on the same outcome: a remote-access tool persisting on a user endpoint for follow-on hands-on activity. The durable detection target is therefore the dual delivery (fake-update JS and ClickFix paste-and-run) plus the NetSupport/Remcos install behaviors — especially NetSupport's client32.exe running from a non-Program-Files path.
.zip→wscript .js) and Q2 (ClickFix browser→mshta/PowerShell). The decisive payload signal is Q3: client32.exe/NetSupport running outside Program Files. Any hit is a live RAT install — escalate and isolate.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry |
|---|---|---|---|
| 1 · Vendor research | Red Canary — Scarlet Goldfinch (blog + Threat Detection Report) | Fake-update → JS → NetSupport; 2025 pivot to ClickFix; ZIP names; late-2025 Remcos addition | yes |
| 1 · Vendor research | Red Canary — "Scarlet Goldfinch's year in ClickFix" | Fake-CAPTCHA paste-and-run delivery evolution | yes |
| 2 · Vendor | Picus / Darktrace — NetSupport RAT abuse | client32.exe install paths, persistence, C2 — payload detection | yes |
| 2 · Adjacent | Red Canary — Field Guide / Intelligence Insights | Relationship to SocGholish / Amber Albatross fake-update ecosystem | partial |
Decisions: dual-delivery detection (fake-update JS + ClickFix) since the cluster runs both; payload-anchored on NetSupport client32.exe path anomaly + Remcos; cross-references the NetSupport Manager and SocGholish sibling packs for shared TTPs.
Hunt Brief & Attack Chain
Working hypothesis: A user on a compromised site either downloads a fake-update ZIP (JS → RAT) or completes a ClickFix paste-and-run; either path installs NetSupport Manager (and/or Remcos) which persists and beacons for hands-on follow-up.
| Step | Behavior | Telemetry | Hunt Angle |
|---|---|---|---|
| 1a · Fake-update | Compromised site → updateinstaller.zip → wscript runs .js | ProcessRollup2 | Q1 |
| 1b · ClickFix | Fake CAPTCHA → paste-and-run mshta/PowerShell | ProcessRollup2 | Q2 |
| 2 · RAT install | NetSupport client32.exe dropped to %ProgramData%/%AppData% | ProcessRollup2; file write | Q3 |
| 3 · Persistence | Run key / scheduled task / Startup pointing at the RAT | registry / task events | Q4; N3 |
| 4 · Remcos (alt) | Remcos RAT install/inject | ProcessRollup2 | Q5 |
| 5 · C2 | RAT beacon over HTTP/HTTPS | NetworkConnectIP4 | Q6 |
Affected surface & telemetry
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Windows user endpoints | Process lineage + command line (ProcessRollup2) | Critical | Low — standard sensor |
| RAT install paths | File writes to %ProgramData%/%AppData%; binary metadata | High | Low — reliable |
| Persistence | Run keys / scheduled tasks / Startup | High | Low — covered |
| Delivery (drive-by / ClickFix) | Proxy / RunMRU | Medium | Medium — needs proxy/registry logging |
Consolidated IOC Table
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| Behavior | NetSupport client32.exe running outside \Program Files\ | high | detect | RAT install path anomaly — flagship signal |
| File | updateinstaller.zip / updateinstall.zip → *.js | high | hunt | Fake-update delivery artifact |
| Behavior | browser/Explorer → mshta/powershell (ClickFix paste-and-run) | high | detect | 2025+ delivery pivot |
| Behavior | Remcos RAT install/inject | medium | hunt | Late-2025 alt payload |
| Persistence | Run key / task pointing at %ProgramData%/%AppData% RAT | medium | hunt | RAT persistence |
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Query / Control |
|---|---|---|---|
| Initial Access | T1189 / T1566 — Drive-by / phishing | Compromised-site fake update or ClickFix CAPTCHA | Q1, Q2; N1 |
| Execution | T1059.007 / T1204.004 / T1218.005 — JS / paste-and-run / mshta | JS loader or ClickFix paste-and-run | Q1, Q2 |
| Persistence | T1547.001 / T1053.005 — Run key / Startup / scheduled task | RAT auto-start | Q4; N3 |
| Command & Control | T1219 — Remote Access Software (NetSupport) | client32.exe RAT C2 | Q3, Q6 |
| Command & Control | T1219 / T1055 — Remcos RAT | Remcos install/inject | Q5 |
Native Audit-Log Hunts
| Hunt | Source | Logic | Response |
|---|---|---|---|
| N1 · Fake-update / ClickFix delivery | Proxy / RunMRU | Download of updateinstall*.zip from a non-vendor site; RunMRU entries with mshta/powershell/iex | Block domain; sweep host |
| N2 · NetSupport binary inventory | Software/binary inventory | client32.exe/NetSupport metadata present outside \Program Files\ | Investigate; uninstall if unsanctioned |
| N3 · RAT persistence | Registry Run keys / Task Scheduler | Auto-start entries pointing at %ProgramData%/%AppData% binaries | Remove; isolate host |
| N4 · RAT C2 | Proxy / firewall | NetSupport/Remcos beacon to unknown HTTP/HTTPS or non-standard ports | Block; identify the source host |
CrowdStrike LogScale CQL Hunt Queries
SyntheticProcessRollup2. Q3 (NetSupport path anomaly) is the strongest payload keeper. If NetSupport is sanctioned in your environment, allow-list its managed install path.Looks for: wscript/cscript running a .js from Downloads/Temp (esp. updateinstall*). Accomplishes: catches the legacy fake-update delivery path.
// HUNT: Scarlet Goldfinch fake-update JS loader // MITRE: T1189, T1059.007 | CONF: high FP: low COST: low // FP NOTES: legit .js automation rarely runs from Downloads/Temp via wscript #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^(wscript|cscript)\.exe$/i | CommandLine=/\.js("|\s|$)/i | CommandLine=/\\(Downloads|Temp)\\|updateinstall/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, CommandLine], limit=200)
Looks for: mshta/PowerShell parented by a browser/Explorer with iex+http. Accomplishes: catches the 2025+ ClickFix delivery pivot.
// HUNT: Scarlet Goldfinch ClickFix paste-and-run // MITRE: T1204.004, T1059.001, T1218.005 | CONF: high FP: low COST: low #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^(explorer|chrome|msedge|firefox|brave|opera)\.exe$/i | FileName=/^(mshta|powershell|pwsh|cmd)\.exe$/i | CommandLine=/(iex|invoke-expression|mshta\s+http|DownloadString|FromBase64String|-enc(odedcommand)?\b).*?(http|\.zip)/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Looks for: NetSupport client32.exe (or its files) executing from %ProgramData%/%AppData% rather than Program Files. Accomplishes: the decisive RAT-install signal. FP: sanctioned NetSupport in its managed path (allow-list).
// HUNT: NetSupport Manager RAT install path anomaly (Scarlet Goldfinch payload) // MITRE: T1219 | CONF: high FP: low COST: low // TUNING: if NetSupport is sanctioned, allow-list its managed \Program Files\ install path #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | (FileName=/^(client32|pcicapi|nskbfltr|remcmdstub)\.exe$/i or CommandLine=/client32\.ini|NetSupport/i) | ImageFileName=/\\(ProgramData|Users\\[^\\]+\\AppData|Temp)\\/i | table([@timestamp, ComputerName, UserName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData], limit=200)
Looks for: auto-start entries or Startup LNKs pointing at a binary in %ProgramData%/%AppData%. FP: some apps persist there — correlate with Q3 on the same host.
// HUNT: Scarlet Goldfinch RAT persistence // MITRE: T1547.001, T1053.005 | CONF: medium FP: medium COST: low // TUNING: correlate to Q3 on same aid; allow-list sanctioned auto-start apps #event_simpleName=/AsepValueUpdate|ScheduledTaskRegistered|PeFileWritten/ | (RegStringValue=/\\(ProgramData|AppData)\\.+\.(exe|scr)/i or TargetFileName=/\\Start Menu\\Programs\\Startup\\/i or CommandLine=/\\(ProgramData|AppData)\\.+\.(exe)/i) | table([@timestamp, ComputerName, UserName, RegObjectName, RegStringValue, TargetFileName, CommandLine], limit=200)
Looks for: Remcos artifacts (mutex/registry keys, install paths, common config strings). Accomplishes: catches the late-2025 alternate payload. FP: low — verify any hit.
// HUNT: Remcos RAT (Scarlet Goldfinch alt payload) // MITRE: T1219, T1055 | CONF: med-high FP: low-med COST: low #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2|AsepValueUpdate/ | (CommandLine=/remcos|\\Remcos\\|-no-restart.*-install/i or RegObjectName=/\\Software\\Remcos|\\Rmc-/i or ImageFileName=/\\(ProgramData|AppData)\\(remcos|rmc)/i) | table([@timestamp, ComputerName, UserName, ImageFileName, CommandLine, RegObjectName], limit=200)
Looks for: outbound connections initiated by a binary in %ProgramData%/%AppData% (the RAT). FP: some apps run from there — correlate with Q3/Q5.
// HUNT: RAT C2 beacon from a user-writable path // MITRE: T1219, T1071.001 | CONF: medium FP: medium COST: medium // TUNING: correlate to Q3/Q5; exclude sanctioned apps that run from ProgramData #event_simpleName=NetworkConnectIP4 | ContextImageFileName=/\\(ProgramData|Users\\[^\\]+\\AppData)\\.+\.exe$/i | RemoteAddressIP4!=/^(10\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.|169\.254\.|127\.)/ | table([@timestamp, ComputerName, ContextImageFileName, RemoteAddressIP4, RemotePort], limit=200)
CrowdStrike Custom IOA Recommendations
| IOA Name | Field Patterns | Benign Exclusions | Deployment Path |
|---|---|---|---|
| Scarlet Goldfinch — NetSupport outside Program Files | Image *\client32.exe from *\ProgramData\*/*\AppData\* | Sanctioned NetSupport in its managed path | Endpoint Security → Custom IOA → Process Creation |
| Scarlet Goldfinch — fake-update wscript .js | Image *\wscript.exe; CmdLine *.js + \Downloads\/updateinstall | Rare legit JS automation (allow-list) | Custom IOA → Process Creation |
Machine-Readable IOC Appendix
Grouped IOC Quick-Copy
One-click blocks for detection and IOC import. Compromised-site infra rotates — behavior + the NetSupport path anomaly are durable.
type,value,action,severity,expiration,description,tags sha256,REPLACE_WITH_JS_LOADER_SHA256,detect,high,2026-09-12,Scarlet Goldfinch fake-update JS,campaign:ScarletGoldfinch sha256,REPLACE_WITH_NETSUPPORT_SHA256,detect,high,2027-06-12,NetSupport client32.exe (abused),campaign:ScarletGoldfinch domain,REPLACE_WITH_C2_DOMAIN,detect,medium,2026-08-12,NetSupport/Remcos C2 (rotates),campaign:ScarletGoldfinch
wscript.exe runs *.js from \Downloads\ (esp. updateinstaller.zip / updateinstall.zip) browser/Explorer -> mshta/powershell with iex+http (ClickFix paste-and-run) NetSupport client32.exe / client32.ini running from %ProgramData% or %AppData% (not Program Files) Run key / scheduled task / Startup LNK pointing at a %ProgramData%/%AppData% binary Remcos artifacts: \Software\Remcos registry, Rmc- keys, remcos install path RAT outbound C2 from a binary in %ProgramData%/%AppData%
Scarlet Goldfinch # Red Canary activity cluster (compromised-site fake update / ClickFix) Payloads: NetSupport Manager RAT (primary) ; Remcos RAT (since late 2025) Delivery: fake browser-update ZIP (pre-2025) -> ClickFix fake-CAPTCHA (2025+) NetSupport binaries: client32.exe, client32.ini, pcicapi.dll, nskbfltr.inf Adjacent fake-update ecosystem: SocGholish, Amber Albatross, NetSupport Manager (sibling packs)
# Both delivery paths + the RAT: Change default .js/.jse handler from WScript to Notepad ASR: Block JS/VBScript launching downloaded executables + block executable content from email Block mshta.exe via WDAC/AppLocker (ClickFix first stage) WDAC/AppLocker: deny unsanctioned NetSupport (client32.exe) outside its managed path Disable/monitor the Run dialog (RunMRU) for paste-and-run lures Web filtering; browser updates via managed channels only
Hardening — Tiered & Deployable
Break both delivery paths and deny the unsanctioned RAT.
- Change the default
.js/.jsehandler to Notepad — M1042. Defangs the fake-update double-click. - ASR: Block JS/VBScript launching downloaded executables; block content from email/webmail — M1042.
- Block
mshta.exevia WDAC/AppLocker — M1038. Kills the ClickFix first stage. - WDAC/AppLocker: deny NetSupport
client32.exeoutside its sanctioned path — M1038. Directly blocks the payload (Q3).
- Disable/monitor the Run dialog (RunMRU); PowerShell CLM + script-block logging — M1038 / M1040. Removes the paste-and-run UX; feeds Q2.
- Inventory + alert on RMM tools (NetSupport, Remcos-like) from non-standard paths — M1042.
- Web filtering; managed browser-update channels only — M1021. Cuts the fake-update lure.
- Application allowlisting enterprise-wide — M1038. Blocks unsigned loaders and unsanctioned RATs.
- RMM governance: sanctioned tools only, alert on all others — M1038.
- User training on fake-update + "paste-this-to-verify" lures — M1017.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the host; preserve the delivery artifact (ZIP/.js or pasted command) and the RAT binary | SOC L2 | Containment timestamp; Q1/Q2/Q3 events |
| Triage | Pull the delivery → RAT-install tree; identify NetSupport/Remcos config + C2; check persistence | SOC L2 | Process tree; RAT config |
| Eradicate | Remove the RAT + persistence; block C2; confirm no hands-on lateral activity | IR | Removal log; C2 block |
| Recover | Rotate creds used on the host; verify no follow-on access; rebuild if RAT had hands-on time | IR + IT | Cred reset; lateral review |
| Harden | Change .js handler; block mshta; deny unsanctioned NetSupport; promote Q1/Q2/Q3 IOAs | Detection Eng | Control status; IOA enabled |
Detection Coverage Map & Validation
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1189 | Fake-update / ClickFix delivery | Q1, Q2 | IOA-2 | Good |
| T1219 | NetSupport install path anomaly | Q3 | IOA-1 | Good |
| T1547.001 / T1053.005 | RAT persistence | Q4 | — | Partial correlate to Q3 |
| T1219 / T1055 | Remcos RAT | Q5 | — | Partial |
| T1071.001 | RAT C2 beacon | Q6 | — | Partial correlate to Q3/Q5 |
| T1189 (delivery infra) | Compromised-site lure | — | — | GAP proxy/web filtering (N1) |
Validation gates: (1) confirm process + file telemetry fleet-wide; (2) baseline any sanctioned NetSupport path (allow-list for Q3); (3) lab-test a benign wscript benign.js from Downloads (Q1) and a benign binary run from %ProgramData% (Q3 logic); (4) promote Q1/Q2/Q3 to Custom IOA Detect+Block; keep Q4–Q6 correlated.
Hunt Summary Ticket
TITLE: Hunt — Scarlet Goldfinch (fake-update / ClickFix -> NetSupport & Remcos)
SEVERITY: High (RAT delivery; hands-on follow-on)
SCOPE: Windows user endpoints browsing compromised sites
HYPOTHESIS: Compromised site -> fake-update ZIP (wscript .js) OR ClickFix paste-and-run
-> NetSupport client32.exe from %ProgramData%/%AppData% (and/or Remcos) -> persist -> C2.
QUERIES RUN: Q1 fake-update JS (IOA) | Q2 ClickFix (IOA) | Q3 NetSupport path anomaly (IOA) |
Q4 RAT persistence | Q5 Remcos | Q6 RAT C2
+ Native N1-N4 (delivery, NetSupport inventory, persistence, C2)
DO FIRST: Q3 (payload), Q1/Q2 (delivery) — isolate on any hit
FINDINGS: <pending analyst execution>
GAPS: Compromised-site delivery needs proxy/web filtering
ACTIONS: Change .js handler; block mshta; deny unsanctioned NetSupport; promote Q1/Q2/Q3
OWNER: HuntPack
VERSION: v0.4 - 2026-06-12
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 |
|---|---|---|
| 1 | Red Canary — Scarlet Goldfinch (Threat Detection Report) | Full chain, ZIP names, ClickFix pivot, Remcos addition |
| 1 | Red Canary — Scarlet Goldfinch's year in ClickFix | Fake-CAPTCHA paste-and-run delivery |
| 1 | Red Canary — Taking flight with NetSupport Manager | NetSupport payload behavior |
| 2 | Picus — NetSupport RAT abuse | client32.exe path/persistence/C2 detection |
HuntPack v0.3 · Scarlet Goldfinch · Generated 2026-06-12 · Defensive use only. Delivery infrastructure rotates — the dual-delivery detections + the NetSupport path anomaly are the durable signal. Validate field names in your tenant (and any sanctioned NetSupport path) before promoting any query.