Skip to navigation

Threat reportMalwareTL-2026-2259

JSCeal Cryptocurrency Stealer: Check Point Details Static Deobfuscation of Compiled V8 Bytecode Payloads

highACTIVE

Check Point Research's "Breaking the Seal" details a static deobfuscation methodology for JSCeal (also tracked as WEEVILPROXY / MeadowLocust), a cryptocurrency-focused stealer active since March 2024 that ships as compiled V8 bytecode (.jsc) inside a bundled Node.js runtime. The malware performs keylogging, browser/credential theft, active session hijacking, and HTTPS interception via a locally installed MITM proxy and root certificate, targeting Chromium browsers, Telegram, and cryptocurrency platforms (Binance, Bybit, Ledger, Phantom) on Windows and macOS. First disclosed .

Key facts for JSCeal Node.js crypto stealer

IdentifiersTL-2026-2259
Also known asWEEVILPROXY, MeadowLocust, Spyware.JSCeal
SeverityHIGH
First disclosed
Exploitation statusExploited in the wild
Affected productsGoogle Chrome; Microsoft Edge; Telegram Telegram Desktop; Binance Binance web/desktop platform; Ledger Ledger Live; Phantom Phantom Wallet browser extension
MalwareMeadowLocust, WEEVILPROXY
ToolsPuppeteer, ghost-cursor, javascript-obfuscator, jsc_deobfuscator, tRPC over HTTPS POST / WSS
MITRE ATT&CK techniquesT1010 Application Window Discovery, T1027 Obfuscated Files or Information, T1036.005 Match Legitimate Resource Name or Location, T1053.005 Scheduled Task, T1056.001 Keylogging, T1071.001 Web Protocols, T1082 System Information Discovery, T1113 Screen Capture, T1129 Shared Modules, T1140 Deobfuscate/Decode Files or Information, T1204.002 Malicious File, T1497 Virtualization/Sandbox Evasion and 7 more in the attack flow
MotivationFINANCIAL
Target sectorsfinance, cryptocurrency, consumer
Target regionsEurope, Global
Detection rules9 (1 shown free)
Sources9 cited sources

Detection coverage for JSCeal Node.js crypto stealer

As of 2026-08-31, Threadlinqs Intelligence publishes 9 detection rule(s) for TL-2026-2259 across Splunk SPL, Microsoft KQL and Sigma, covering 22 indicator(s) of compromise. The whole corpus is readable without an account. Every threat comes with one complete detection in Splunk SPL, Microsoft KQL and Sigma, free for everyone; a free account adds daily TL Creds to unlock the rest. Paid plans add a larger daily allowance, correlation and the MCP server. Threadlinqs MCP server · View plans.

Free detection: JSCeal Node.js V8 Bytecode Payload Execution (node.exe -r preflight.js app.jsc)

Detects the bundled Node.js runtime being invoked with the '-r preflight.js' loader flag against the Brotli-compressed compiled V8 bytecode payload 'app.jsc' — JSCeal's distinguishing execution pattern that historically evaded signature-based AV because the payload never ships as plaintext JavaScript or a native PE. Fires on the initial-access/execution stage after the MSI installer stages node.zip/build.zip.

  • Languages: Splunk SPL, Microsoft KQL, Sigma
  • ATT&CK: T1204.002, T1129, T1027
  • Data sources: sysmon, windows_security, microsoft_defender_for_endpoint
  • Severity: critical
  • Confidence: high

Splunk SPL

`comment("Detects node.exe executing preflight.js loader against compiled V8 bytecode payload app.jsc - JSCeal/WEEVILPROXY/MeadowLocust delivery pattern")`
index=endpoint sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1
| where match(lower(Image), "\\\\node\.exe$") OR match(lower(OriginalFileName), "node\.exe")
| where match(lower(CommandLine), "preflight\.js") AND match(lower(CommandLine), "app\.jsc")
| eval mitre_technique="T1204.002,T1129,T1027"
| stats count min(_time) as first_seen max(_time) as last_seen by ComputerName, User, Image, ParentImage, CommandLine
| eval first_seen=strftime(first_seen,"%Y-%m-%d %H:%M:%S"), last_seen=strftime(last_seen,"%Y-%m-%d %H:%M:%S")
| table ComputerName, User, Image, ParentImage, CommandLine, count, first_seen, last_seen, mitre_technique
| sort -last_seen

