MALFEX npm Supply-Chain Campaign: Overlord RAT, movinlike Stealer and function-flag Downloader

One operator, malicious npm packages since August 2023, three independent Windows payload paths: an AutoIt-loaded Overlord RAT, the Node.js movinlike stealer, and a long-running downloader hidden in function-flag
Threat
MALFEX (Overlord, movinlike)
Severity
HIGH
Type
Supply chain · npm · RAT · Stealer · Downloader
Access
TLP:CLEAR, public sources
Version
v0.1 (Draft) · 2026-10-06
Author
HuntPack
Confidence
Medium-High: one detailed primary report (Checkmarx), partial CloudSEK, one news corroboration
01

Executive Summary

Checkmarx documented MALFEX, a single-operator npm supply-chain campaign active since August 2023. Twelve packages were published and eight carry malware, delivering three payload paths to Windows hosts. As of 2026-10-01, function-flag, function-color and cdn-img-fetch were still installable, and function-flag and function-color carried no advisory. Lifetime downloads total 40,767, of which 37,419 are function-flag.

Path 1 (Overlord RAT): tlxbnhd, tldriver and mxdriver run npm preinstall and postinstall scripts that fetch a file served as a PNG from api.imghippo.com. It is really an IExpress self-extracting archive holding a signed AutoIt3 interpreter and an encrypted script, which decrypts to the Overlord RAT and hollows TapiUnattend.exe. Persistence is the scheduled task \Maiden running AutoIt3.exe h.a3x every five minutes from %LOCALAPPDATA%\ScopeSmart Technologies Inc\.

Path 2 (movinlike): native-runner to img-to-native to cdn-img-fetch runs on require() with no install hook, so --ignore-scripts does not stop it. A banner image from the cavecrew/proj GitHub repository hides an AES-encrypted Go downloader that fetches the Node.js stealer from 104.234.65.75. Path 3 (function-flag): a postinstall runs node example.js, which calls an ASCII-art function with the font Bloody and triggers a hidden download to %APPDATA%\node.exe.

This pack hunts behavior and operator infrastructure: AutoIt running .a3x scripts, the \Maiden task, TapiUnattend.exe execution, node_runtime_helper, executables running from the root of %APPDATA%, and the named hosts and IPs. Stock tools (AutoIt3.exe, node.exe, TapiUnattend.exe, explorer.exe) are detect-only throughout.

Defender priority: search every lockfile, registry proxy log and developer endpoint for the eight package names now (Section 7 and Playbook A), run Q1 to Q8 across Windows hosts, and null-route 104.234.65.75. If any of the packages ran on a Windows host, treat that host as compromised and rotate Discord, browser-saved and wallet credentials from a clean system.

02

Source Review & Web Hunter Notes

TierSourceKey findingCarry forward
T1Checkmarx Zero research, MALFEX three-payload reportFull package/version table, three attack paths, persistence details, per-version payload hosts, hash list, host artifacts, remediationYes (primary for every IOC)
T1CloudSEK, MALFEX postinstall campaign blogPage returned only a partial summary (full report is a PDF that was not fetched). Corroborates package names, malfexteam2027, cavecrew, 104.234.65.75:700, imghippo payload URL, \Maiden task and ScopeSmart pathPartial (second source for those items only)
T2SecurityWeek (Ionut Arghire, 2026-10-06)Corroborates 12 packages, 8 malicious, three still installable, function-flag over 37,000 downloads with no advisory, limited exposureYes (context, no IOCs)
T1Checkmarx Zero, targeted re-fetch of the same articleSnapshots three technique details the first rendering condensed out: the SmartScope.vbs "Wscript."+"Shell" concatenation, process hollowing with the parent spoofed as explorer.exe, and the 120-second img-to-native waitYes (behavioral claims only, no new indicator)
blockedHackread article on the Windows RATHTTP 403 to automated fetch. Nothing taken from it and it is not citedNo

Decisions. Only indicators present in a saved snapshot ship as atomic IOCs. The full Discord webhook token and the Solana-resolved Overlord C2 addresses are not published in any fetched source and ship as labelled placeholders. The two-source rule for prevent actions is met only for 104.234.65.75 (Checkmarx and CloudSEK); every other row ships detect or hunt.

03

Hunt Brief & Attack Chain

Hypotheses

IDHypothesisTelemetryConf
H1A host that ran an Overlord loader shows AutoIt3.exe executing an .a3x script, usually from the ScopeSmart folder (Q1)ProcessRollup2High
H2Persistence appears as a scheduled task named Maiden created through schtasks (Q2)ProcessRollup2High
H3Overlord hollowing shows TapiUnattend.exe running, which is rare on endpoints (Q3)ProcessRollup2Medium
H4The npm install stage runs the dropped installer gldriver_pre_core.exe or gldriver_pre_asset.exe (Q4)ProcessRollup2High
H5The movinlike chain leaves node_runtime_helper.exe running and then contacts 104.234.65.75 (Q5, Q6)ProcessRollup2, NetworkConnectIP4High
H6function-flag payloads run as executables directly under %APPDATA% (Q7) and contact the rotating payload hosts (Q6, Q8)ProcessRollup2, DnsRequest, NetworkConnectIP4High
H7Known payload hashes execute on an endpoint (Q9)ProcessRollup2High
H8node.exe is launched with example.js by a package postinstall (Q10)ProcessRollup2Medium

