Classification: TLP:WHITE | Priority: HIGH | Pulse Count: 5 | Analyst: Security Arsenal Threat Intelligence
Threat Summary
Five concurrent OTX pulses paint a picture of a threat landscape dominated by credential theft and surveillance infrastructure delivered through trusted supply chains. The common thread across all five pulses is abuse of implicit trust — package registries, browser extension stores, router firmware, and legitimate cloud services — to deliver infostealers, implants, and RATs at scale.
Three distinct but converging threat clusters emerge:
-
Software supply-chain infostealers — 11 malicious NuGet packages posing as game cheats (Albion Online, GTA5RP, GrandRP, Throne and Liberty) act as first-stage downloaders for
pepesoft.exe, a PyInstaller-packaged Windows host-surveillance payload with screenshot exfiltration, hardware fingerprinting, Telegram bot control, and Google Sheets telemetry. In parallel, 19 Chrome/Edge extensions deliver a wallet-drainer framework with WebSocket C2, CSP stripping, and XSS injection targeting cryptocurrency secrets and browser credentials. -
State-aligned intrusion activity — Kimsuky's July 2026 campaigns against South Korean entities used seven distinct attack types (A–G) built on LNK-lure spear phishing, PowerShell, AutoIt, curl.exe staging, and DLL side-loading to deploy XenoRAT keylogging and infostealer capability, staged through GitHub, Google Drive, and Dropbox.
-
Infrastructure-level compromise — Three firmware implants (SPEAKINGSTONE, DARKLANTERN, ENDLESSDOORS) embedded in ZBT router firmware create persistent, internet-facing root backdoors across 11 countries, while the Dysphoria botnet (200,000+ hosts) exploits legacy IoT CVEs and converts victims into relay/proxy nodes with blockchain-based (ENS/SNS) C2.
Collective objective: bulk credential harvesting, cryptocurrency theft, and long-term surveillance persistence — with compromised credentials and session data almost certainly feeding dark web credential marketplaces and initial-access broker ecosystems.
Threat Actor / Malware Profile
pepesoft.exe (NuGet Supply-Chain Infostealer)
- Distribution: Malicious .NET CLI tools on NuGet masquerading as game cheats/utilities.
- Payload behavior: First-stage downloader fetches a PyInstaller second stage (
pepesoft.exe). Performs hardware fingerprinting, screenshot capture, and host surveillance. - C2: Telegram bot API for tasking; Google Sheets as a telemetry/dead-drop channel; DNS-over-HTTPS (DoH) for resolution to bypass local DNS controls.
- Evasion: DoH evasion, requests UAC elevation to resync system time (timestamp manipulation defeats TLS/cert validation checks and log correlation), PyInstaller packing.
- Persistence: UAC-elevated execution enables run keys / scheduled tasks (hunt accordingly).
XenoRAT (Kimsuky — DPRK-attributed APT)
- Distribution: Spear-phishing with malicious LNK files; seven attack variants (A–G).
- Payload behavior: Keylogging, infostealer modules, RAT functionality.
- Delivery chain: LNK → PowerShell / AutoIt →
curl.exedownload from GitHub, Google Drive, Dropbox → DLL side-loading for execution. - Evasion: Living-off-the-land binaries (curl, PowerShell), legitimate cloud hosting for staging, side-loading into signed processes.
SPEAKINGSTONE / DARKLANTERN / ENDLESSDOORS (ZBT Firmware Implants)
- Distribution: Embedded in router firmware at the supply-chain level; devices shipped globally (US, CA, AU, PH, DE, RU, and others).
- Payload behavior: DARKLANTERN is an unauthenticated UDP backdoor on port 9992 providing root shell from the internet, with trivial MAC-address bypass. SPEAKINGSTONE is a phone-home implant; ENDLESSDOORS provides additional covert access.
- C2: Hardcoded infrastructure including
47.107.224.89,45.156.37.159,www.ac-link.com. - Persistence: Firmware-resident — survives reboots, factory resets, and most endpoint controls.
Dysphoria Botnet (jackskid / fbot variants)
- Propagation: IoT exploitation — CVE-2017-17215, CVE-2018-14558, CVE-2017-5259, CVE-2020-8515, CVE-2013-3307, CVE-2016-20016, CVE-2022-35733, CVE-2020-25499.
- C2: Blockchain-based resolution via ENS and SNS domains, making takedown-resistant infrastructure.
- Architecture: Victims converted to relay/proxy nodes — likely monetized as proxyware and used to anonymize credential-stuffing and dark web traffic.
Chrome/Edge Wallet-Drainer Extensions
- Distribution: 19 extensions (18 Chrome, 1 Edge) published over six months on official stores.
- Payload behavior: Extendable framework that strips Content-Security-Policy headers, uses XSS injection to execute payloads, steals wallet secrets and browser credentials.
- C2: WebSocket channels to domains such as
cookie-whitelist.com,whale-alert.life,api.extensionanalyticspro.top,ggle-analytics.com(typosquat).
IOC Analysis
The indicator set spans five types, each requiring different operationalization:
| Type | Count (pulses) | Examples | SOC Action |
|---|---|---|---|
| SHA256/SHA1/MD5 hashes | 49+ | d5385526f2f3e52c... (pepesoft), 7e2e036fec2fe7ab... (implants) | Load into EDR blocklists; sweep with YARA/hash matching; note MD5s are for Kimsuky LNK/stagers |
| IPv4 | 2 | 47.107.224.89, 45.156.37.159 | Block at egress firewall; retro-hunt NetFlow/proxy logs for router implant phone-home |
| Domains/hostnames | 8+ | cookie-whitelist.com, ggle-analytics.com, www.ac-link.com | DNS sinkhole; alert on DoH queries bypassing internal resolvers |
| URLs | 2+ | http://api.active-enable-right-click.top/?uuid= | Proxy block; hunt for UUID-patterned query strings in web logs |
| CVEs | 8 | CVE-2020-25499, CVE-2017-17215 | Attack-surface scan of IoT/network devices; patch or isolate vulnerable firmware |
Tooling guidance: Hash IOCs decode directly into EDR/AV custom indicators (Defender, CrowdStrike, SentinelOne all accept CSV/STIX ingestion). Domain IOCs should be fed to DNS security (e.g., Cisco Umbrella, Infoblox) and DoH-aware controls — note pepesoft uses DoH specifically to blind passive DNS. The blockchain C2 (ENS/SNS) requires monitoring for outbound traffic to known ENS/SNS resolver endpoints rather than domain blocklists. For firmware implants, network-layer detection (unexpected UDP/9992 listeners, outbound beacons to the listed IPs) is the only reliable control — endpoint agents cannot see router firmware.
Detection Engineering
Sigma Rules
---
title: Malicious NuGet Tool Execution - pepesoft Infostealer Downloader
id: 7a3f1c2e-9b4d-4e5a-8c1f-2d6e7f8a9b0c
status: experimental
description: Detects execution of dotnet CLI tools or pepesoft.exe payload associated with malicious NuGet game-cheat packages delivering a PyInstaller surveillance infostealer
author: Security Arsenal Threat Intelligence
date: 2026/08/28
references:
- https://socket.dev/blog/11-malicious-nuget-tools-pose-as-game-cheats
logsource:
category: process_creation
product: windows
level: high
tags:
- attack.initial_access
- attack.t1195_002
- attack.execution
detection:
selection_img:
Image|endswith: 'pepesoft.exe'
selection_dotnet:
Image|endswith: 'dotnet.exe'
CommandLine|contains:
- 'tool install'
- 'tool run'
selection_cheat_lure:
CommandLine|contains:
- 'albion'
- 'gta5rp'
- 'grandrp'
- 'throne and liberty'
- 'cheat'
condition: selection_img or (selection_dotnet and selection_cheat_lure)
falsepositives:
- Legitimate game modding tools (rare in enterprise environments)
fields:
- Image
- CommandLine
- ParentImage
- User
---
title: DNS-over-HTTPS to Public Resolvers from Non-Browser Process
id: 8b4e2d3f-0c5e-5f6b-9d2e-3e7f8a9b0c1d
status: experimental
description: Detects non-browser processes making HTTPS connections to public DoH resolvers, a technique used by the pepesoft infostealer to bypass local DNS controls
author: Security Arsenal Threat Intelligence
date: 2026/08/28
references:
- https://socket.dev/blog/11-malicious-nuget-tools-pose-as-game-cheats
logsource:
category: network_connection
product: windows
level: medium
tags:
- attack.command_and_control
- attack.t1071_001
- attack.defense_evasion
detection:
selection_dest:
DestinationIp:
- '1.1.1.1'
- '1.0.0.1'
- '8.8.8.8'
- '8.8.4.4'
- '9.9.9.9'
- '94.140.14.14'
- '94.140.15.15'
DestinationPort: 443
filter_browsers:
Image|endswith:
- 'chrome.exe'
- 'msedge.exe'
- 'firefox.exe'
- 'brave.exe'
condition: selection_dest and not filter_browsers
falsepositives:
- VPN clients, some antivirus updaters using DoH
fields:
- Image
- DestinationIp
- DestinationHostname
- User
---
title: Kimsuky XenoRAT Delivery - LNK Spawning PowerShell or Curl Staging
id: 9c5f3e4a-1d6f-6a7c-0e3f-4f8a9b0c1d2e
status: experimental
description: Detects LNK-file execution chains spawning PowerShell, AutoIt, or curl.exe consistent with Kimsuky July 2026 spear-phishing campaigns delivering XenoRAT via cloud staging and DLL side-loading
author: Security Arsenal Threat Intelligence
date: 2026/08/28
references:
- https://asec.ahnlab.com/en/95171
logsource:
category: process_creation
product: windows
level: high
tags:
- attack.initial_access
- attack.t1566_001
- attack.t1204_002
- attack.t1574_002
detection:
selection_parent:
ParentCommandLine|contains: '.lnk'
selection_child:
Image|endswith:
- 'powershell.exe'
- 'pwsh.exe'
- 'curl.exe'
- 'autoit3.exe'
- 'rundll32.exe'
selection_cloud:
CommandLine|contains:
- 'github.com'
- 'raw.githubusercontent.com'
- 'drive.google.com'
- 'dropbox.com'
condition: selection_parent and selection_child and selection_cloud
falsepositives:
- IT admin shortcuts deploying scripts from repositories (rare)
fields:
- Image
- ParentCommandLine
- CommandLine
- User
KQL (Microsoft Sentinel)
// Hunt: pepesoft infostealer, wallet-drainer C2, ZBT implant beacons, and Kimsuky staging
// Covers: network IOCs, DoH evasion, LNK->LOLBins chains, WebSocket C2 domains
let MaliciousDomains = dynamic(["cookie-whitelist.com", "cookie-whitelist.top", "whale-alert.life",
"api.extensionanalyticspro.top", "api.active-enable-right-click.top", "ggle-analytics.com",
"blockfolioaddressmonitor.pro", "cryptopricebadgequickglance.pro", "www.ac-link.com"]);
let MaliciousIPs = dynamic(["47.107.224.89", "45.156.37.159"]);
let DoHResolvers = dynamic(["1.1.1.1", "1.0.0.1", "8.8.8.8", "8.8.4.4", "9.9.9.9"]);
let Browsers = dynamic(["chrome.exe", "msedge.exe", "firefox.exe", "brave.exe"]);
let NetworkHits =
DeviceNetworkEvents
| where TimeGenerated > ago(7d)
| where RemoteUrl has_any (MaliciousDomains)
or RemoteIP in (MaliciousIPs)
or (RemoteIP in (DoHResolvers) and not(InitiatingProcessFileName has_any (Browsers)))
| extend DetectionType = case(
RemoteIP in (MaliciousIPs), "ZBT Implant Beacon",
RemoteUrl has_any (MaliciousDomains), "Wallet-Drainer/Implant C2",
"DoH Evasion (pepesoft TTP)")
| project DetectionType, TimeGenerated, DeviceName, InitiatingProcessFileName,
InitiatingProcessCommandLine, RemoteIP, RemoteUrl, RemotePort, AccountName;
let ProcessHits =
DeviceProcessEvents
| where TimeGenerated > ago(7d)
| where FileName =~ "pepesoft.exe"
or (ProcessCommandLine has ".lnk" and FileName in~ ("powershell.exe","curl.exe","autoit3.exe","rundll32.exe")
and ProcessCommandLine has_any ("github.com","drive.google.com","dropbox.com"))
or (FileName =~ "dotnet.exe" and ProcessCommandLine has_any ("cheat","albion","gta5rp","grandrp"))
| extend DetectionType = case(
FileName =~ "pepesoft.exe", "pepesoft Payload Execution",
FileName =~ "dotnet.exe", "Malicious NuGet Tool",
"Kimsuky LNK Staging Chain")
| project DetectionType, TimeGenerated, DeviceName, FileName, ProcessCommandLine,
InitiatingProcessCommandLine, AccountName, SHA256;
union NetworkHits, ProcessHits
| sort by TimeGenerated desc
PowerShell — IOC & Artifact Hunt Script
# Security Arsenal - OTX Pulse Hunt: pepesoft / XenoRAT / wallet-drainer artifacts
# Run elevated on suspect endpoints. Outputs findings to console + CSV.
$findings = @()
# --- 1. pepesoft payload & suspicious PyInstaller artifacts ---
$pepePaths = @("$env:TEMP\pepesoft.exe","$env:APPDATA\pepesoft.exe",
"$env:LOCALAPPDATA\pepesoft.exe","$env:USERPROFILE\Downloads\pepesoft.exe")
foreach ($p in $pepePaths) {
if (Test-Path $p) {
$h = (Get-FileHash $p -Algorithm SHA256).Hash
$findings += [PSCustomObject]@{Check="pepesoft payload file"; Path=$p; Detail=$h}
}
}
# PyInstaller onefile extraction dirs (_MEIxxxxx) in TEMP
Get-ChildItem "$env:TEMP" -Directory -Filter "_MEI*" -ErrorAction SilentlyContinue | ForEach-Object {
$findings += [PSCustomObject]@{Check="PyInstaller temp extraction dir"; Path=$_.FullName; Detail=$_.LastWriteTime}
}
# --- 2. Known malicious file hashes (OTX samples) ---
$badHashes = @("d5385526f2f3e52c7d96087611c6cd4e479bf61828400efdb3ca09406d981609",
"9a2091e6625fc11cfd8f39c17aa271604e66322ee045028946274b988103e35b",
"900ddb81d27e03967209fee4d17d13deb68eef0e1f10936eb520ca10575cb49e",
"ab58a90eb3682c6dc3389cd700a64f68a19c0dac3d0fa8e3df97ae041f96d4e1",
"e6e1049158ceb1971c61388349c81fa6047a7aecb4ff2089ef54a50dcc35dbc0")
foreach ($dir in @($env:TEMP,$env:APPDATA,"$env:USERPROFILE\Downloads")) {
Get-ChildItem $dir -Recurse -File -Include *.exe,*.dll -ErrorAction SilentlyContinue |
Where-Object {$_.Length -lt 100MB} | ForEach-Object {
$h = (Get-FileHash $_.FullName -Algorithm SHA256 -ErrorAction SilentlyContinue).Hash
if ($badHashes -contains $h) {
$findings += [PSCustomObject]@{Check="KNOWN MALICIOUS HASH"; Path=$_.FullName; Detail=$h}
}
}
}
# --- 3. Persistence: Run keys & scheduled tasks referencing pepesoft/NuGet lures ---
$runKeys = @("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
"HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
foreach ($rk in $runKeys) {
Get-ItemProperty $rk -ErrorAction SilentlyContinue | ForEach-Object {
$_.PSObject.Properties | Where-Object {$_.Value -match "pepesoft|cheat|albion|gta5rp|grandrp"} | ForEach-Object {
$findings += [PSCustomObject]@{Check="Suspicious Run key"; Path="$rk\$($_.Name)"; Detail=$_.Value}
}
}
}
Get-ScheduledTask -ErrorAction SilentlyContinue | Where-Object {
($_.Actions.Execute -match "pepesoft|dotnet") -or ($_.TaskName -match "cheat|albion|gta5rp")
} | ForEach-Object {
$findings += [PSCustomObject]@{Check="Suspicious scheduled task"; Path=$_.TaskName; Detail=$_.Actions.Execute}
}
# --- 4. Network: connections to implant C2 IPs and drainer domains ---
$badIPs = @("47.107.224.89","45.156.37.159")
Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue |
Where-Object {$badIPs -contains $_.RemoteAddress} | ForEach-Object {
$proc = (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName
$findings += [PSCustomObject]@{Check="ACTIVE connection to implant C2"; Path=$_.RemoteAddress; Detail="PID $($_.OwningProcess) ($proc)"}
}
# --- 5. DoH evasion check: non-browser processes resolving via public DoH ---
Get-NetTCPConnection -RemotePort 443 -State Established -ErrorAction SilentlyContinue |
Where-Object {@("1.1.1.1","8.8.8.8","9.9.9.9") -contains $_.RemoteAddress} | ForEach-Object {
$proc = (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName
if ($proc -notmatch "chrome|msedge|firefox|brave") {
$findings += [PSCustomObject]@{Check="Non-browser DoH connection"; Path=$_.RemoteAddress; Detail="$proc (PID $($_.OwningProcess))"}
}
}
# --- 6. Recent LNK files in user profile (Kimsuky delivery vector) ---
Get-ChildItem "$env:USERPROFILE\Desktop","$env:USERPROFILE\Downloads" -Filter *.lnk -ErrorAction SilentlyContinue |
Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-30)} | ForEach-Object {
$findings += [PSCustomObject]@{Check="Recent LNK file (review)"; Path=$_.FullName; Detail=$_.LastWriteTime}
}
# --- Output ---
if ($findings.Count -gt 0) {
$findings | Format-Table -AutoSize
$findings | Export-Csv -Path "$env:TEMP\otx_hunt_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv" -NoTypeInformation
Write-Host "[!] $($findings.Count) findings - escalate to SOC for triage." -ForegroundColor Red
} else {
Write-Host "[+] No indicators found on this host." -ForegroundColor Green
}
Response Priorities
Immediate (0–4 hours)
- Block all network IOCs at egress firewall, DNS layer, and web proxy:
47.107.224.89,45.156.37.159,cookie-whitelist.com/.top,whale-alert.life,api.extensionanalyticspro.top,api.active-enable-right-click.top,ggle-analytics.com,blockfolioaddressmonitor.pro,cryptopricebadgequickglance.pro,www.ac-link.com. - Push all file hashes (36 pepesoft SHA256s, Kimsuky MD5s, implant SHA256/SHA1s) to EDR blocklists and email gateway sandbox detonation.
- Block or alert on outbound UDP/9992 — DARKLANTERN's unauthenticated backdoor port — and audit internet-facing ZBT routers in your asset inventory.
- Run the PowerShell hunt script on endpoints used by developers (NuGet exposure) and finance/crypto-adjacent staff (extension exposure).
- Remove the 19 malicious browser extensions via enterprise browser policy; audit installed extensions fleet-wide.
24 Hours (Identity & Credential Response)
- pepesoft and the wallet-drainer are credential/secret stealers — assume compromise of any host with confirmed execution. Force password resets and revoke active sessions/tokens for affected users (Entra ID, Google Workspace, VPN, SSO).
- Rotate any cryptocurrency wallet keys, API keys, or browser-stored credentials accessible from infected endpoints; check for unauthorized wallet transactions.
- Review Telegram API and Google Sheets access from corporate egress — pepesoft abuses both as C2/telemetry channels; block Telegram bot API for non-approved processes.
- Retro-hunt proxy, DNS, and NetFlow logs (7–30 days) for the KQL query patterns, especially DoH to public resolvers from non-browser processes.
- If Kimsuky targeting is plausible (Korea-linked operations, government, academia, defense), review email gateway logs for LNK attachments and hunt DLL side-loading artifacts.
1 Week (Architecture Hardening)
- NuGet/package registry governance: enforce private NuGet feeds with allow-listing (e.g., Artifactory/Nexus proxy), enable package signature verification, and block direct
dotnet tool installfrom public NuGet on endpoints via AppLocker/WDAC. - DNS control: block outbound DoH (443 to known public resolvers) from non-browser processes at the firewall; force all resolution through internal resolvers with logging.
- Firmware/supply chain: inventory and isolate ZBT routers; segment IoT/network devices into restricted VLANs with egress filtering; establish firmware provenance verification for network hardware procurement.
- Patch the Dysphoria-exploited CVEs on all network/IoT devices (CVE-2020-25499, CVE-2017-17215, CVE-2022-35733, et al.) or decommission unpatchable hardware.
- Browser extension governance: deploy extension allow-listing via Chrome/Edge enterprise policy; monitor for WebSocket connections from browser-extension service workers.
- Block LNK attachments at the email gateway and enable Attack Surface Reduction rules for Office/script-child-process behaviors.
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.