Cross-Platform Node.js NPM Stealer — Browser Credentials, Sensitive File Exfiltration, and WebSocket Reverse Shell (SHA256 049300aa…ddeb9, C2 216.126.225.243)
Cross-Platform Node.js NPM Stealer (TL-2026-0557), also tracked as extracted-decoded.js stealer, is a high-severity malware campaign, first published 2026-05-22. It has no confirmed attribution, affects Microsoft Windows (via WSL), maps to 24 MITRE ATT&CK techniques (T1005, T1027, T1033), and is covered by 9 detection rules and 24 indicators of compromise.
Key facts for TL-2026-0557
- Threat ID
- TL-2026-0557
- Also known as
- extracted-decoded.js stealer, Cross-Platform NPM Stealer
- Severity
- HIGH
- Status
- ACTIVE
- Category
- MALWARE
- First published
- 2026-05-22
- Last reviewed
- 2026-05-22
- Attribution confidence
- NONE
- Motivation
- FINANCIAL
- Target sectors
- technology, cryptocurrency, financial, developers, software-development
- Target regions
- Global
- Detection rules
- 9
- Indicators of compromise
- 24
Malware and tooling in Cross-Platform Node.js NPM Stealer
Malware and tooling: Cross-Platform NPM Stealer (SANS ISC diary 33006), Axios (npm), Custom WebSocket reverse shell + HTTP POST exfil, obfuscator.io
SANS ISC handler Xavier Mertens analyzed an obfuscated cross-platform Node.js stealer (SHA256 049300aa5dd774d6c984779a0570f59610399c71864b5d5c2605906db46ddeb9, filename 'extracted-decoded.js') containing three plain-text payloads after wrapper deobfuscation: (1) a Chromium credential stealer covering 13 browsers, (2) a recursive sensitive-file exfiltration scanner targeting crypto wallets, keys, seed phrases, and secrets, and (3) a WebSocket reverse-shell module that beacons to 216.126.225.243 — an IP previously documented by Socket.dev as DPRK OtterCookie / 'Contagious Interview' C2 infrastructure. The malware targets Windows-via-WSL, macOS, and Linux using a single Node.js codebase, exfiltrates over ports 8085/8086/8087, and uses Axios with an HMAC-SHA256 key ('SuperStr0ngSecret@)@^') embedded in plain text.
How Cross-Platform Node.js NPM Stealer works
OVERVIEW On 2026-05-22, SANS Internet Storm Center handler Xavier Mertens published a static analysis of an obfuscated Node.js stealer uploaded to VirusTotal as 'extracted-decoded.js' (SHA256 049300aa5dd774d6c984779a0570f59610399c71864b5d5c2605906db46ddeb9). The sample failed to execute in a sandbox, so analysis is static-only. The wrapper is obfuscated with obfuscator.io-style techniques — a long array of small Base64-encoded strings indexed by low-level arithmetic decoder functions — but the three malicious payloads themselves are embedded in plain text after wrapper deobfuscation.
CROSS-PLATFORM TARGETING The stealer is engineered to operate across Windows (via WSL paths of the form '/mnt/c/Users/${windowsUsername}/AppData/Local'), macOS, and Linux from a single Node.js codebase. The use of WSL-rooted paths to read native Windows browser profiles is notable: it allows the stealer to harvest Windows credentials from a Linux runtime, sidestepping detection tooling that assumes a Windows process context for Chromium User Data access.
PAYLOAD 1 — BROWSER CREDENTIAL STEALER The first payload enumerates Chromium 'User Data' directories for 13 browsers: Chrome, Brave, AVG Browser, Microsoft Edge, Opera, Opera GX, Vivaldi, Kiwi Browser, Yandex Browser, Iridium, Comodo Dragon, SRWare Iron, and Chromium itself. After reading Local State / Login Data / Cookies / Web Data SQLite stores, the harvested credentials are exfiltrated to the C2 on TCP port 8085. The same module additionally enumerates Chromium extension directories for a long list of crypto-wallet extension IDs ('wps' array), including MetaMask (nkbihfbeogaeaoehlefnkodbefgpgknn), Phantom (fhkbkphfeanlhnlffkpologfoccekhic), Trust Wallet (nphplpgoakhhjchkkhmiggakijnkhfnd), Coinbase Wallet, TronLink, Ronin, Binance Chain Wallet, Coin98, Argent, Keplr, Solflare, MEW CX, SafePal, Guarda, and ~25 additional wallet extension IDs.
PAYLOAD 2 — RECURSIVE SENSITIVE-FILE EXFILTRATION The second payload is a recursive filesystem scanner that searches the victim host for files matching a SENSITIVE_FILE_PATTERNS list of ~170 entries. The patterns cluster into four families: (a) cryptocurrency artifacts — 'metamask', 'phantom', 'bitcoin', 'ethereum', 'wallet', 'ledger', 'trezor', 'electrum', 'mycelium', 'blockchain', 'rabby', 'solflare', 'keplr', 'argent', 'martian', 'petra', 'okx'; (b) cryptographic key material — '.pem', '.p12', '.pfx', '.jks', '.keys', '.p8', '.p7b', '.cer', '.crt', 'id_rsa', 'id_dsa', 'id_ecdsa', 'id_ed25519', 'seed', 'mnemonic', 'passphrase', 'bip39', 'bip44', 'privatekey', 'private_key', 'privkey'; (c) general secrets and credentials — 'password', 'credential', 'token', 'access_token', 'refresh_token', 'api_key', 'api_secret', 'secret', 'masterkey', 'masterpassword', '.env'; (d) document and database extensions — '.db', '.sqlite', '.sqlite3', '.sql', '.mdb', '.doc', '.docx', '.pdf', '.xls', '.xlsx', '.txt', '.json', '.csv', '.xml', '.log', '.bak'. Matching files are uploaded via HTTP POST to hxxp://216.126.225.243:8086/upload using the Axios NPM package and multipart/form-data.
PAYLOAD 3 — WEBSOCKET REVERSE SHELL The third payload opens a WebSocket connection to the C2 on TCP port 8087 implementing reverse-shell capabilities. On first connection, the malware POSTs a host fingerprint to hxxp://216.126.225.243:8087/api/notify containing fields { 'ukey': 504, 't': 5, 'host': '504_<hostname>', 'os': '<type> <release>', 'username': '<username>', 'timestamp': <unix_ts> }. The 'ukey' value 504 likely identifies the campaign or operator. Subsequent traffic is encrypted using HMAC-SHA256 with a hard-coded key 'SuperStr0ngSecret@)@^' — the key is plain text in the binary, allowing defenders to decrypt captured traffic.
C2 INFRASTRUCTURE AND ATTRIBUTION OVERLAP All three modules communicate with a single IP — 216.126.225.243 — on three different ports (8085/8086/8087). Xavier Mertens explicitly notes in the SANS write-up that this IP is 'known as a DPRK OtterCookie C2', citing Socket.dev's research on the North Korean 'Contagious Interview' npm-attack campaign. The SANS analysis itself stops short of formally attributing this specific sample to the DPRK operators; the linkage is via shared C2 infrastructure rather than malware family overlap. Defenders should treat 216.126.225.243 as a high-confidence DPRK-linked C2 endpoint and treat the sample as plausibly tied to the OtterCookie cluster, while keeping the formal attribution as an open question pending dynamic analysis.
DELIVERY VECTOR The SANS write-up does not establish a delivery vector; the sample was retrieved from VirusTotal. Given the Node.js / Axios runtime and the documented Socket.dev research on the same C2 (which describes 197 malicious npm packages used as a North Korean delivery channel), the most plausible delivery pathway is via a poisoned npm package executed by a victim developer — consistent with the 'Contagious Interview' fake-recruiter / fake-coding-challenge social engineering pattern. This delivery vector is hypothesized, not confirmed by the SANS source.
DETECTION POSTURE Because the sample failed to run in a sandbox, network-IOC-driven detection is constrained to the single C2 IP and the three exfil ports. Static / behavioral hooks are stronger: (i) the literal string 'SuperStr0ngSecret@)@^' is high-fidelity if ever observed in process memory or filesystem artifacts; (ii) any Node.js / Axios process making outbound POSTs to /upload and /api/notify on the same host with ports 8085/8086/8087 in close succession is highly anomalous; (iii) WSL-resident processes touching '/mnt/c/Users/<u>/AppData/Local/<chromium-browser>/User Data' are an unusual cross-volume access pattern worth flagging in EDR.
MITRE ATT&CK techniques used in TL-2026-0557
Collection
T1005 Data from Local System; T1119 Automated Collection; T1560 Archive Collected Data
Defense Evasion
T1027 Obfuscated Files or Information; T1140 Deobfuscate/Decode Files or Information
Discovery
T1033 System Owner/User Discovery; T1082 System Information Discovery; T1083 File and Directory Discovery; T1217 Browser Information Discovery; T1518 Software Discovery
Exfiltration
T1041 Exfiltration Over C2 Channel; T1048 Exfiltration Over Alternative Protocol
Execution
T1059 Command and Scripting Interpreter; T1204 User Execution
Command and Control
T1071 Application Layer Protocol; T1105 Ingress Tool Transfer; T1571 Non-Standard Port; T1573 Encrypted Channel
Initial Access
Credential Access
T1539 Steal Web Session Cookie; T1552 Unsecured Credentials; T1555 Credentials from Password Stores
Resource Development
Affected products and versions in Cross-Platform Node.js NPM Stealer
- Microsoft — Windows (via WSL)
Vulnerable versions: 10; 11 - Apple — macOS
Vulnerable versions: all current - Linux — Linux distributions
Vulnerable versions: all - Google — Chrome
Vulnerable versions: all - Brave Software — Brave Browser
Vulnerable versions: all - Microsoft — Edge
Vulnerable versions: all Chromium-based - Opera — Opera / Opera GX
Vulnerable versions: all - Vivaldi Technologies — Vivaldi
Vulnerable versions: all - Yandex — Yandex Browser
Vulnerable versions: all - AVG — AVG Browser
Vulnerable versions: all
Remediation for Cross-Platform Node.js NPM Stealer
Immediate actions
- Block outbound traffic to 216.126.225.243 on all ports at network perimeter and host firewalls
- Block TCP/8085, TCP/8086, TCP/8087 to 216.126.225.243 specifically in egress ACLs
- Hunt for the SHA256 049300aa5dd774d6c984779a0570f59610399c71864b5d5c2605906db46ddeb9 on all endpoints
- Hunt EDR telemetry for Node.js / npx processes making outbound POSTs to /upload or /api/notify on non-standard high ports (8085-8087)
- Search filesystems for any process or file containing the literal string 'SuperStr0ngSecret@)@^'
- Identify developer workstations that have recently installed unfamiliar npm packages and isolate for analysis
Workarounds
- Block 216.126.225.243 at the perimeter regardless of port
- Disable execution of Node.js scripts from user-writable directories via AppLocker / WDAC on Windows
- On macOS, use Endpoint Security framework to log and alert on node binary file operations against ~/Library/Application Support/Google/Chrome and equivalent browser paths
Longer-term hardening
- Deploy egress filtering that blocks all outbound traffic to non-standard ports (8000-9000 range) from developer endpoints unless explicitly allow-listed
- Treat developer workstations as Tier-1 sensitive assets: deploy EDR with Node.js / npx / npm process telemetry, file access auditing on browser User Data directories, and outbound network monitoring
- Implement npm install gating: review npm package install logs for typosquatted or unfamiliar packages; deploy Socket.dev, Snyk, or Phylum for npm supply-chain scanning
- Disable WSL on Windows endpoints that do not require it; on those that do, audit cross-volume file access to /mnt/c/Users/*/AppData/Local
- Mandate browser-managed credential storage (or password managers with hardware-backed master keys) instead of native Chromium credential stores on developer endpoints
- Migrate crypto wallet usage to hardware wallets (Ledger, Trezor) so that wallet extension data is non-recoverable
- Implement detection content for OtterCookie / Contagious Interview YARA and Sigma rules from Socket.dev research
Weaknesses (CWE) in Cross-Platform Node.js NPM Stealer
CWE-798, CWE-522, CWE-200, CWE-552
Timeline of Cross-Platform Node.js NPM Stealer
- Socket.dev publishes research mapping the North Korean 'Contagious Interview' npm campaign and identifies 216.126.225.243 as DPRK OtterCookie C2 infrastructure (197 malicious npm packages catalogued).
- Threadlinqs Intelligence ingests TL-2026-0557 and begins detection engineering and simulation development.
- Mertens publishes the SANS ISC diary entry ('Cross-Platform NPM Stealer', diary 33006) with full IOC list, payload code excerpts, and infrastructure attribution.
- C2 IP 216.126.225.243 (ports 8085/8086/8087) confirmed to overlap with Socket.dev's previously documented DPRK OtterCookie infrastructure.
- Static analysis confirms three plain-text payloads after wrapper deobfuscation: Chromium credential stealer (13 browsers), recursive sensitive-file exfiltration scanner, and WebSocket reverse-shell module.
- SANS ISC handler Xavier Mertens identifies an obfuscated Node.js stealer sample on VirusTotal labelled 'extracted-decoded.js' (SHA256 049300aa…ddeb9).
- As of 2026-05-29, this DPRK OtterCookie/Contagious Interview Node.js npm stealer (SANS ISC, 2026-05-22; C2 216.126.225.243) remains an active threat — the broader campaign keeps flooding npm with ~197+ malicious packages and re-uploads weekly after takedowns. No public report shows the C2 sinkholed/seized, and a neighboring DPRK IP (216.126.225.129) was still live in May 2026.
Sources cited for Cross-Platform Node.js NPM Stealer
- Cross-Platform NPM Stealer — SANS Internet Storm Center
- VirusTotal — 049300aa5dd774d6c984779a0570f59610399c71864b5d5c2605906db46ddeb9
- Inside the GitHub Infrastructure Powering North Korea's Contagious Interview Campaign (Socket.dev)
- obfuscator.io — JavaScript Obfuscator
- Axios HTTP client (used by malware)
- ISC.SANS IP info — 216.126.225.243
Threats related to Cross-Platform Node.js NPM Stealer
- SHub Reaper - macOS Stealer Variant Bypasses Tahoe 26.4 Terminal Mitigation via applescript:// URL Scheme, Spoofs Apple/Google/Microsoft (SentinelOne)
- macOS Info-Stealer Chains Fake Password Prompt, Telegram Session Theft, and Crypto Wallet App Replacement
- Void Dokkaebi (Famous Chollima) Cython-Compiled InvisibleFerret — .pyd/.so Binary Evasion of Script-Based Detections (DPRK Contagious Interview)
- ACR Stealer Delivered via Fake Claude Download Page (fairpoint29[.]com) — Google Ads SEO Poisoning Targeting Windows
- Omnistealer: DPRK-Linked Blockchain-Based Infostealer Abusing TRON/Aptos/BSC as Resilient C2 to Loot Password Managers, Browser Credentials, Cloud Storage, and 60+ Crypto Wallets
- Fake Roblox Xeno Script Launcher Pushes Multi-Stage Java-Based Infostealer and RAT Malware (Powercat Campaign)
Detection coverage for TL-2026-0557
As of 2026-05-22, Threadlinqs Intelligence publishes 9 detection rule(s) for TL-2026-0557 across Splunk SPL, Microsoft KQL and Sigma, covering 24 indicator(s) of compromise. The whole corpus is readable without an account; a free account unlocks full detection query text in Splunk SPL, Microsoft KQL and Sigma; paid tiers add raw indicator values, correlation and the MCP server. Threadlinqs MCP server · View plans.