Attack chain

StepBehaviorTelemetryHunt angle
1Developer or CI installs or requires a malicious packageLockfiles, registry proxySection 7 package search
2aPath 1: pre/postinstall downloads the PNG from api.imghippo.com, saves gldriver_pre_core.exe or gldriver_pre_asset.exe, runs itProcessRollup2, DnsRequestQ4, Q8
2bPath 1: IExpress extracts signed AutoIt3.exe plus h.a3x to %LOCALAPPDATA%\ScopeSmart Technologies Inc\; AutoIt decrypts Overlord and hollows TapiUnattend.exe with a spoofed explorer.exe parentProcessRollup2Q1, Q3
2cPath 1: task \Maiden every 5 minutes; SmartScope.vbs; C2 read from Solana transactionsProcessRollup2Q1, Q2
3aPath 2: require() loads cdn-img-fetch, which downloads banner.png or banner.jpg from raw.githubusercontent.com/cavecrew/proj; img-to-native AES-decrypts the appended payloadNetwork (legitimate host)Section 7 proxy search
3bPath 2: node_runtime_helper.exe fetches setup.exe (movinlike) from 104.234.65.75:700; movinlike steals data and posts 25MB chunks to a Discord webhookProcessRollup2, NetworkConnectIP4Q5, Q6, Q9
4Path 3: node example.js, "Bloody" font call, hidden download to %APPDATA%\node.exe, hidden windowProcessRollup2, DnsRequest, NetworkConnectIP4Q6, Q7, Q8, Q10
04

Consolidated IOC Table

Malicious packages (block at registry proxy)

PackageMalicious versionsStatus 2026-10-01Path
function-flag1.7.3, 4.0.0, 3.0.0, 2.3.5 to 2.3.9Live, no advisory3
function-color1.7.3, 1.0.0Live, no advisory3
cdn-img-fetch1.0.0 to 1.0.3Live, partial advisory2
img-to-native1.0.0 to 1.0.3Seized by npm2
native-runner1.0.0 to 1.0.3Seized by npm2
tlxbnhd0.0.1Unpublished1
tldriver0.0.1Unpublished1
mxdriver0.0.1, 0.0.2Unpublished1

Network and host indicators

TypeValueConfidenceActionContext
IPv4104.234.65.75High (2 sources)preventmovinlike setup.exe host, port 700 and 80 path
IPv445.89.30.194High (1 source)detectfunction-flag 2.3.8, 2.3.9 payloads
IPv4191.96.81.101High (1 source)detectfunction-flag 2.3.7 payload
IPv451.137.158.178High (1 source)detectfunction-flag 2.3.5 /download
Domaincdnzona.discloud.appHigh (1 source)detectfunction-flag 1.7.3 node.exe
Domainapicdn.squareweb.appHigh (1 source)detectfunction-flag 4.0.0 svchost.exe
Domainapizona.onrender.comHigh (1 source)detectfunction-flag 2.3.6
Domainbypasscdn.onrender.comMedium (1 source)detectfunction-flag 3.0.0 Discord proxy
Domainapi.imghippo.comMediumhuntLegitimate image host abused for the Overlord loader; hunt on npm/node context, never block outright
URLraw.githubusercontent.com/cavecrew/proj/main/banner.png and banner.jpgHigh (2 sources for account)detectLegitimate host; match the cavecrew path only
Task\MaidenHigh (2 sources)detectOverlord persistence; Author Welcome, Comment Wichita
Path%LOCALAPPDATA%\ScopeSmart Technologies Inc\High (2 sources)detectAutoIt3.exe, h.a3x, SmartScope.vbs
File%APPDATA%\Microsoft\Windows\node_runtime_helper.exe, %APPDATA%\node.exe, %TEMP%\._cif_data, gldriver_pre_core.exe, gldriver_pre_asset.exeHigh (1 source)detectHost artifacts
Keymalfexteam2027 (AES key), operator email corpmalfex@gmail.com, GitHub cavecrewHighenrichAttribution context, not a block rule

AutoIt3.exe (signed, legitimate), node.exe, TapiUnattend.exe and explorer.exe are stock tools or Windows binaries. They are detect-only everywhere in this pack. Payload hashes are listed in Section 10 and ship detect, because each has a single source.

05

Affected Surface & Telemetry Matrix

SurfaceTelemetryPriorityGap risk
Windows developer workstationsProcessRollup2, NetworkConnectIP4, DnsRequestHighLow
Windows CI/build agentsSame, often a different Falcon host groupHighMedium: ephemeral runners may be short-lived
Registry proxy / artifact managerPackage request logsHighMedium: not Falcon telemetry
Lockfiles in source controlRepository searchMediumLow
macOS and Linuxn/aLowPayloads fail silently off Windows (APPDATA guard); Path 1 scripts run but the payload only works on Windows
06

ATT&CK Mapping

