Malware profile

GlassWorm Malware: From VS Code Extensions to the OVHcloud CLI Swap

GlassWorm is a worm that targets developer tools.

In short

GlassWorm is a worm that targets developer tools. MITRE says it compromises repository credentials and adds malicious payloads to those accounts. It was first reported in October 2025 in VS Code extensions. In October 2026 StepSecurity tied its loader to a swapped release of the OVHcloud command line tool.

Profile MapMalware
  1. Names1names in public reportsGlassWorm
  2. Techniques15ATT&CK techniques listedInitial Access · Stealth · Execution
  3. Infection Steps5in the delivery chainInfect a developer laptop · Test the loader

In one minute

What it is
A worm and credential stealer that spreads through developer tools: VS Code and Open VSX extensions, GitHub repositories and, in October 2026, a swapped release of the OVHcloud CLI.
What it does
Steals tokens, browser and wallet data and developer credentials, then uses stolen publishing access to reach more projects. It reads its next server address from a Solana transaction memo.
Who uses it
No group is named. MITRE lists none for GlassWorm, and the vendor reports we read name no operator.
How it gets in
A developer installs a poisoned extension or runs a tampered tool. In the OVHcloud case, an extension on a personal laptop in October 2025 led to stolen release keys.
What to do first
Treat any host that ran a swapped OVHcloud CLI build as compromised, rotate every credential it could read from a clean machine, and pin SHA-256 hashes of downloaded tools.

What it does

MITRE lists several variants: Rust binaries, encrypted JavaScript and one that hides code in invisible Unicode characters. The loader checks the system language and time zone and stops on Russian systems. It then reads its next server address from a Solana blockchain transaction memo. If that fails, it falls back to Google Calendar entries. It takes browser data, wallet data and developer tokens. This is much like the Shai-Hulud worm and Mini Shai-Hulud which also spread through package registries.

The newest route is a swapped release. On 19 October 2026 an attacker used a compromised OVHcloud developer account on GitHub to replace release files of the OVHcloud command line tool, an example of compromising a software supply chain. StepSecurity found a GlassWorm loader in repositories tied to that account. The OVHcloud advisory describes the stealer inside the files. In its root cause section it says a Solana wallet “is known as belonging to the Glassworm threat actor”.

Names

Public sources use several names for this malware.

Names
NameWhere it appears
GlassWormMITRE ATT&CK software S9010 and the vendor reports[1, 2, 4, 5, 6, 7]

What it can do

What MITRE ATT&CK lists this malware as doing, by tactic. Each id opens our technique page where one exists, otherwise MITRE.

Initial Access

  • Supply Chain Compromise: Compromise Software Dependencies and Development Tools T1195.001

    It spreads through Visual Studio extensions and through JavaScript projects hosted on GitHub.[1]

Stealth

  • Obfuscated Files or Information: Invisible Unicode T1027.018

    It hides code in invisible Private Use Area characters, so the code does not show in editors.[1, 5]

  • Obfuscated Files or Information: Encrypted/Encoded File T1027.013

    It wraps its JavaScript in AES-256-CBC encryption and encodes server details in Base64.[1]

  • Masquerading T1036

    It poses as legitimate VS Code extensions and as GitHub projects.[1]

  • Execution Guardrails T1480

    It avoids Russian systems by checking language and time zone.[1, 2, 6]

Execution

  • Command and Scripting Interpreter: JavaScript T1059.007

    It runs hidden code through the eval call and also uses encrypted JavaScript payloads.[1, 5]

Command and Control

  • Web Service: Dead Drop Resolver T1102.001

    It reads extra server details from the memo field of Solana transactions.[1, 2, 6]

  • Fallback Channels T1008

    It uses Google Calendar as a backup channel for server details.[1, 4, 7]

  • Ingress Tool Transfer T1105

    It downloads further payloads from its servers.[1]

Collection

  • Data from Information Repositories: Code Repositories T1213.003

    It gathers npm and GitHub authentication material.[1, 4, 6]

  • Data from Local System T1005

    It collects desktop wallet data and documents from the Desktop, Documents and Downloads folders.[1]

  • Data Staged: Local Data Staging T1074.001

    It stages collected data in a temporary working directory before upload.[1, 6]

Credential Access

  • Credentials from Password Stores: Credentials from Web Browsers T1555.003

    It collects credentials stored in Firefox and Chromium based browsers.[1]

