Intelligence Category: Infostealer & Credential Theft Campaigns TLP: WHITE | Pulses Analyzed: 2 | Assessment Confidence: Moderate-High
Threat Summary
Two concurrent OTX pulses reveal a converging threat pattern: adversaries are weaponizing the AI boom itself — both as lure material to steal credentials and as an operational tool to conduct intrusions.
Pulse 1 — Fake AI Tools Deliver Infostealer (Netskope/AlienVault): A Malware-as-a-Service operation has shifted its delivery mechanism from ClickFix-style social engineering to weaponized GitHub repositories. Operators clone legitimate AI-related repos and developer tools, embedding malicious payloads targeting developers, AI engineers, and finance/technology sector staff. The attack chain uses SmartLoader in a redundant two-stage loader chain (Lua-obfuscated), ultimately delivering a NodeJS-based infostealer. Most notably, the campaign employs "etherhiding" — storing C2 configuration and payload stages on the blockchain — making takedown-resistant infrastructure with a .onion fallback.
Pulse 2 — SecFlow AI-Orchestrated Intrusions (Hunt.io/AlienVault): A Chinese-speaking operator deployed an AI orchestration framework called SecFlow, using commercial LLMs (Claude, Qwen, DeepSeek) as operational components for reconnaissance, exploitation, and data collection across Taiwan, Indonesia, China, Vietnam, and Afghanistan. Targets include government (a Fengtai District government environment was the most significant compromise), education, and telecommunications. Post-exploitation tooling includes SecBox and GLUTTON webshells with steganographic payloads. Exploited CVEs include Shellshock (CVE-2014-6271), Apache Struts (CVE-2016-4437), Ghostcat (CVE-2020-1938), Log4Shell (CVE-2021-44228), Spring4Shell (CVE-2022-22965), and Grafana path traversal (CVE-2021-43798).
Collective objective: credential harvesting at scale and persistent access to government/developer environments, with stolen developer credentials (GitHub tokens, cloud keys, SSH keys) feeding downstream supply-chain and espionage operations.
Threat Actor / Malware Profile
SmartLoader + NodeJS Infostealer (MaaS)
- Distribution: Malicious clones of legitimate AI/developer GitHub repositories; poisoned search results and community promotion. Prior wave used ClickFix fake-error copy/paste lures.
- Payload behavior: Two-stage redundant loader chain — a Lua-obfuscated first stage validates the environment, then retrieves a second-stage SmartLoader which fetches the NodeJS infostealer. The stealer harvests browser credentials, cookies/session tokens, crypto wallets, SSH keys, cloud CLI configs (
~/.aws,~/.kube), and developer tokens (GitHub PATs, npm tokens). - C2 communication: Etherhiding — C2 addresses and encrypted payload blobs retrieved from blockchain smart contract storage; primary clearnet C2 at
reviewassignment.in; Tor fallback viayuhvgbzsa66biqeatbmdvfo5b5jjefcmz5t2vjuvco5qtdkshfpabyid.onion. - Persistence: Node.js runtime dropped to user-writable paths; persistence via Run keys and scheduled tasks invoking
node.exe/wscript.exeon obfuscated.jspayloads. - Anti-analysis: Lua obfuscation, redundant loader chain (if one stage is blocked, the alternate still fires), blockchain-hosted configs that cannot be seized or sinkholed.
SecFlow Framework + SecBox + GLUTTON
- Distribution: Exploitation of internet-facing appliances using the CVE set listed above — heavily weighted toward Java stacks (Struts, Log4j, Spring) and proxy/path-traversal bugs.
- Payload behavior: SecFlow orchestrates LLM-driven recon and exploit selection; SecBox acts as the access/payload container; GLUTTON webshells provide durable web-tier access. Steganographic payloads hide second-stage code in image/media files served from compromised hosts.
- C2 communication: Webshell traffic over legitimate HTTPS to compromised web servers; steganographic tasking embedded in media responses;
wscript.shell.run-style command execution artifacts on Windows-adjacent hosts. - Persistence: Webshells dropped in webroot directories; possible cron/systemd and service-level persistence on exploited Linux hosts.
- Anti-analysis: AI-generated payload variation per target, steganography, and living-off-the-compromised-infrastructure C2 that blends with normal web traffic.
IOC Analysis
The indicator sets break into three operational classes:
- File hashes (MD5/SHA1) — SmartLoader and NodeJS infostealer samples. MD5s are provided as cross-references to full SHA256 digests. Operationalize by importing into your EDR blocklist and retro-hunting across 90 days of file-creation telemetry. Note: hash-only detection has a short shelf life against a MaaS operation that repacks frequently — pair with behavioral detections below.
- Domains / hostnames —
reviewassignment.in(clearnet C2) and a v3 .onion address. Block at DNS and proxy layers; alert on any DNS resolution attempt. The .onion indicator is primarily useful as a Tor usage detection trigger — corporate endpoints should never resolve .onion or run Tor transports. - CVEs — the SecFlow pulse's exploit set (CVE-2014-6271, CVE-2016-4437, CVE-2020-1938, CVE-2021-29441, CVE-2021-44228, CVE-2021-43798, CVE-2022-22965). Treat these as a priority patch audit list for any internet-facing asset. If any are unpatched and exposed, assume attempted exploitation and hunt for webshells.
Tooling: Import IOCs via TAXII/STIX into your SIEM; use OTX DirectConnect or the OTXv2 Python SDK for automated pulse ingestion; decode Lua-obfuscated stages with any run-time Lua decompiler plus dynamic detonation in an isolated sandbox (ANY.RUN, Joe Sandbox); extract etherhiding configs by querying the referenced smart contract storage directly.
Detection Engineering
---
title: SmartLoader NodeJS Infostealer Execution via Script Interpreter
id: 7a3f1c2e-9b4d-4e6a-8c1f-2d5b7a9e3f01
status: experimental
description: Detects NodeJS infostealer execution patterns where node.exe, wscript.exe, or cscript.exe run obfuscated JavaScript from user-writable or temp paths, consistent with SmartLoader two-stage delivery from weaponized GitHub repos.
author: Security Arsenal Threat Intelligence
references:
- https://www.netskope.com/blog/developers-in-the-crosshairs-fake-ai-tools-deliver-infostealer
date: 2026/09/04
logsource:
category: process_creation
product: windows
detection:
selection_img:
Image|endswith:
- '\node.exe'
- '\wscript.exe'
- '\cscript.exe'
selection_cli:
CommandLine|contains:
- '\AppData\Local\Temp\'
- '\AppData\Roaming\'
- '\Users\Public\'
- '\ProgramData\'
selection_ext:
CommandLine|contains:
- '.js'
- '.jse'
- '.lua'
filter_git:
CommandLine|contains:
- 'node_modules'
- 'npm'
- '\Program Files\nodejs\'
condition: selection_img and selection_cli and selection_ext and not filter_git
falsepositives:
- Legitimate NodeJS development workflows running scripts from temp paths
level: high
tags:
- attack.execution
- attack.t1059.007
- attack.t1027
---
title: Etherhiding Blockchain C2 and Known SmartLoader Infrastructure
id: 8b4e2d3f-0c5e-5f7b-9d2e-3e6c8b0f4e12
status: experimental
description: Detects DNS/network connections to known SmartLoader/NodeJS infostealer C2 (reviewassignment.in), Tor .onion resolution attempts, and public blockchain RPC endpoints abused for etherhiding C2 config retrieval.
author: Security Arsenal Threat Intelligence
date: 2026/09/04
logsource:
category: dns
product: windows
detection:
selection_c2:
query|contains:
- 'reviewassignment.in'
selection_onion:
query|endswith: '.onion'
selection_chain_rpc:
query|contains:
- 'eth-mainnet'
- 'bsc-dataseed'
- 'mainnet.infura.io'
- 'rpc.ankr.com'
condition: selection_c2 or selection_onion or selection_chain_rpc
falsepositives:
- Legitimate Web3/blockchain development (chain RPC selection) - baseline developer hosts and exclude
level: critical
tags:
- attack.command_and_control
- attack.t1071.001
- attack.t1090.003
---
title: GLUTTON Webshell Deployment and Exploitation of SecFlow CVE Set
id: 9c5f3e4a-1d6f-6a8c-0e3f-4f7d9c1a5f23
status: experimental
description: Detects web server processes spawning shells or writing script files to webroot directories, consistent with GLUTTON webshell deployment following exploitation of Struts/Log4Shell/Spring4Shell/Ghostcat in the SecFlow campaign.
author: Security Arsenal Threat Intelligence
references:
- https://hunt.io/blog/chinese-operator-secflow-claude-qwen-deepseek-asia
date: 2026/09/04
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|contains:
- '\tomcat'
- '\java.exe'
- '\w3wp.exe'
- 'nginx'
- 'httpd'
selection_child:
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\wscript.exe'
- '\whoami.exe'
- '\net.exe'
- '\certutil.exe'
condition: selection_parent and selection_child
falsepositives:
- Rare legitimate application server management scripts
level: critical
tags:
- attack.persistence
- attack.t1505.003
- attack.initial_access
- attack.t1190
// Hunt: SmartLoader/NodeJS infostealer + SecFlow webshell behaviors (7-day lookback)
let lookback = 7d;
// Part 1: Known C2 + suspicious script-interpreter network activity
let NetHunt = DeviceNetworkEvents
| where TimeGenerated > ago(lookback)
| where RemoteUrl has_any ("reviewassignment.in")
or RemoteUrl endswith ".onion"
or (InitiatingProcessFileName in~ ("node.exe","wscript.exe","cscript.exe")
and InitiatingProcessCommandLine has_any ("\\Temp\\","\\Roaming\\","\\Public\\"));
// Part 2: Script interpreter executing obfuscated JS/Lua from user-writable paths
let ProcHunt = DeviceProcessEvents
| where TimeGenerated > ago(lookback)
| where FileName in~ ("node.exe","wscript.exe","cscript.exe")
| where ProcessCommandLine has_any ("\\AppData\\Local\\Temp\\","\\Users\\Public\\","\\AppData\\Roaming\\")
| where ProcessCommandLine has_any (".js",".jse",".lua")
| where ProcessCommandLine !has_any ("node_modules","npm","yarn","pnpm");
// Part 3: Web server spawning shells (GLUTTON webshell indicator)
let WebshellHunt = DeviceProcessEvents
| where TimeGenerated > ago(lookback)
| where InitiatingProcessFileName has_any ("tomcat","java","w3wp","nginx","httpd")
| where FileName in~ ("cmd.exe","powershell.exe","wscript.exe","net.exe","whoami.exe","certutil.exe");
NetHunt
| union ProcHunt, WebshellHunt
| project TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine, RemoteUrl, RemoteIP, InitiatingProcessFileName
| order by TimeGenerated desc
# SmartLoader / NodeJS Infostealer + GLUTTON Webshell Host Hunt
# Run elevated on suspect endpoints. Outputs findings to console + CSV.
$findings = @()
# 1) Persistence: Run keys invoking script interpreters from user paths
$runKeys = @("HKCU:\Software\Microsoft\Windows\CurrentVersion\Run",
"HKLM:\Software\Microsoft\Windows\CurrentVersion\Run")
foreach ($key in $runKeys) {
if (Test-Path $key) {
Get-ItemProperty $key | Get-Member -MemberType NoteProperty | ForEach-Object {
$val = (Get-ItemProperty $key).$($_.Name)
if ($val -match "node\.exe|wscript\.exe|cscript\.exe" -and $val -match "AppData|Public|Temp") {
$findings += [PSCustomObject]@{Type="RunKey Persistence"; Path=$key; Detail="$($_.Name) = $val"}
}
}
}
}
# 2) Scheduled tasks running JS/Lua via script interpreters
Get-ScheduledTask | ForEach-Object {
$actions = $_.Actions | Out-String
if ($actions -match "node\.exe|wscript\.exe|cscript\.exe" -and $actions -match "\.js|\.jse|\.lua") {
$findings += [PSCustomObject]@{Type="Scheduled Task"; Path=$_.TaskPath + $_.TaskName; Detail=$actions.Trim()}
}
}
# 3) Rogue NodeJS runtimes / JS payloads in user-writable dirs
$searchPaths = @("$env:TEMP","$env:APPDATA","C:\Users\Public","C:\ProgramData")
foreach ($p in $searchPaths) {
Get-ChildItem $p -Recurse -Include node.exe,*.jse,*.lua -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-45) } |
ForEach-Object { $findings += [PSCustomObject]@{Type="Suspicious File"; Path=$_.FullName; Detail="Modified $($_.LastWriteTime)"} }
}
# 4) Known infostealer sample hashes (OTX pulse)
$badHashes = @("673570abcb54b368b9521bdff8f331d4","6f2e3a9ec6914209bf85be0677aadf9e",
"82e81158366a953c33d0720dfe34b95b","ab5cdef0cde09c4bb0cab33ab0d2f92e",
"c2a7f19ba96dc460d591d37d664fe6aa")
foreach ($p in $searchPaths) {
Get-ChildItem $p -Recurse -File -ErrorAction SilentlyContinue | ForEach-Object {
$h = (Get-FileHash $_.FullName -Algorithm MD5 -ErrorAction SilentlyContinue).Hash
if ($badHashes -contains $h.ToLower()) {
$findings += [PSCustomObject]@{Type="KNOWN MALWARE HASH"; Path=$_.FullName; Detail="MD5 $h"}
}
}
}
# 5) Active network connections to C2 / Tor / blockchain RPC
Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue | ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
if ($proc.ProcessName -match "node|wscript|cscript|tor") {
$findings += [PSCustomObject]@{Type="Suspicious Connection"; Path=$proc.Path; Detail="$($proc.ProcessName) -> $($_.RemoteAddress):$($_.RemotePort)"}
}
}
# 6) Webshell hunt: script files recently written to IIS/Tomcat webroots
$webroots = @("C:\inetpub\wwwroot","C:\Program Files\Apache Software Foundation","C:\tomcat")
foreach ($w in $webroots) {
Get-ChildItem $w -Recurse -Include *.aspx,*.ashx,*.jsp,*.jspx,*.php -ErrorAction SilentlyContinue |
Where-Object { $_.CreationTime -gt (Get-Date).AddDays(-60) } |
ForEach-Object { $findings += [PSCustomObject]@{Type="Possible Webshell (GLUTTON)"; Path=$_.FullName; Detail="Created $($_.CreationTime)"} }
}
$findings | Format-Table -AutoSize
$findings | Export-Csv "$env:TEMP\otx_hunt_$(Get-Date -Format 'yyyyMMdd_HHmm').csv" -NoTypeInformation
Write-Host "`n[+] Hunt complete. $($findings.Count) findings. Review DNS logs for 'reviewassignment.in' and .onion resolution." -ForegroundColor Yellow
Response Priorities
Immediate (0–4 hours)
- Block
reviewassignment.inat DNS, proxy, and EDR network layers; block all .onion resolution and Tor transport on corporate endpoints. - Push the five MD5/SHA1 infostealer hashes into EDR blocklists; retro-hunt 90 days of execution telemetry.
- Alert on any process named
node.exe/wscript.exeestablishing outbound connections to blockchain RPC endpoints (Infura, BSC dataseed, Ankr) — etherhiding retrieval is high-fidelity on non-developer hosts.
24 Hours
- Credential-stealing malware is confirmed in scope. Any host with a SmartLoader/NodeJS infostealer hit: force immediate password resets for all users of that host, revoke GitHub PATs, npm tokens, cloud CLI credentials (AWS/Azure/GCP), SSH keys, and invalidate all browser session tokens. Assume full credential compromise.
- Audit GitHub SSO logs for repository clones of AI/dev-tool repos from untrusted sources; check for recently added repo secrets or modified CI/CD workflows (secondary supply-chain payload risk).
- Patch-audit internet-facing assets against the SecFlow CVE set (Log4Shell, Spring4Shell, Struts, Ghostcat, Grafana traversal, Shellshock). Treat any unpatched exposure as an incident.
1 Week
- Architecture hardening: restrict NodeJS runtime execution to approved developer workstations via application control (WDAC/AppLocker); block script interpreters from launching from user-writable paths enterprise-wide.
- Require signed/verified repository provenance for developer tooling; deploy IDE-integrated repo reputation checking.
- Segment internet-facing Java/web stacks behind WAF rules tuned for the exploited CVE set; enable file-integrity monitoring on all webroots to catch GLUTTON-class webshell drops.
- Add LLM-assisted-intrusion awareness to threat models: expect AI-generated payload variance — prioritize behavioral detections over signatures.
Related Resources
Security Arsenal Incident Response Managed SOC & MDR Services AlertMonitor Threat Detection From The Dark Side Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.