TacticTechniqueObserved behaviorQuery / control
Initial AccessT1195.002 Compromise Software Supply ChainMalicious npm packagesSection 7, Playbook A, M1051
ExecutionT1059.007 JavaScript, T1059.005 Visual Basicpostinstall scripts, example.js, SmartScope.vbsQ10
ExecutionT1204.005 Malicious LibraryInstall or require() of operator packagesQ4, Q10
PersistenceT1053.005 Scheduled Task\Maiden every 5 minutesQ2
Defense EvasionT1055.012 Process Hollowing, T1134.004 Parent PID SpoofingOverlord into TapiUnattend.exe, parent explorer.exeQ3
Defense EvasionT1027 Obfuscated Files, T1027.003 Steganography, T1140 Deobfuscate/DecodeSpace-padded code, payload after PNG end marker, XOR/RC4/LZNT1, AESSection 15 gap
Defense EvasionT1218 / T1036 MasqueradingPNG that is an IExpress archive; svchost.exe and node.exe names in %APPDATA%Q4, Q7
Credential AccessT1555.003 Credentials from Web Browsers, T1528 Steal Application Access TokenBrowser credentials, Discord tokensQ5, Q6
CollectionT1056.001 Keylogging, T1113 Screen Capture, T1115 Clipboard DataOverlord capabilitiesQ1, Q3
Command and ControlT1105 Ingress Tool Transfer, T1102 Web ServicePayloads from Discord proxies, GitHub raw, imghippo; Solana-hosted C2 addressesQ6, Q8
ExfiltrationT1567 Exfiltration Over Web Service25MB chunks to a Discord webhookQ6 (partial)
07

Native Audit-Log Hunts

Run these outside Falcon. They come from the Checkmarx detection guidance.

Dependency and lockfile search

npm ls function-flag function-color cdn-img-fetch img-to-native native-runner tlxbnhd tldriver mxdriver --all
rg -n 'function-flag|function-color|cdn-img-fetch|img-to-native|native-runner|tlxbnhd|tldriver|mxdriver' package-lock.json npm-shrinkwrap.json pnpm-lock.yaml yarn.lock

Windows host indicators (PowerShell)

Test-Path "$env:LOCALAPPDATA\ScopeSmart Technologies Inc"
Test-Path "$env:APPDATA\Microsoft\Windows\node_runtime_helper.exe"
Test-Path "$env:APPDATA\node.exe"
Test-Path "$env:TEMP\._cif_data"
schtasks /query /tn "\Maiden" /fo LIST /v

Registry proxy and web gateway

  • Search proxy and artifact-manager logs for requests to the eight package names, including transitive pulls.
  • Search web gateway logs for raw.githubusercontent.com/cavecrew/ and for api.imghippo.com requests that come from node or npm user agents.
  • Check for any user agent or process that downloaded a "PNG" and then ran an executable of the same download.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · AutoIt3 executing an .a3x script (Overlord loader and \Maiden task)
CONF HIGHFP MEDIUMCOST LOW

Looks for: AutoIt3.exe started with an .a3x argument, the exact form of the Overlord persistence command (AutoIt3.exe h.a3x) and the loader run. FP: admins who legitimately run compiled AutoIt scripts. AutoIt3.exe is a signed legitimate tool, so this is detect-only.

// HUNT: AutoIt3.exe running an .a3x script (MALFEX Overlord loader)
// MITRE: T1059, T1053.005, T1055.012
// CONF: high
// FP: medium
// COST: low
// REQUIRES: ProcessRollup2 on Windows
// FALSE POSITIVES: IT automation that runs .a3x scripts
// TUNING: scope to unmanaged paths by keeping ImageFileName matching ScopeSmart, or allowlist your own AutoIt deployment folder; any AutoIt3.exe under a user profile on a developer host deserves review
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| event_platform=Win
| FileName=/^AutoIt3(_x64)?\.exe$/i
| CommandLine=/\.a3x/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData])
Q2 · schtasks creating the Maiden task
CONF HIGHFP LOWCOST LOW

Looks for: schtasks.exe creating or changing a task whose name contains Maiden, or whose action references an .a3x script or the ScopeSmart folder.

// HUNT: schtasks creating the Maiden persistence task (MALFEX Overlord)
// MITRE: T1053.005
// CONF: high
// FP: low
// COST: low
// REQUIRES: ProcessRollup2 on Windows
// FALSE POSITIVES: an unrelated internal task that is also named Maiden (verify the action)
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| event_platform=Win
| FileName=/^schtasks\.exe$/i
| CommandLine=/Maiden|\.a3x|ScopeSmart/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine])
Q3 · TapiUnattend.exe execution (Overlord process-hollowing target)
CONF MEDIUMFP LOWCOST LOW

Looks for: TapiUnattend.exe, a stock Windows binary that is rarely run on endpoints. Overlord is injected into it by process hollowing with a spoofed explorer.exe parent. Detect-only: the binary is legitimate, so the signal is its unusual execution, not its name or hash.

// HUNT: TapiUnattend.exe execution (possible Overlord hollowing target)
// MITRE: T1055.012, T1134.004
// CONF: medium
// FP: low
// COST: low
// REQUIRES: ProcessRollup2 on Windows
// FALSE POSITIVES: Windows telephony unattended setup; rare outside OS setup and repair
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| event_platform=Win
| FileName=/^TapiUnattend\.exe$/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData])
Q4 · gldriver_pre installer executed by the npm install stage
CONF HIGHFP LOWCOST LOW

