GlassWorm-Linked VS Code Color Themes Hid Malware Loaders

VS Code color themes linked to GlassWorm hid malware loaders, while two related themes with 8,000+ installs still carried unneeded executable code.

Trust the Code, Not the Theme
  • October 6, 2026

A Visual Studio Code color theme exists to change how the editor looks and nothing else. Several themes on the Visual Studio Marketplace and Open VSX did more than that. Two of them carried malware loaders. One of those loaders belongs to GlassWorm, a campaign that has spent months stealing developer credentials.

The cluster spans four Marketplace extensions and six Open VSX identities. Two themes from it were still live on the Marketplace in early October and had passed 8,000 installs between them. Microsoft pulled the reported extensions shortly after the report came in. The findings went public on October 2, 2026.

What is GlassWorm? GlassWorm is a supply chain campaign that hides malicious code in VS Code extensions. Its loaders avoid Russian-language systems, fetch their next stage through Solana blockchain transactions, and go after developer credentials, session data, crypto wallets and tokens on the machines where those extensions run.

Two Themes That Ran Code

The first confirmed malicious theme was Aurora Nocturne Night Theme. Its publisher name imitated Microsoft. It also switched on the moment VS Code started. Its public GitHub code looked harmless. The package people actually installed held about 59 KB of obfuscated JavaScript. Part of the payload hid in zero-width Unicode characters.

Once decoded, that script did one thing. It downloaded a file from an attacker server and saved it as temp_batch.cmd in the Windows temp folder. Then it ran the file through cmd.exe with the window hidden.

The second was Cosmic Nebula Themes. Its Marketplace build decrypted an embedded script with AES-256-CBC and ran it straight away. That stage quit on machines set to Russian language or a Russian time zone. Everywhere else it read a note attached to a Solana blockchain transaction and took the next download address from it. The code it fetched then ran inside the editor, with access to Node.js functions such as require and process.

That Solana address, encryption key and Russian check also appear in earlier GlassWorm activity. Analysis of this build didn’t recover its final payload.

Themes That Weren’t Weaponized Yet

Two themes stayed live on the Marketplace. Coca-Cola Christmas and Aurora Borealis Studio Theme carried no active payload in the versions examined. That doesn’t make them clean. Both ship executable JavaScript that a color theme has no reason to contain, so either one could turn malicious with a single update.

Their reach is the worrying part. Together they had more than 8,000 Marketplace installs. Open VSX is the registry that Cursor and other VS Code-based editors use. There, Coca-Cola Christmas alone had about 39,000 downloads, and another cluster theme, Charcoal Mint, had around 10,000.

Earlier GlassWorm waves used exactly this pattern. In April 2026, 73 cloned extensions turned up on Open VSX, and only six were malicious. The rest sat quietly as sleepers, collecting installs before a later update could arm them.

A Color Theme That Can Read Your SSH Keys

A NORMAL THEME VS A THEME THAT RUNS CODE
Declarative theme
Theme with a JavaScript entry point
What it contains
Color and token definitions in JSON
Color definitions plus executable JavaScript
When it acts
Only when the user selects it
Can activate every time the editor starts
Network access
None needed
Whatever Node.js allows
Can start processes
No
Yes, with the developer’s own rights
Can change after install
Only colors
Any behavior, through a single update
WHERE AN EXTENSION RUNS
01

Marketplace or registry: Visual Studio Marketplace or Open VSX delivers the package to the editor.

02

Editor: VS Code, Cursor and other VS Code-based editors load it at startup or on a trigger.

03

Extension host: a Node.js process inside the editor that runs the extension’s code.

04

Developer account rights: apply to everything that code does, with no per-extension permission prompts.

05

Reachable assets: on a typical developer machine, source code, Git and package registry tokens, cloud credentials, SSH keys and CI/CD secrets.

HOW GLASSWORM WORKS
Imitation

Publishes extensions that clone or mimic trusted names and icons, then waits for installs.

Sleepers

Keeps many packages unweaponized, ready to be armed later through an update.

Concealment

Hides code with heavy obfuscation and, in some builds, invisible Unicode characters.

Exclusions

Avoids systems set to Russian language or a Russian time zone.

Infrastructure

Stores next-stage addresses in Solana blockchain transactions, so servers can change without a new extension release.

Targets

Developer credentials, session data, crypto wallets and authentication tokens.

© 2026 XCITIUM THREAT LABS

How the Cluster Was Tied Together

Git history links the projects directly. On December 6, 2025, one account committed assets for Aurora Nocturne. About an hour later a second account added the extension code, then moved straight on to the Coca-Cola Christmas repository. All five commits landed within roughly three hours.

