GlassWorm surges on Open VSX, and the campaign has evolved into transitive infection through extension dependencies
Contents
Open VSX has seen a major expansion of the GlassWorm malware campaign. According to Socket’s research, 72 malicious extensions were newly discovered after January 31, 2026, and the operation has also spread to GitHub repositories through invisible Unicode characters and to npm packages through infection. What started as a malware drop has become a broader supply-chain campaign.
Transitive delivery through extensionDependencies
The most notable change in this wave is the technique itself. Earlier GlassWorm samples embedded a loader directly in each extension. In the second wave, the attackers began abusing the VS Code extension manifest fields extensionPack and extensionDependencies.
The two fields have very different purposes.
| Field | Intended use | Behavior at install time |
|---|---|---|
extensionPack | Ship related extensions as a bundle | Installs every extension in the pack at once |
extensionDependencies | Declare runtime dependencies required by an extension | Automatically installs extensions listed as dependencies |
Attackers use this by registering a malicious extension ID in the extensionDependencies of a front-end extension that looks harmless. The moment a developer installs the front-end extension, the editor walks the dependency chain and installs the malicious payload automatically. Only the first item is shown in the install prompt, so the user cannot easily see what the dependency chain will pull in.
Socket described the move as replacing direct loader insertion with a seemingly standalone extension that becomes a vehicle for transitive delivery.
Attack flow
graph TD
A[Attacker publishes a seemingly harmless front-end extension] --> B[Malicious extension ID is added to<br/>extensionDependencies]
B --> C[Developer installs the front-end extension]
C --> D[Editor automatically resolves the dependency chain]
D --> E[Malicious extension is installed]
E --> F[GlassWorm loader runs]
F --> G[Solana blockchain is queried for<br/>the C2 server address]
G --> H[Tokens, credentials, and secrets are stolen]
Masquerading targets
The 72 malicious extensions imitate legitimate developer tools. The fake categories include:
- Angular linters and formatters
- Code runners and debuggers
- AI-assisted coding tools that imitate Claude Code and Google Antigravity
- XML editors and PDF tools
- SQL database utilities
Examples of malicious package names include gvotcha.claude-code-extension (posing as Claude Code), mswincx.antigravity-cockpit (posing as Google Antigravity), and angular-studio.ng-angular-extension.
Lateral spread to GitHub and npm
The campaign does not stop at Open VSX. Aikido researchers found invisible Unicode characters embedded in 151 GitHub repositories between March 3 and March 9, 2026.
The technique here is zero-width Unicode steganography. These characters are hidden in most editors and diff views, so visual code review usually misses them.
| Character | Unicode | Official name | Intended use |
|---|---|---|---|
| ZWSP | U+200B | Zero-Width Space | Marks optional line break points |
| ZWNJ | U+200C | Zero-Width Non-Joiner | Prevents ligatures between adjacent characters |
| ZWJ | U+200D | Zero-Width Joiner | Joins characters in emoji sequences |
| WJ | U+2060 | Word Joiner | Prevents line breaks |
| LRM | U+200E | Left-to-Right Mark | Forces left-to-right direction |
| RLM | U+200F | Right-to-Left Mark | Forces right-to-left direction |
The encoded payload hidden in the source code is decoded at runtime into a loader that fetches token- and secret-stealing scripts from a remote location.
Attackers also use LLMs to generate camouflage commits. These commits look like real documentation fixes, version bumps, or formatting refactors, which makes review harder.
On the npm side, two packages, @aifabrix/miso-client and @iflow-mcp/watercrawl-watercrawl-mcp, were confirmed to be infected with the same technique.
PhantomRaven and Remote Dynamic Dependencies
Endor Labs reported a related campaign with 88 malicious npm packages uploaded through 50 disposable accounts between November 2025 and February 2026, and named it PhantomRaven.
PhantomRaven’s Remote Dynamic Dependencies (RDD) technique is especially nasty. Because the code can be changed without publishing a new version, scanners and inspection tools are effectively bypassed. Version pinning and lockfiles only help when versions change; they do not stop code inside an existing version from being swapped out dynamically.
Persistent GlassWorm traits
GlassWorm has carried the following traits from the beginning, and they remain effective in the second wave:
- A locale check that intentionally avoids infecting systems in Russia, which suggests where the operators are based
- Use of Solana blockchain transactions as a dead-drop resolver for the C2 server address, making the address hard to remove because the blockchain is immutable
- Wallet rotation to evade tracking and detection
- Stronger obfuscation
Response
Open VSX has removed the identified malicious extensions from the registry. But the attack abuses the structural transitive-install behavior of extensionPack and extensionDependencies, so removing specific packages after the fact is not a complete fix.
The lesson for development environments is simple: extension installation is not just “install one item.” It is often the installation of an entire dependency chain. Review dependencies before installing, and manage extension allowlists at the organization level.
How VS Code extension supply-chain attacks evolved
GlassWorm’s abuse of extensionDependencies did not appear out of nowhere. Attacks against the VS Code extension marketplace have steadily become more sophisticated since 2023.
2023: The typo-squatting era
The first wave was straightforward. Attackers published fake packages with names that differed by a single character from popular extensions and waited for installation mistakes. One well-known case involved “Darcula,” a fake of the popular “Dracula Official” theme, which infected more than 100 organizations and exfiltrated code to an external server.
At the time, researchers found 1,283 malicious extensions across the marketplace, with a cumulative 229 million installs. The technique was direct: embed malware in the extension itself. That also made detection relatively easy.
2024: Dependency abuse begins
In 2024, attackers moved toward more organized operations with multiple accounts, such as the TigerJack campaign. Around the same time, the npm ecosystem was hit by serious dependency confusion attacks, and one study found that 49% of companies were vulnerable.
One especially notable case abused the fact that AI code-generation tools hallucinate package names that do not exist. Attackers pre-registered the fake names that LLMs tend to invent and waited for developers to run the AI-generated code as-is.
2025: GlassWorm appears and becomes self-propagating
2025 became the turning point for VS Code extension attacks.
October 2025 - GlassWorm was observed for the first time. Seven malicious extensions were found on Open VSX, with a combined 35,800 downloads. It was called the first self-propagating worm for VS Code extensions. It could recursively infect the next extension by reusing stolen credentials.
November to December 2025 - GlassWorm spread through second and third waves. More than 48 extensions disguised as popular tools such as Flutter, React, Tailwind, and Vim were identified. At the same time, ReversingLabs found 19 cases of malware hidden inside extension dependency folders. A fake Prettier extension was also seen delivering OctoRAT, a fully featured RAT, through the Anivia loader in a multi-stage chain.
In that single year, VS Code-related malware detections jumped fourfold year over year, from 27 in 2024 to 105 in the first 10 months of 2025.
npm also saw a parallel large-scale campaign.
- September 2025 - 18 packages such as Chalk and Debug, which together had 2.6 billion weekly downloads, were compromised after maintainer accounts were taken over in phishing attacks
- September 2025 - the self-replicating worm Shai-Hulud appeared, and a second wave in November spread to more than 25,000 repositories
2026: Abusing the trust chain
In 2026, GlassWorm evolved into the transitive delivery mechanism reported here, abusing extensionDependencies.
graph LR
A["2023<br/>Typosquatting"] --> B["2024<br/>Dependency abuse<br/>Hallucinated package names"]
B --> C["2025<br/>Self-propagating worm<br/>Multi-stage payloads"]
C --> D["2026<br/>`extensionDependencies`<br/>Transitive delivery"]
style A fill:#4a9,stroke:#333,color:#fff
style B fill:#4a9,stroke:#333,color:#fff
style C fill:#e74,stroke:#333,color:#fff
style D fill:#c00,stroke:#333,color:#fff
The evolution follows a clear pattern.
| Period | Main technique | Detection difficulty | Infection scale |
|---|---|---|---|
| 2023 | Similar names trick users into installing the wrong package | Low | One-off |
| 2024 | Register a public package with the same name as an internal dependency | Medium | Project-level |
| 2025 | Automatic propagation after stealing credentials and poisoning the next package | High | Ecosystem-wide |
| 2026 | Repurpose the editor’s dependency resolver itself as the delivery path | Very high | Entire dependency chain |
At first, the problem was “can a human spot the fake?” Since 2025, the problem has become structural: a legitimate mechanism can itself become the attack path. GlassWorm’s extensionDependencies abuse is the end point of that trend, because the front extension code itself remains clean and static analysis has nothing obvious to flag.
Related articles on this blog
We also covered supply-chain attacks around npm and VS Code in the following articles.
- npm supply-chain worm SANDWORM_MODE targeted AI dev environments and stole crypto keys and CI secrets - typosquatting and MCP injection against Claude Code, Cursor, and VS Code
- Clinejection: the full story of how an AI agent was dropped onto 4,000 developer machines from a GitHub issue title - npm supply-chain compromise and GitHub Actions cache poisoning through Cline’s triage bot
- StegaBin distributed malicious npm packages by hiding C2 in zero-width Unicode characters on Pastebin - zero-width Unicode steganography from North Korea’s Famous Chollima, the same family of technique used in the GitHub repository attack above
- Chrome, VS Code, and Copilot security issues in one place - serious vulnerabilities found in legitimate extensions with more than 125 million installs, such as Live Server