Looks for: Execution of gldriver_pre_core.exe or gldriver_pre_asset.exe, the names the Overlord loader PNG is saved as before launch.

// HUNT: gldriver_pre_core / gldriver_pre_asset executed (MALFEX Overlord loader)
// MITRE: T1204.005, T1036
// CONF: high
// FP: low
// COST: low
// REQUIRES: ProcessRollup2 on Windows
// FALSE POSITIVES: none expected
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| event_platform=Win
| FileName=/^gldriver_pre_(core|asset)(\.exe)?$/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData])
Q5 · node_runtime_helper executable (movinlike chain downloader)
CONF HIGHFP LOWCOST LOW

Looks for: A process named node_runtime_helper, the Go downloader that img-to-native writes under %APPDATA%\Microsoft\Windows\ and that fetches setup.exe (movinlike).

// HUNT: node_runtime_helper.exe running (MALFEX movinlike chain)
// MITRE: T1105, T1204.005
// CONF: high
// FP: low
// COST: low
// REQUIRES: ProcessRollup2 on Windows
// FALSE POSITIVES: none known; the name is specific to this chain in the source report
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| event_platform=Win
| FileName=/^node_runtime_helper(\.exe)?$/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData])
Q6 · Connections to MALFEX operator IP addresses
CONF HIGHFP LOWCOST LOW

Looks for: Outbound IPv4 connections to the four operator-controlled addresses named in the Checkmarx report (movinlike host and three function-flag payload hosts).

// HUNT: connections to MALFEX operator IPs
// MITRE: T1105, T1071.001
// CONF: high
// FP: low
// COST: low
// REQUIRES: NetworkConnectIP4 on Windows
// FALSE POSITIVES: IP reassignment over time; check the first-seen date against the 2026-09 reporting window
#event_simpleName=NetworkConnectIP4
| in(field=RemoteAddressIP4, values=["104.234.65.75", "45.89.30.194", "191.96.81.101", "51.137.158.178"])
| table([@timestamp, aid, ComputerName, UserName, ContextBaseFileName, RemoteAddressIP4, RemotePort, LocalAddressIP4])
Q7 · Executables run from the root of %APPDATA% (function-flag payloads)
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: node.exe, svchost.exe, nocry.exe or malfex.exe running directly from AppData\Roaming with no subfolder, the location function-flag writes its payload. node.exe and svchost.exe are legitimate names; the abnormal path is the signal. FP: portable Node.js installs unpacked into Roaming.

// HUNT: payload executables at the root of AppData Roaming (MALFEX function-flag)
// MITRE: T1105, T1036.005
// CONF: medium
// FP: medium
// COST: low
// REQUIRES: ProcessRollup2 on Windows
// FALSE POSITIVES: portable Node.js copy placed in Roaming by a developer
// TUNING: svchost.exe, nocry.exe and malfex.exe in this location are near-certain malicious; for node.exe exclude hosts where your standard dev image places Node there, and review the parent process
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| event_platform=Win
| FileName=/^(node|svchost|nocry|malfex)\.exe$/i
| ImageFileName=/\\AppData\\Roaming\\(node|svchost|nocry|malfex)\.exe$/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData])
Q8 · DNS lookups for MALFEX payload hosts
CONF HIGHFP LOWCOST LOW

Looks for: DNS requests for the function-flag payload hosts, plus api.imghippo.com when the requesting process is node or npm. api.imghippo.com is a legitimate image host, so it is only matched in a node context.

// HUNT: DNS lookups for MALFEX payload hosts, imghippo from node only
// MITRE: T1105, T1102
// CONF: high
// FP: low
// COST: low
// REQUIRES: DnsRequest on Windows
// FALSE POSITIVES: developers who legitimately use imghippo through a node tool
#event_simpleName=DnsRequest
| DomainName=/^(cdnzona\.discloud\.app|apicdn\.squareweb\.app|apizona\.onrender\.com|bypasscdn\.onrender\.com|api\.imghippo\.com)$/i
| case {
    DomainName=/imghippo/i ContextBaseFileName=/^(node|npm|npx)(\.exe)?$/i | hit := "imghippo-from-node";
    DomainName!=/imghippo/i | hit := "payload-host";
    * | hit := "ignore" }
| hit!="ignore"
| table([@timestamp, aid, ComputerName, UserName, ContextBaseFileName, DomainName, hit])
Q9 · Known MALFEX payload hashes executing
CONF HIGHFP LOWCOST LOW

Looks for: Process executions whose SHA-256 matches the loader, the decoded Overlord and all five published movinlike builds from Checkmarx. movinlike was rebuilt repeatedly in late September 2026, so all four dated samples are included alongside the main Node.js build. The signed AutoIt3.exe hash is deliberately left out of this query, because that binary is the legitimate interpreter; it is hunted by behavior in Q1.