Microsoft KQL

DeviceProcessEvents
| where Timestamp > ago(24h)
| where FileName =~ "node.exe"
| where ProcessCommandLine has "preflight.js" and ProcessCommandLine has "app.jsc"
| extend MitreTechniques = "T1204.002,T1129,T1497"
| project Timestamp, DeviceName, AccountName, FileName, FolderPath, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine, MitreTechniques
| order by Timestamp desc

Sigma

title: Node.js Runtime Executing Compiled V8 Bytecode Payload (JSCeal Pattern)
id: 7c2f9a1e-4b3d-4e6a-9f0d-1a2b3c4d5e6f
status: experimental
description: Detects node.exe invoked with the preflight.js loader against a compiled V8 bytecode file named app.jsc, the JSCeal/WEEVILPROXY/MeadowLocust cryptocurrency-stealer execution pattern documented by Check Point Research.
references:
  - https://research.checkpoint.com/2026/breaking-the-seal-static-deobfuscation-of-jsceals-compiled-v8-bytecode/
  - https://research.checkpoint.com/2025/jsceal-targets-crypto-apps/
author: AII-Detector — ThreadLinqs Intelligence
date: 2026-08-31
tags:
  - attack.execution
  - attack.t1204.002
  - attack.t1129
  - attack.defense_evasion
  - attack.t1027
logsource:
  category: process_creation
  product: windows
detection:
  selection_img:
    Image|endswith: '\node.exe'
  selection_cli:
    CommandLine|contains|all:
      - 'preflight.js'
      - 'app.jsc'
  condition: selection_img and selection_cli
falsepositives:
  - Legitimate Node.js developers running a script literally named preflight.js against a file literally named app.jsc (rare naming collision in sanctioned dev/build environments)
level: high

Known false positives:

  • Sanctioned developer or CI/build environments that legitimately name a loader script 'preflight.js' and a bytecode artifact 'app.jsc' — scope by excluding known build-server hostnames/paths

Tuning notes: Exclude sanctioned CI/build hosts by ComputerName/DeviceName allowlist; widen matching to '-r preflight.js' as a distinct token pair rather than substring if false positives appear from unrelated Node tooling.

8 more detection rules (Splunk SPL, Microsoft KQL, Sigma) · unlock with TL Creds. Sign up free to unlock the detection rules or query them with the Threadlinqs MCP server (Purple)
  • JSCeal Compiled Bytecode Loader Execution via Node.js Runtime · unlock with TL Creds
  • JSCeal SYSTEM-Level Scheduled Task and Root Certificate Persistence · unlock with TL Creds
  • Non-Browser Process Access to Chromium Login Data/Cookies Databases (JSCeal Credential Theft) · unlock with TL Creds
  • Node.js Runtime Executing Compiled V8 Bytecode Payload (JSCeal Pattern) · unlock with TL Creds
  • JSCeal Persistence via SYSTEM Scheduled Task and Windows Defender Exclusion · unlock with TL Creds
  • JSCeal Local MITM Proxy Listener and /rpc C2 Network Beacon · unlock with TL Creds
  • JSCeal Persistence and Defense-Evasion Chain (SYSTEM Scheduled Task + Root Cert + Defender Exclusion) · unlock with TL Creds
  • JSCeal Local AitM Proxy and tRPC C2 Callback (incl. Malvertising Infrastructure) · unlock with TL Creds

Indicators of compromise for JSCeal Node.js crypto stealer

As of 2026-08-31, Threadlinqs Intelligence tracks 22 indicators of compromise for TL-2026-2259.

Sample indicators (3 of 22)

  • IP address: 1.1.1[.]1
  • File hash: e27ae65977287bdfb7b0e15fd3603f85
  • IP address: 8.8.8[.]8

Defanged, TLP:CLEAR. Full set of 22 indicators: unlock with TL Creds.

22 indicators of compromise · unlock with TL Creds. Compare plans

How JSCeal Node.js crypto stealer works

JSCeal is a cryptocurrency-focused information stealer and adversary-in-the-middle toolkit, cross-tracked by other vendors as WEEVILPROXY (WithSecure) and MeadowLocust, that has been active since March 2024 and continuously tracked by Check Point Research since early 2025. Its distinguishing trait is delivery as compiled V8 bytecode (.jsc files) rather than plaintext JavaScript, executed through a bundled Node.js runtime (`node.exe -r preflight.js app.jsc`) rather than a conventional native binary, which historically let hundreds of samples evade signature-based detection on VirusTotal.