The first of those accounts also publishes Aurora Borealis Studio Theme. With theme names and colors normalized, that theme’s definitions are nearly identical to Aurora Nocturne’s. Both files carry the same Russian-language section comments, such as “Terminal, 16 ANSI colors”.

The operation also manufactured trust. Coca-Cola Christmas borrows one of the best-known brands in the world, while Aurora Borealis Studio Theme copies the name of an older, legitimate theme. On December 14, 2025, a DEV Community account created that same day posted a “guide” to Cursor themes. The post recommended four of the cluster’s Open VSX extensions.

Why a Theme Can Do This

VS Code lets an extension declare a JavaScript entry point and run whenever the editor starts, even if all it claims to do is change colors. Nothing in VS Code’s permission model stops a theme from opening network connections or launching processes. Whatever runs does so with the developer’s own access.

That access is the prize. A developer machine typically holds source code, cloud credentials, SSH keys, package registry tokens and CI/CD secrets. Earlier GlassWorm waves went further and installed a remote access trojan and a rogue browser extension.

We’ve seen the same logic in the npm ecosystem, where a counterfeit package hid its loader in runtime code to slip past install-time checks. In both cases the dangerous code only runs after the developer has already trusted the package.

A Takedown That Didn’t Clean Up

A coordinated operation disrupted GlassWorm’s command servers on May 26, 2026, but it didn’t remove extensions that were already sitting in the registries. The Solana dead drop also means the operators can point a loader at new infrastructure without publishing a new version.

Where Execution Control Fits

Aurora Nocturne’s chain ends with a new batch file written to disk and run by cmd.exe. On a Windows endpoint with Execution Governance, that downloaded file has no trust verdict. It still runs, but its changes land in a virtualized layer instead of on the real system.

Cosmic Nebula’s stage never leaves the editor’s own Node.js process. For that branch, the deciding question comes earlier. It’s which extensions a developer machine should load at all.

Conclusion: The Theme Was Cosmetic. The Code Was Not.

The GlassWorm-linked theme cluster shows how software supply-chain trust can fail inside one of the developer’s most trusted applications. A color theme should need little more than declarative configuration, yet malicious extensions were able to execute JavaScript with the developer’s own rights, reach the network, start processes, and retrieve additional code.

Aurora Nocturne made that risk visible by downloading a batch file and executing it through cmd.exe. Cosmic Nebula took a quieter route, decrypting its loader inside the extension and resolving its next-stage infrastructure through Solana before executing code from within the editor’s Node.js environment. In both cases, the dangerous capability arrived only after the extension had already been accepted as something harmless.

That trust decision has unusually high consequences on a developer workstation. Source repositories, SSH keys, Git credentials, package registry tokens, cloud secrets, CI/CD access, and active sessions may all sit within reach of code running under the same account.

Why This Threat Matters

  • A cosmetic extension can carry executable behavior. The label “theme” says nothing about what the package is technically capable of doing.
  • The installed artifact may differ from the reviewed repository. Aurora Nocturne’s public source appeared harmless while the distributed package contained obfuscated malicious JavaScript.
  • Extension code inherits developer access. There is no granular permission boundary separating a theme from the credentials and development assets available to the editor process.
  • Not every suspicious extension is already weaponized. Some cluster-linked themes contained executable scaffolding but no active payload in the analyzed versions, leaving open the possibility of later activation.
  • Infrastructure takedown does not remove installed trust. Existing extensions and blockchain-based dead drops can outlive the command servers originally associated with the campaign.

Where Defensive Control Must Operate

Xcitium Advanced EDR, powered by Xcitium’s patented Zero-Dwell platform, provides runtime visibility when an extension drops scripts, launches processes, or introduces unfamiliar executable content.

Execution Governance strengthens that boundary when newly downloaded or untrusted code attempts to alter the Windows endpoint. But when malicious logic remains inside the editor’s own extension host, control must begin earlier by restricting which extensions, publishers, registries, and updates developer systems are allowed to load.

Treat Extensions as Code, Not Decoration

Organizations should inventory developer extensions across VS Code, Cursor, and other compatible editors, review the exact packages being installed rather than trusting repository appearance alone, and question any theme that declares executable JavaScript or network-capable entry points. Developer tooling sits close to some of the organization’s most valuable credentials. Extension approval should therefore be treated as a software-execution decision, not a cosmetic preference.

Like what you see? Share with a friend.

Move Away From Detection With Patented Threat Prevention Built For Today's Challenges.

No one can stop zero-day malware from entering your network, but Xcitium can prevent if from causing any damage. Zero infection. Zero damage.

Book a Demo