// HUNT: MALFEX payload hashes executing
// MITRE: T1204.005
// CONF: high
// FP: low
// COST: low
// REQUIRES: ProcessRollup2 SHA256HashData on Windows
// FALSE POSITIVES: none expected
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| in(field=SHA256HashData, values=["9aba4685af072231aee049e1a5e294965580001b364d7d00152d84fcec1ce793", "2989244eac2a4bc7a13a09dec003e5c05ef7c80b2afe0958ce25042d5b804210", "c9c374afba4658dff15f71801e88c4d199c91dd2622d72c7b0c55577c8f73437", "889e13e227bc2b762178b88c35c691db3256e72be64d92ff1f381d29a2789849", "e7f86f6cc4380db66d333eaf6f7dfc2c12d232c2bcd526434681245dea25efa4", "ff826d2778ea1d40ce8ebfd9d66ecc86d4c811f5654b8a466a7e220ebbbc6807", "2f268ca76ab27971d8b16bd4ded26e1f9cd3d4460b894af2d4bdf89f0ab7ec4b"])
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, SHA256HashData])
Q10 · node running example.js (function-flag postinstall)
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: node.exe started with example.js by a package manager shell, the function-flag postinstall that triggers the Bloody ASCII-art call. FP: any package that ships a harmless example.js.

// HUNT: node running example.js from a package postinstall (MALFEX function-flag)
// MITRE: T1059.007, T1204.005
// CONF: medium
// FP: medium
// COST: low
// REQUIRES: ProcessRollup2 on Windows
// FALSE POSITIVES: legitimate packages that run their own example.js
// TUNING: require the CommandLine to include node_modules and function-flag or function-color, or join Q7 on the same aid within 10 minutes; exclude known internal package names
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/
| event_platform=Win
| FileName=/^node(\.exe)?$/i
| CommandLine=/example\.js/i
| ParentBaseFileName=/^(cmd|powershell|pwsh|npm|node)(\.exe)?$/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine])
09

CrowdStrike Custom IOA Recommendations

Q1 to Q5 are behavior-pinned and survive infrastructure rotation, so they are IOA candidates. Q7 and Q10 stay Investigate-only until baselined. No IOA blocks a stock tool by name or hash.

IOA-1 · AutoIt3 runs an .a3x script HIGH PRIORITY

Pattern: Process Creation, image name AutoIt3.exe, command line contains .a3x. Deployment: detect mode first. Exclusions: your sanctioned AutoIt automation folder. Never set to prevent, since AutoIt3.exe is a signed legitimate tool.

IOA-2 · Maiden scheduled task creation

Pattern: Process Creation, image schtasks.exe, command line contains Maiden. Deployment: detect mode. Exclusions: none identified.

IOA-3 · gldriver_pre or node_runtime_helper execution

Pattern: Process Creation, image name matches gldriver_pre_core, gldriver_pre_asset or node_runtime_helper. Deployment: detect, then promote to prevent after one clean week since the names are specific to this chain. Exclusions: none identified.

IOC Management

Import the Section 10 CSV. Only 104.234.65.75 is set to prevent (two independent sources, actor infrastructure). Hashes and the other infrastructure import as detect. Do not import AutoIt3.exe, node.exe, TapiUnattend.exe or explorer.exe as IOCs.