The documented delivery chain begins with malvertising (large-scale Facebook ad campaigns using stolen/newly-created accounts) that redirects victims through geolocation- and referrer-filtered landing pages impersonating nearly 50 cryptocurrency exchanges and trading platforms, including TradingView, Binance, and OKX. Victims who pass the filtering are served an MSI installer historically signed with valid certificates belonging to Russian entities; the installer drops DLLs that establish a local HTTP listener, register a scheduled task under SYSTEM privileges for persistence, and add the malware's paths to Windows Defender's exclusion list before staging the final payload as two archives, `node.zip` (a packaged Node.js/V8 runtime) and `build.zip` (the Brotli-compressed `app.jsc` bytecode payload, its `preflight.js` decompression loader, hidden-console helpers `winpty-agent.exe`/`winpty.dll`, and native `.node` PE-format modules).

The `app.jsc` payload itself is protected with four stacked obfuscation layers applied by the `javascript-obfuscator` library: identifier renaming, RC4-encrypted/Base64-encoded string protection reconstructed by decoder functions (averaging roughly 130,000 encrypted string chunks per sample), control-flow flattening into opaque state machines, and proxy/operation indirection that routes function calls and operators through helper wrappers. Check Point's new research describes a fully static deobfuscation pipeline (released as the public `jsc_deobfuscator` tool, built on the View8 V8-bytecode decompiler) that reverses all four layers without dynamic execution: Brotli decompression, bytecode disassembly, value propagation, RC4 string recovery, control-flow unflattening, proxy resolution, operation inlining, and an optional LLM-assisted function-renaming pass (Claude Sonnet 4.6 produced materially more useful labels than GPT-5.4-mini in Check Point's comparison). The pipeline was validated against a fully deobfuscated sample (MD5 e27ae65977287bdfb7b0e15fd3603f85).

Once running, JSCeal's capability set spans browser data theft (extracting the SQLite Cookies and Login Data databases and decrypting secrets protected by both legacy DPAPI and the newer Chromium App-Bound Encryption v10/v11/v20 key formats), active session compromise (using Puppeteer with stealth plugins and ghost-cursor mouse-movement emulation to replay stolen cookies into an automated browser, walk the Google OAuth flow, and mint fresh tokens scoped for `ANDROID` clients), a surveillance module (keylogging, screenshot capture, and window enumeration), and an HTTPS interception capability that generates a self-signed RSA-2048 root certificate, installs it via `certutil -addstore root`, and runs a local MITM proxy on 127.0.0.1 that performs service-specific request/response tampering against Binance, Bybit, and Ledger traffic (including QR-code override). Command and control runs a tRPC router over HTTPS POST and WSS to an `/rpc` endpoint parameterized with `machineId`/`token` values, exchanging binary `application/octet-stream` payloads.

The campaign's scale is significant: Check Point's July 2025 report documented roughly 35,000 malicious Facebook ads served across the EU in H1 2025 alone (an estimated 3.5 million EU impressions, with potential global exposure exceeding 10 million users), and WithSecure independently corroborated overlapping infrastructure under the name WeevilProxy, indicating multi-vendor visibility into the same cluster. No CVE or vendor patch applies, since the threat is entirely social-engineering- and behavior-driven rather than vulnerability-driven; defense depends on detecting the Node.js-bytecode execution pattern, root-certificate installation, and anomalous local-proxy/scheduled-task artifacts described above.

MITRE ATT&CK techniques by tactic:

Discovery

T1010 Application Window Discovery; T1082 System Information Discovery

Defense Evasion

T1027 Obfuscated Files or Information; T1036.005 Match Legitimate Resource Name or Location; T1140 Deobfuscate/Decode Files or Information; T1497 Virtualization/Sandbox Evasion

Persistence

T1053.005 Scheduled Task

Collection

T1056.001 Keylogging; T1113 Screen Capture

Command and Control

T1071.001 Web Protocols

Execution

T1129 Shared Modules; T1204.002 Malicious File

Credential Access

T1539 Steal Web Session Cookie; T1555.003 Credentials from Web Browsers; T1557 Adversary-in-the-Middle