Persistence

  • Create or Modify System Process: Launch Agent T1543.001

    On macOS it writes a LaunchAgent plist to keep running.[1, 6]

Impact

  • Financial Theft T1657

    It can steal credentials for cryptocurrency wallets.[1, 4]

How it spreads

Veracode, reporting the October 2025 discovery by Koi Security, says GlassWorm harvests npm, GitHub and OpenVSX credentials and uses them to compromise more packages and extensions. Aikido says that on 31 October 2025 it saw the attackers move to GitHub repositories, with project-specific commits that may have been AI-generated. Socket says four Open VSX extensions were poisoned on 30 January 2026, which Open VSX said was consistent with a leaked token or other unauthorized access.
In the OVHcloud case, StepSecurity cites OVHcloud's postmortem: a developer installed a malicious VS Code extension on a personal laptop in October 2025, and later release uploads used stolen keys.

How an infection runs

The order of steps in a typical infection, as the sources describe it.

  1. Infect a developer laptop

    On 20 October 2025 a developer installed a malicious VS Code extension on a personal MacBook, which installed a persistent NodeJS service.[2]

  2. Test the loader

    On 5 and 6 March 2026 four personal repositories of the attacker's GitHub account were force-pushed with hidden loader files.[2]

  3. Stay quiet in a real account

    From May to September 2026 the same account landed ordinary pull requests in an OVHcloud documentation repository.[2]

  4. Swap the release files

    On 19 October 2026 the attacker uploaded locally built binaries over five existing releases (v0.11.0 to v0.15.0) and, for v0.13.0 to v0.15.0, replaced checksums.txt last.[2, 3]

  5. Steal and send

    When run, the binary collected credentials and staged them in a temp folder, then sent an archive out as Solana-style JSON. In StepSecurity's replay this took four seconds.[2, 3]

Timeline

  1. October 2025

    First reports

    MITRE says GlassWorm was first reported in October 2025. Veracode, on 20 October 2025, credits Koi Security and cites at least 35,800 confirmed compromised installations.[1, 4]

  2. 20 October 2025

    Backdoor on a developer laptop

    StepSecurity says an OVHcloud developer installed a malicious VS Code extension on a personal MacBook.[2]

  3. 31 October 2025

    Move to GitHub repositories

    Aikido says it found on 31 October that the attackers had shifted focus to GitHub repositories.[5]

  4. 22 November 2025

    Rust loaders appear

    Palo Alto Networks says activity resumed on 22 November after a pause. Earlier reports had counted over 45,000 infected machines, while Veracode cites 35,800 installations, so sources differ.[4, 7]

  5. 30 January 2026

    Four Open VSX extensions poisoned

    Socket says malicious versions of four oorzc extensions with over 22,000 downloads embedded the loader.[6]

  6. 5 and 6 March 2026

    Loaders pushed to personal repos

    StepSecurity says four repositories of the later OVHcloud attacker account were force-pushed with hidden loaders.[2]

  7. 26 May 2026

    Takedown

    StepSecurity says the Solana wallet is empty, which fits a CrowdStrike-coordinated takedown of all four GlassWorm C2 channels on 26 May 2026.[2]

  8. 19 October 2026

    OVHcloud CLI releases swapped

    Between 12:47 and 14:21 UTC, binaries of v0.11.0 to v0.15.0 were replaced. OVHcloud puts the downloads at about 250.[2, 3]

  9. 19 October 2026

    Clean release

    OVHcloud published v0.16.0, clean, immutable and attested, at 17:16 UTC.[2]

  10. 20 October 2026

    OVHcloud advisory

    OVHcloud published GHSA-862f-55f5-vmvw with the affected versions and the envchecker stealer.[3]

  11. 21 October 2026

    Loader repositories rolled back

    StepSecurity says the four loader repositories were force-pushed again, which removed the loaders from every branch.[2]