10

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
ipv4,104.234.65.75,prevent,critical,2027-04-06,movinlike setup.exe host (Checkmarx and CloudSEK),campaign:MALFEX
ipv4,45.89.30.194,detect,high,2027-04-06,function-flag 2.3.8 and 2.3.9 payload host,campaign:MALFEX
ipv4,191.96.81.101,detect,high,2027-04-06,function-flag 2.3.7 payload host,campaign:MALFEX
ipv4,51.137.158.178,detect,high,2027-04-06,function-flag 2.3.5 payload host,campaign:MALFEX
domain,cdnzona.discloud.app,detect,high,2027-04-06,function-flag 1.7.3 payload host,campaign:MALFEX
domain,apicdn.squareweb.app,detect,high,2027-04-06,function-flag 4.0.0 payload host,campaign:MALFEX
domain,apizona.onrender.com,detect,high,2027-04-06,function-flag 2.3.6 payload host,campaign:MALFEX
domain,bypasscdn.onrender.com,detect,medium,2027-04-06,function-flag 3.0.0 Discord proxy host,campaign:MALFEX
sha256,9aba4685af072231aee049e1a5e294965580001b364d7d00152d84fcec1ce793,detect,high,2027-04-06,Overlord loader (PNG-named IExpress archive),campaign:MALFEX
sha256,2989244eac2a4bc7a13a09dec003e5c05ef7c80b2afe0958ce25042d5b804210,detect,high,2027-04-06,Overlord RAT decoded,campaign:MALFEX
sha256,c9c374afba4658dff15f71801e88c4d199c91dd2622d72c7b0c55577c8f73437,detect,high,2027-04-06,movinlike Node.js stealer,campaign:MALFEX
sha256,889e13e227bc2b762178b88c35c691db3256e72be64d92ff1f381d29a2789849,detect,high,2027-04-06,movinlike build 2026-09-25,campaign:MALFEX
sha256,e7f86f6cc4380db66d333eaf6f7dfc2c12d232c2bcd526434681245dea25efa4,detect,high,2027-04-06,movinlike build 2026-09-25 alt,campaign:MALFEX
sha256,ff826d2778ea1d40ce8ebfd9d66ecc86d4c811f5654b8a466a7e220ebbbc6807,detect,high,2027-04-06,movinlike build 2026-09-25 alt2,campaign:MALFEX
sha256,2f268ca76ab27971d8b16bd4ded26e1f9cd3d4460b894af2d4bdf89f0ab7ec4b,detect,high,2027-04-06,movinlike build 2026-09-26,campaign:MALFEX
sha256,fd199d3977e1a2945b6031fc8696660a980e4f4617899baa045efe7ccbc8de67,hunt,medium,2027-01-06,Oxygen.a3x / h.a3x encrypted AutoIt script (not a PE),campaign:MALFEX
sha256,5d69a932a077fee044b193c28e84564143f5c7e51079ab48e88fef74ab0b77b7,hunt,low,2027-01-06,Signed legitimate AutoIt3.exe bundled by loader (hunt only; do not block),campaign:MALFEX
sha256,4f4f7d64139bde6d458a061c7fb7dd247f70f60a1ab47d87fd3634656586c106,hunt,medium,2027-01-06,banner.png carrying encrypted payload (image file),campaign:MALFEX
sha256,8f7ed69fb5505b57f06e673826779d459f7735739756de73a6d3347a9c8ea0cc,hunt,medium,2027-01-06,cdn-img-fetch 1.0.3 banner.jpg,campaign:MALFEX
sha256,7acf331117900179b483142f216fdcb22c671eb0b1971abd57f01bc036248a6e,hunt,medium,2027-01-06,tlxbnhd postinstall.js,campaign:MALFEX
sha256,c7cf2323e4923428984297db7715d75fec5b964fe65c325b53e3fa360f3b8d86,hunt,medium,2027-01-06,cdn-img-fetch 1.0.0 and 1.0.1 index.js,campaign:MALFEX
sha256,430300450f5acbd69c29f02d8c2e243f7d1d6202d1826f6e4d7715f95c47299b,hunt,medium,2027-01-06,cdn-img-fetch 1.0.2 index.js,campaign:MALFEX
sha256,4cba0c785e66d517eabd0164f34a9c2d04549da93b5ee3eebdce5558daa2f47c,hunt,medium,2027-01-06,cdn-img-fetch 1.0.3 index.js,campaign:MALFEX
sha256,d54853d6be467567d9f22d7f22ac48214df52c1f9c7a503930e901286423044a,hunt,medium,2027-01-06,function-flag 1.7.3 example.js,campaign:MALFEX
sha256,886b84f83a0f760e664046ba40d8c800b7d0cf72190e13ca031ee5cf50f45bee,hunt,medium,2027-01-06,function-flag 1.7.3 index.js,campaign:MALFEX
domain,REPLACE_WITH_SOLANA_RESOLVED_OVERLORD_C2,detect,high,2027-04-06,UNDISCLOSED Overlord C2 read from Solana transactions,campaign:MALFEX
url,REPLACE_WITH_FULL_DISCORD_WEBHOOK_URL,detect,high,2027-04-06,UNDISCLOSED webhook token (source truncates it),campaign:MALFEX
Behavioral Signaturesnot atomic
# Behavioral signatures (not atomic; do not import as IOCs)
AutoIt3.exe with an .a3x argument; scheduled task \Maiden every 5 minutes, start 1/1/2020, Author Welcome, Comment Wichita
Files under %LOCALAPPDATA%\ScopeSmart Technologies Inc\ : AutoIt3.exe, h.a3x, SmartScope.vbs
SmartScope.vbs builds "Wscript." + "Shell" by concatenation to dodge string detection
TapiUnattend.exe started with a spoofed explorer.exe parent
downloaded file served as .png that is an IExpress self-extracting archive, saved as gldriver_pre_core.exe or gldriver_pre_asset.exe
PNG with an encrypted executable appended after the end marker; img-to-native waits up to 120 seconds
%APPDATA%\Microsoft\Windows\node_runtime_helper.exe; %TEMP%\._cif_data
raw.githubusercontent.com/cavecrew/proj/main/banner.png and banner.jpg
setup.exe fetched from 104.234.65.75 on port 700 and on the default path
node example.js calling the ASCII-art function with the font "Bloody"
code padded with spaces to hide in editors, wrapped in an empty catch, guarded on process.env.APPDATA
payload names by version: node.exe (1.7.3), svchost.exe (4.0.0, 3.0.0), nocry.exe (2.3.9), malfex.exe (2.3.8, 2.3.7, 2.3.6)
movinlike posts 25MB zip chunks to a Discord webhook
Named Packages & Attributioncontext
Malicious npm packages:
function-flag 1.7.3, 4.0.0, 3.0.0, 2.3.5 to 2.3.9
function-color 1.7.3, 1.0.0
cdn-img-fetch 1.0.0 to 1.0.3
img-to-native 1.0.0 to 1.0.3
native-runner 1.0.0 to 1.0.3
tlxbnhd 0.0.1
tldriver 0.0.1
mxdriver 0.0.1, 0.0.2
Benign cover packages (not malicious): function-ascii, malfapi, malfex-webhook-node, centralizemiddle
npm publishers: malfexkkj, malfex_user, malfexteste2, malfexteste3, malfexteste4
Team string / AES key: malfexteam2027
GitHub account: cavecrew
Operator email: corpmalfex@gmail.com
Malware: Overlord RAT, movinlike (Node.js stealer)
Package & Host Audit Checklistinventory
# Audit checklist
1. Search every package-lock.json, npm-shrinkwrap.json, pnpm-lock.yaml and yarn.lock for the eight package names.
2. Search registry proxy logs and caches; purge cached tarballs.
3. On Windows hosts: ScopeSmart folder, schtasks \Maiden, node_runtime_helper.exe, %APPDATA%\node.exe, %TEMP%\._cif_data.
4. Do not rely on --ignore-scripts: the movinlike chain has no install hook.
5. When a package is removed, review what it depended on as well.
6. If any item hits: isolate, then follow Section 14.
11