defense-impairment

T1553.004 Install Root Certificate; T1685 Disable or Modify Tools

Resource Development

T1583.001 Domains; T1583.008 Malvertising

Remediation for JSCeal Node.js crypto stealer

Immediate actions

  • Alert on node.exe processes invoked with a .jsc file argument or a '-r preflight.js' flag outside sanctioned developer/build environments
  • Alert on certutil.exe invoked with '-addstore root' outside authorized IT certificate-deployment workflows
  • Block or quarantine MSI packages downloaded from ad-referral chains, especially those signed by unfamiliar or foreign publishers
  • Monitor for new processes binding local HTTP/HTTPS listeners on 127.0.0.1 (e.g. port 30303) shortly after an MSI installation

Workarounds

  • Audit installed root/trusted CA certificates and remove any not deployed through sanctioned PKI processes
  • Audit Scheduled Tasks running under SYSTEM and remove any not deployed by IT, particularly ones referencing PowerShell or unfamiliar DLLs

Longer-term hardening

  • Deploy EDR behavioral detection for non-browser process access to Chromium 'Login Data' and 'Cookies' SQLite databases
  • Monitor for anomalous DPAPI master-key or App-Bound Encryption key access outside the owning browser process
  • Educate cryptocurrency-platform users to install trading/wallet apps only from official app stores or vendor-verified domains, never from ad-referred landing pages
  • Add network egress monitoring for anomalous outbound wss:// and '/rpc'-suffixed endpoints originating from consumer endpoints

Affected and fixed versions

  • Google — Chrome
    Vulnerable versions: all versions targeted for credential/cookie theft
  • Microsoft — Edge
    Vulnerable versions: all versions targeted for credential/cookie theft
  • Telegram — Telegram Desktop
    Vulnerable versions: session data targeted for theft
  • Binance — Binance web/desktop platform
    Vulnerable versions: targeted by service-specific local-proxy tampering
  • Ledger — Ledger Live
    Vulnerable versions: targeted by service-specific local-proxy tampering
  • Phantom — Phantom Wallet browser extension
    Vulnerable versions: targeted for credential/session theft

Timeline of JSCeal Node.js crypto stealer

  • locked-ioc-20 (later cross-tracked by other vendors as locked-ioc-10 / locked-ioc-6) is first observed distributing compiled V8 bytecode (.jsc) payloads via a bundled Node.js runtime against cryptocurrency-focused victims.
  • Check Point Research begins continuous tracking of the locked-ioc-20 cluster after identifying a recurring malvertising-to-Node.js delivery pattern.
  • Microsoft documents related malvertising activity delivering the same Node.js/V8-bytecode payload chain, per subsequent secondary reporting.
  • Check Point discloses that JSCeal-linked malvertising served roughly 35,000 malicious Facebook advertisements across the EU during January-June 2025, generating an estimated 3.5 million EU impressions and a potential global reach exceeding 10 million users.
  • Check Point Research publishes 'Sealed Chain of Deception,' the first detailed public technical report on locked-ioc-20, documenting the malvertising-to-MSI-to-Node.js delivery chain, the local adversary-in-the-middle proxy, and impersonation of nearly 50 cryptocurrency trading platforms.
  • WithSecure independently publishes analysis of overlapping activity under the name 'locked-ioc-10,' confirming multi-vendor visibility into the same malware cluster.
  • KPMG's Cyber Threat Intelligence Platform circulates a summarized locked-ioc-20 threat brief to enterprise customers, reflecting continued analyst interest in the campaign.
  • Check Point Research publishes 'Breaking the Seal,' detailing a static deobfuscation methodology for locked-ioc-20's compiled V8 bytecode via the public locked-ioc-5 toolkit, including a fully deobfuscated reference sample (MD5 locked-ioc-1), and presents the research at Black Hat USA 2026.

Sources cited for JSCeal Node.js crypto stealer

Previous and next in malware

Drafted by the Threadlinqs research pipeline from 9 sources; published ; last updated —.

Threadlinqs Intelligence — Real-Time Threat Detection Platform

[ 0 threats ] [ 0 det ] [ CRIT: 0 ] [ HIGH: 0 ]
// threat_feed
$ sort --newest
Showing all threats

Live intelligence console

Threat level

Latest Threats