GlassWorm Self-Propagating Malware Compromises VS Code Extensions

Threat Group – Unknown (no confirmed attribution)
Threat Type – Self-propagating software supply chain malware targeting VS Code and OpenVSX ecosystems
Exploited Vulnerabilities – Abuse of trusted publisher credentials and the automated extension update pipeline; no CVE assigned for the platform itself
Malware Used – GlassWorm loader and final-stage ZOMBI module (RAT with SOCKS proxy, HVNC, P2P C2, credential theft, and self-replication)
Threat Score – 🔴 8.1 High
Last Threat Observation – 22 October 2025
Overview
The GlassWorm campaign represents a significant escalation in developer tool supply-chain threats. Rather than exploiting a zero-day vulnerability, the operators weaponise trust—they obtain or hijack legitimate publisher credentials, insert a self-replicating loader into existing extensions, and rely on default auto-updates to deliver the malware silently to developer workstations.
Stealth is achieved through invisible Unicode variation selectors (U+FE0E / U+FE0F) embedded within JavaScript and TypeScript files. These characters cause the malicious code to render as blank space in editors and code diff tools, evading manual inspection and many static scanners—yet remain fully executable.
Once executed, the loader fetches and decrypts the ZOMBI module, a heavily obfuscated remote-access payload that transforms infected developer workstations and CI/CD runners into autonomous nodes within the attacker’s infrastructure. The ZOMBI module establishes persistence (Windows Registry Run keys), deploys SOCKS proxy services, installs Hidden VNC (HVNC) for covert remote control, and abuses harvested NPM, GitHub, OpenVSX, and Git credentials to publish new malicious extensions, ensuring rapid, self-sustaining propagation.
Resilience is achieved through a triple-redundant, decentralised command-and-control (C2) structure using the Solana blockchain (primary), direct IP/HTTP fallback, and Google Calendar event titles (cloud-based fallback). Additionally, WebRTC and BitTorrent Distributed Hash Table (DHT) layers provide peer-to-peer redundancy, making the infrastructure effectively untakeable down by traditional means.
Given the malware’s stealth, propagation potential, and decentralised resilience, the threat score of 8.1 (High) is fully validated.
Key Details
Delivery Method
- The attackers compromise legitimate extension publisher accounts or insert malicious code during the release process.
- Modified extensions are published to OpenVSX and VS Code Marketplace with invisible Unicode-encoded loaders.
- Auto-update mechanisms silently deliver the malicious versions to users without any prompts.
- The malicious code retrieves and decrypts the ZOMBI payload, which establishes persistence and further propagation.
- Using stolen tokens, the malware publishes new infected extension updates, ensuring exponential spread.
Target Profile
- Software developers using VS Code and compatible IDEs.
- Extension publishers and CI/CD systems holding tokens for OpenVSX, Marketplace, NPM, and GitHub.
- Organisations with integrated development pipelines linked to repositories.
- Cryptocurrency-related extensions (secondary objective: financial theft).
Functions (ZOMBI Module)
- Credential theft: NPM, GitHub, OpenVSX, Git, and cryptocurrency wallet extensions.
- Remote control: Deploys Hidden VNC for invisible, interactive sessions.
- Network proxying: Installs a SOCKS proxy for attacker traffic routing.
- Propagation: Automatically publishes new malicious updates with stolen credentials.
- Decentralised C2: Communicates via blockchain memos, fallback HTTP, Google Calendar, WebRTC, and BitTorrent DHT.
Obfuscation and Evasion
- Invisible Unicode (U+FE0E / U+FE0F) conceals code from human and automated review.
- Dynamic decryption keys returned via HTTP headers decrypt payloads in memory.
- Decentralised infrastructure blends with legitimate traffic, making takedown impractical.
- Modular payload design allows flexible updates and rapid redeployment.
Attack Vectors
Stage | Description |
---|---|
1. Publisher compromise | Attacker steals or hijacks publisher credentials for a trusted extension. |
2. Malicious update | The attacker uploads a new version embedding invisible malicious loader code. |
3. Silent infection | VS Code auto-updates install the infected version on all endpoints automatically. |
4. Payload retrieval | Loader checks the Solana blockchain for base64-encoded payload URLs and downloads the ZOMBI module from fallback servers. |
5. Execution and persistence | ZOMBI modifies registry keys, installs SOCKS proxy and HVNC services, and begins exfiltration. |
6. Propagation | Stolen tokens are used to upload new malicious extensions, continuing the infection chain. |
Known Indicators of Compromise (IoCs)
(All indicators are defanged to prevent accidental activation. Replace hxxp
→http
/https
and [.]
→.
in a secure analysis environment.)
Network / C2 / Exfiltration
Type | Indicator (Defanged) | Notes |
---|---|---|
Payload/C2 IP | 217[.]69[.]3[.]218 | Primary payload and C2 host active mid–late October 2025 |
Exfiltration Endpoint | 140[.]82[.]52[.]31:80/wall | Stolen credential collection endpoint |
Blockchain C2 | Solana wallet 28PKnu7RzizxBzFPoLp69HLXp9bJL3JFtT2s5QzHsEA2 | Monitored for base64-encoded C2 payload instructions |
Fallback C2 (Cloud) | hxxps://calendar[.]app[.]google/M2ZCvM8ULL56PD1d6 | Google Calendar event titles used for hidden payload URLs |
Payload URL (Example) | hxxp://217[.]69[.]3[.]218/qQD%2FJoi3WCWSk8ggGHiTdg%3D%3D | Example stage payload retrieval path |
Payload URL (Example 2) | hxxp://217[.]69[.]3[.]218/get_zombi_payload/qQD%2FJoi3WCWSk8ggGHiTdg%3D%3D | Secondary payload retrieval link |
P2P overlays | WebRTC / BitTorrent DHT | Used for peer-to-peer control channels |
Host-Based Indicators and Persistence
Category | Indicator (Defanged where applicable) | Notes |
---|---|---|
Process lineage | Code.exe → extensionHost spawning network listeners or VNC services | Behavioural signature of infection |
Persistence | HKCU\Software\Microsoft\Windows\CurrentVersion\Run | User-scope autorun key |
Persistence | HKLM\Software\Microsoft\Windows\CurrentVersion\Run | System-scope autorun key (admin privileges) |
File content | Presence of Unicode U+FE0E / U+FE0F in .js or .ts | Hidden Unicode used to conceal loader code |
Confirmed Infected Extensions
Extension ID | Platform | Status |
---|---|---|
codejoy.codejoy-vscode-extension@1.8.3 / 1.8.4 | OpenVSX | Malicious (removed) |
l-igh-t.vscode-theme-seti-folder@1.2.3 | OpenVSX | Malicious (removed) |
kleinesfilmroellchen.serenity-dsl-syntaxhighlight@0.3.2 | OpenVSX | Malicious |
JScearcy.rust-doc-viewer@4.2.1 | OpenVSX | Malicious |
SIRILMP.dark-theme-sm@3.11.4 | OpenVSX | Malicious |
CodeInKlingon.git-worktree-menu@1.0.9 / 1.0.91 | OpenVSX | Malicious |
ginfuru.better-nunjucks@0.3.2 | OpenVSX | Malicious |
ellacrity.recoil@0.7.4 | OpenVSX | Malicious |
grrrck.positron-plus-1-e@0.0.71 | OpenVSX | Malicious |
jeronimoekerdt.color-picker-universal@2.8.91 | OpenVSX | Malicious |
srcery-colors.srcery-colors@0.3.9 | OpenVSX | Malicious |
cline-ai-main.cline-ai-agent@3.1.3 | VS Code Marketplace | Malicious (removed) |
Mitigation and Prevention
Mitigation Checklist
Control Area | Recommended Action | Validation |
---|---|---|
Publisher Account Security | Enforce hardware-based MFA (FIDO2/U2F) for all OpenVSX, Marketplace, GitHub, and NPM accounts. Revoke and regenerate tokens if compromise suspected. | MFA enforced; tokens rotated and scoped minimally. |
Extension Governance | Implement internal allow-lists and disable global auto-updates for non-approved extensions. Require internal security review before deployment. | Governance policy documented and applied. |
Endpoint Protection | Deploy EDR rules to detect VNC/Proxy creation, registry Run key modifications, and non-browser Solana RPC calls. | Alerts tested and validated. |
Network Controls | Block egress to known GlassWorm IPs and restrict outbound UDP 3478/5349 and 16384–32768 (STUN/TURN/WebRTC). | Firewall rules deployed and monitored. |
Credential Hygiene | Rotate NPM/GitHub/OpenVSX tokens regularly. Restrict scopes to least privilege. | Token audits completed; unused tokens revoked. |
Unicode Detection | Deploy “Hidden Character Detector” or equivalent tools to scan for invisible Unicode in JS/TS files and CI/CD pipelines. | Tool integrated into commit hooks and pre-build stages. |
Incident Playbooks | Develop specific GlassWorm response playbooks: isolate, revoke, rebuild, audit. | Playbook validated through tabletop testing. |
Detection Engineering
Host-Based Detection
- Alert on
extensionHost.exe
or child processes spawning VNC or proxy listeners. - Monitor registry writes to
HKCU/HKLM\Software\Microsoft\Windows\CurrentVersion\Run
by IDE processes. - Scan
%APPDATA%\Code\extensions\*
for invisible Unicode sequences (U+FE0E / U+FE0F). - Identify JavaScript files with large “blank” code regions that contain invisible characters.
Network-Based Detection
Target | Detection Method | Actionable Signals |
---|---|---|
Solana RPC | Monitor IDE-originated connections to Solana nodes. | Frequent RPC traffic post-extension update. |
WebRTC | Monitor non-browser STUN/TURN traffic on ports 3478/5349. | WebRTC connections from IDE processes. |
RTP (Media) | Inspect UDP traffic on ports 16384–32768. | High-volume, non-browser UDP sessions. |
BitTorrent DHT | Use DPI to detect peer-to-peer traffic patterns. | DHT-like activity from developer networks. |
Remediation and Containment Checklist
Priority | Area | Required Action | Validation |
---|---|---|---|
P1 | Containment | Disconnect infected developer workstations and CI/CD runners from the network immediately. | Confirm isolation in EDR/NAC logs. |
P1 | Credential Revocation | Revoke and regenerate all GitHub PATs, NPM tokens, OpenVSX keys, and related CI/CD credentials. | All compromised tokens replaced. |
P2 | System Rebuild | Fully wipe and reimage infected systems; removing extensions is insufficient. | Verified clean OS baseline deployed. |
P2 | Repository Audit | Review Git commit history for malicious pushes and scan code for invisible Unicode characters. | Code integrity verified. |
P3 | Network Hardening | Block 217[.]69[.]3[.]218 , restrict UDP 3478/5349 and 16384–32768 on developer VLANs. | Firewall rules enforced. |
P3 | Tooling Deployment | Mandate Unicode scanning tools in developer and CI pipelines. | Tools deployed and validated. |
P3 | MFA Enforcement | Require hardware MFA for all critical publishing and SCM actions. | MFA audit complete and enforced. |
Risk Assessment
Threat Score – 🔴 8.1 High
GlassWorm presents one of the most sophisticated supply-chain threats to date. It leverages legitimate update mechanisms, employs stealth through invisible code, and communicates via decentralised, immutable networks.
It compromises developer environments, CI/CD runners, and build pipelines, converting trusted assets into active threat nodes.
The combination of:
- Propagation via auto-updates
- Invisible code obfuscation
- Blockchain and P2P C2 infrastructure
- Credential abuse for self-replication
justifies its classification as a high-severity threat requiring immediate containment and long-term governance reforms.
Conclusion
GlassWorm redefines the concept of a supply-chain compromise by attacking the foundation of trust within the development ecosystem. It bypasses CVE-driven vulnerability management entirely, instead exploiting publisher legitimacy and automation pipelines to spread autonomously.
Traditional takedown strategies are ineffective due to its decentralised architecture (Solana, WebRTC, DHT). Therefore, defence must pivot to behavioural detection, credential governance, and extension verification workflows.
Organisations must recognise developer endpoints and build systems as critical infrastructure, applying Zero Trust segmentation, strict extension governance, and automated invisible-character scanning to protect against this new class of self-propagating supply-chain worm.
Sources
- Koi Security – GlassWorm: First Self-Propagating Worm Using Invisible Code Hits OpenVSX Marketplace – https://www.koi.ai/blog/glassworm-first-self-propagating-worm-using-invisible-code-hits-openvsx-marketplace
- BleepingComputer – Self-Spreading GlassWorm Malware Hits OpenVSX, VS Code Registries – https://www.bleepingcomputer.com/news/security/self-spreading-glassworm-malware-hits-openvsx-vs-code-registries/
- SecurityWeek – Supply Chain Attack Targets VS Code Extensions With ‘GlassWorm’ Malware – https://www.securityweek.com/supply-chain-attack-targets-vs-code-extensions-with-glassworm-malware/