Detection Validation Gates

GateRequirement
Telemetry readyConfirm ProcessRollup2, NetworkConnectIP4 and DnsRequest flow from developer and CI host groups. Confirm DnsRequest exposes ContextBaseFileName in your tenant before relying on the Q8 imghippo branch.
Benign baselineRun Q1, Q7 and Q10 for 14 days and fill the TUNING exclusions with observed AutoIt automation, portable Node installs and legitimate example.js runs.
Positive testsSafe simulation only: on a lab host, copy a harmless executable to a file named gldriver_pre_core.exe and run it, and run schtasks /create with a task named Maiden that executes a harmless command, then delete both. Do not run any real payload.
Promotion pathInvestigate-only to Custom IOA after two clean baseline weeks. IOA-3 is the only rule that may move to prevent; IOA-1 stays detect because AutoIt3.exe is legitimate.
12

Hardening: Tiered

Immediate (this week)
  • Block the eight malicious package names at the registry proxy and purge caches (Playbook A). MITRE M1051 Update Software, M1047 Audit. Best-practice, no formal benchmark.
  • Null-route and block outbound to 104.234.65.75 at the firewall and proxy (Playbook C). MITRE M1037 Filter Network Traffic.
  • Search lockfiles and developer hosts for the packages and host artifacts (Section 7). MITRE M1047.
Near term (1 to 4 weeks)
  • Set ignore-scripts=true for CI and build agents and require lockfile installs with npm ci (Playbook B). It does not stop the require()-time movinlike chain, so treat it as one layer only. MITRE M1038 Execution Prevention.
  • Restrict executables running from user-writable profile paths with WDAC or AppLocker for managed developer images. MITRE M1038, CIS Controls v8 2.5 and 2.6. Pilot on a ring first.
  • Restrict outbound access from CI agents to an allowlist of registries and artifact hosts. MITRE M1037.
Strategic (1 to 3 months)
  • Route all installs through an artifact manager with allowlisted or reviewed packages and a package age or provenance policy. MITRE M1051, M1033.
  • Remove long-lived secrets and browser-saved credentials from developer endpoints; move to short-lived tokens. MITRE M1027 Password Policies, M1032 Multi-factor Authentication.
13

Deployable Playbooks

Playbook A · package and host audit (read-only)

# Playbook A: find the eight MALFEX packages and the Windows host artifacts
# Prerequisites: PowerShell 5.1+, read access to the repo checkout folders under $root
# Reboot required: No
# Rollback: none required, this playbook only reads files
$root = "C:\src"   # set to your checkout root
$pk = 'function-flag|function-color|cdn-img-fetch|img-to-native|native-runner|tlxbnhd|tldriver|mxdriver'
Get-ChildItem -Path $root -Recurse -Include package-lock.json,npm-shrinkwrap.json,pnpm-lock.yaml,yarn.lock -ErrorAction SilentlyContinue |
  Select-String -Pattern $pk | Select-Object Path, LineNumber, Line
@("$env:LOCALAPPDATA\ScopeSmart Technologies Inc",
  "$env:APPDATA\Microsoft\Windows\node_runtime_helper.exe",
  "$env:APPDATA\node.exe",
  "$env:TEMP\._cif_data") | ForEach-Object { "{0} : {1}" -f $_, (Test-Path $_) }
schtasks /query /tn "\Maiden" /fo LIST /v 2>$null

Playbook B · npm install hygiene for CI

# Playbook B: disable lifecycle scripts and use lockfile-only installs on CI agents
# Prerequisites: npm 7+ on the build agent, repository has a committed lockfile
# Reboot required: No
# Rollback: remove the ignore-scripts line from the .npmrc file (a backup copy is made first)
$rc = Join-Path $env:USERPROFILE ".npmrc"
if (Test-Path $rc) { Copy-Item $rc "$rc.bak" }
Add-Content -Path $rc -Value "ignore-scripts=true"
# Installs in pipelines should then use:
#   npm ci
# Note: this does NOT stop the MALFEX movinlike chain, which runs on require() with no install hook.
# Verify:
npm config get ignore-scripts

Playbook C · block the movinlike host at the host firewall