Detection and defense

  1. Check for the swapped OVHcloud build

    Do not run the file. OVHcloud says to compare its MD5 hash with the advisory list and to look for envchecker folders in the temp directory. StepSecurity says the malicious build prints undefined as its version; running it also runs the stealer, so compare the MD5 without running the file.[2, 3]

    Counters: T1195.001 T1036

  2. Treat exposed hosts as compromised

    If a machine ran a swapped binary, rotate every secret it could read from another machine, then reinstall v0.16.0. Updating alone revokes nothing. Socket's order for stolen developer keys: GitHub tokens, npm tokens, AWS keys, SSH keys.[2, 3, 6]

    Counters: T1555.003 T1213.003 T1005

  3. Audit CI runs of 19 October

    StepSecurity advises auditing any job that fetched v0.11.0 to v0.15.0 release files between 12:47 and 14:21 UTC and treating runner credentials as exposed.[2]

    Counters: T1195.001

  4. Pin hashes from outside the repository

    StepSecurity says the swapped checksum file matched the swapped binaries, so only an externally pinned hash caught the swap. OVHcloud names missing release immutability as the root cause.[2, 3]

    Counters: T1195.001

  5. Look for hidden characters

    Aikido says neither GitHub nor VS Code warned about the hidden characters, so use tooling that flags them.[5]

    Counters: T1027.018 T1059.007

  6. Check macOS persistence and temp files

    Socket advises checking the user LaunchAgents folder for unfamiliar plists such as com.user.nodestart.plist, and looking for /tmp/ijewf.[6]

    Counters: T1543.001 T1074.001

  7. Watch Solana lookups from developer hosts

    StepSecurity says blocking Solana RPC egress makes the loader crash with a visible error in Node logs, which is easier to notice than a silent poller.[2]

    Counters: T1102.001

  8. Use the published indicators

    The OVHcloud advisory lists MD5 hashes of the swapped files. StepSecurity and Socket list the Solana wallet, server addresses and loader hashes.[2, 3, 6]

    Counters: T1195.001 T1102.001

Questions

What is GlassWorm?

MITRE describes a worm that spreads through supply chain attacks by taking over repository credentials and planting malicious payloads in those accounts. It was first reported in October 2025 and targets macOS and Windows.

How did GlassWorm reach the OVHcloud CLI?

StepSecurity, citing OVHcloud's postmortem, says a developer installed a malicious VS Code extension in October 2025. Months later, release uploads used stolen keys to replace binaries on 19 October 2026.

How can I tell if I ran the swapped OVHcloud CLI?

Do not run the file to find out. OVHcloud says to compare its MD5 hash with the advisory list and to look for envchecker folders in the temp directory. Only installs between 12:47 and 14:21 UTC on 19 October 2026 are affected. StepSecurity says the malicious build prints undefined as its version, with the attacker's commit 5ead8ef, but running it also runs the stealer.

Why is GlassWorm hard to take down?

MITRE says it uses the Solana blockchain for command and control, and Veracode adds that Google Calendar serves as a backup. StepSecurity says the wallet is empty now, consistent with a takedown on 26 May 2026, but the operator could publish a new memo at any time.

Does GlassWorm still hide code in invisible characters?

Palo Alto Networks says the November 2025 wave replaced invisible Unicode with Rust binaries. StepSecurity says the loader recovered in 2026 again hides its code in invisible variation-selector characters.

In our research

  1. Trojanized Claude Code Extension: A Response Playbook for Malicious Extensions October 2026

Sources

  1. GlassWorm, Software S9010 MITRE ATT&CKSupports: Description, platforms, variants, Solana command channel and first report in October 2025.
  2. OVHcloud CLI Compromised via GitHub Release Swap: Detonating the Real GlassWorm Loader and What We Found StepSecuritySupports: The release swap, the GlassWorm loader stages, the timeline, the tell and the recovery steps.
  3. ovhcloud-cli security incident, October 19th, 2026 (GHSA-862f-55f5-vmvw) OVHcloud, GitHub AdvisorySupports: Affected versions and window, root cause, download count and the envchecker stealer.
  4. GlassWorm: The First Self-Propagating VS Code Extension Worm Veracode Threat ResearchSupports: The October 2025 report credited to Koi Security: installs, stolen tokens, Solana and Google Calendar.
  5. GitHub User Compromised with Invisible Malware Aikido SecuritySupports: The shift to GitHub repositories on 31 October 2025 and the hidden Unicode decoder.
  6. GlassWorm Loader Hits Open VSX via Developer Account Compromise SocketSupports: The 30 January 2026 extension compromise, loader stages, persistence and rotation order.
  7. Supply Chain Under Siege: GlassWorm's Native Rust Loaders Target VS Code Palo Alto NetworksSupports: The November 2025 return and the move from invisible Unicode to Rust loaders.