# Playbook C: outbound block for 104.234.65.75 (confirmed operator infrastructure, two sources)
# Prerequisites: local administrator, Windows Defender Firewall enabled
# Reboot required: No
# Rollback: Remove-NetFirewallRule -DisplayName "HuntPack MALFEX block 104.234.65.75"
New-NetFirewallRule -DisplayName "HuntPack MALFEX block 104.234.65.75" -Direction Outbound -Action Block -RemoteAddress 104.234.65.75 -Profile Any
# Verify:
Get-NetFirewallRule -DisplayName "HuntPack MALFEX block 104.234.65.75" | Get-NetFirewallAddressFilter
14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain the host in Falcon; preserve logs and the package tree before changes. Block 104.234.65.75 (Playbook C).SOC / IRContainment timestamp, Falcon host record
ScopeRun Q1 to Q10 for 30 days; search lockfiles and registry logs for the eight packages; check CI agents that pulled them.SOC / AppSecQuery hit list, lockfile matches
EradicateRemove the scheduled task \Maiden; delete %LOCALAPPDATA%\ScopeSmart Technologies Inc\, %APPDATA%\Microsoft\Windows\node_runtime_helper.exe and %APPDATA%\node.exe if present; purge the packages from internal registries and caches. Prefer a rebuild for any host where Overlord ran.IR / EndpointFile and task removal log
CredentialsFrom a clean system, change Discord and browser-saved account passwords, terminate Telegram sessions, move cryptocurrency to new wallets, review Discord accounts for unauthorized payment activity, and rotate any tokens or keys the developer could reach.IAM / UserRotation tickets
RecoverReinstall dependencies from a clean lockfile; re-baseline with Q1, Q7 and Q10 for 14 days.EngineeringClean query results
15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1059 / T1053.005AutoIt runs .a3x; Maiden taskQ1, Q2IOA-1, IOA-2Good
T1055.012TapiUnattend.exe hollowingQ3NoPartial sees execution, not the injection itself
T1204.005gldriver_pre and node_runtime_helperQ4, Q5, Q9IOA-3Good
T1105Payload hosts and IPsQ6, Q8NoGood
T1036.005Payload in %APPDATA% rootQ7, Q10NoPartial FP medium
T1195.002Package install or require()n/aNoPartial Section 7 lockfile and proxy search is the control
T1027 / T1140XOR, RC4, LZNT1, AES, PNG-appended payloadn/aNoGAP in-process decoding is not visible to the sensor
T1102Solana-hosted C2 addressesn/aNoGAP addresses are not published; placeholder in Section 10
T1567Discord webhook exfiltrationn/aNoGAP discord.com is ubiquitous; full webhook token not published
T1555.003 / T1528Browser, Discord and wallet data theftn/aNoGAP file-read activity is not a documented Falcon event

Undisclosed indicators, stated plainly. The Solana-resolved Overlord C2 addresses and the full Discord webhook token are not in any fetched source and are not invented. Only 104.234.65.75 reaches prevent; every hash has a single source and ships detect or hunt. Validation gates are in Section 11.

16

Hunt Summary Ticket

TITLE:      MALFEX npm campaign: Overlord RAT, movinlike stealer, function-flag downloader
SEVERITY:   HIGH, developer and CI supply chain, Windows credential and wallet theft
SCOPE:      Windows developer workstations and CI agents that installed or loaded
            function-flag, function-color, cdn-img-fetch, img-to-native,
            native-runner, tlxbnhd, tldriver or mxdriver
HYPOTHESIS: A host that ran a MALFEX package shows AutoIt3.exe running an .a3x
            script, a Maiden scheduled task, node_runtime_helper.exe, a payload
            executable under %APPDATA%, or traffic to the four operator IPs.
QUERIES:    Q1-Q10 (Section 8); IOA-1 to IOA-3 (Section 9)
DO FIRST:   1. Search lockfiles and proxy logs for the eight package names.
            2. Run Q4, Q5, Q6, Q8 and Q9 fleet-wide for 30 days.
            3. Run Q1, Q2, Q3 on Windows developer hosts.
            4. Block 104.234.65.75 and purge the packages from registries.
FINDINGS:   REPLACE_WITH_FINDINGS_SUMMARY_AFTER_HUNT_EXECUTION
GAPS:       In-process decoding, Solana-resolved C2, Discord webhook token,
            file-read theft activity (Section 15).
ACTIONS:    Deploy IOA-1 to IOA-3 in detect mode; rotate credentials on any
            confirmed host; enforce Playbook B on CI agents.
OWNER:      REPLACE_WITH_HUNT_OWNER
VERSION:    v0.1 (Draft) 2026-10-06
17

Changelog

v0.12026-10-06Initial pack build from the Checkmarx primary report, a partial CloudSEK page and SecurityWeek. Hackread blocked (HTTP 403). 10 CQL queries, 3 IOA candidates, one prevent row (104.234.65.75, two sources), stock tools detect-only, placeholders for undisclosed Solana C2 and webhook token. Pre-publish review added all four dated movinlike builds to Q9 and the CSV, and re-fetched the Checkmarx article to snapshot three technique details (SmartScope.vbs string concatenation, the explorer.exe parent spoof, the 120-second img-to-native wait) that the first snapshot rendering had condensed out.
18

References

TierSourceUsed forAccess date
T1Checkmarx Zero, MALFEX npm malware campaignAll package, host, network and hash indicators; attack paths2026-10-06
T1CloudSEK, MALFEX postinstall campaign (partial page)Second source for packages, 104.234.65.75, malfexteam2027, cavecrew, \Maiden2026-10-06
T2SecurityWeekCorroboration of scale and exposure2026-10-06

Three fetched sources were saved to MALFEX-npm-Overlord-Hunt-sources/ for the provenance gate. The Hackread article returned HTTP 403 and is not cited.

Generated 2026-10-06 by HuntPack · defensive content only