DEV Community

ohmygod
ohmygod

Posted on

GlassWorm Dissected: How a Self-Propagating Worm Uses Solana as C2 Infrastructure to Compromise Developer Environments

TL;DR

GlassWorm is a self-propagating supply chain worm that abuses VS Code extensions to steal developer credentials, drain 49 types of cryptocurrency wallets, and deploy RATs — using Solana blockchain transactions as an unkillable command-and-control channel. On March 13, 2026, researchers identified 72 new malicious extensions using transitive dependency attacks to bypass marketplace review. This article dissects the kill chain, explains the Solana dead drop resolver technique, and provides concrete detection and defense strategies.


Why Developers Should Care

If you write code, you're the target. Not your users. Not your protocol. You.

GlassWorm doesn't exploit smart contracts. It exploits the humans who write them. One infected VS Code extension gives attackers:

  • NPM tokens, GitHub credentials, Git tokens — your entire supply chain identity
  • 49 cryptocurrency wallet types — direct fund theft
  • SOCKS proxy on your machine — you become criminal infrastructure
  • Hidden VNC (ZOMBI RAT) — full remote access to your development environment

The March 2026 escalation makes this especially dangerous: attackers now use transitive extension dependencies to infect developers who never directly installed the malicious package.


The Kill Chain: From Extension Install to Full Compromise

Phase 1: Initial Infection Vector

GlassWorm extensions masquerade as popular developer tools — linters, formatters, AI coding assistants. Recent examples include fake clones of:

  • Claude Code extensions (gvotcha.claude-code-extension)
  • Angular development tools (angular-studio.ng-angular-extension)
  • SQL utilities (turbobase.sql-turbo-tool)
  • PDF formatters (tamokill12.foundry-pdf-extension)

The March 2026 evolution introduced transitive delivery: a benign-looking extension declares a GlassWorm package in its extensionPack or extensionDependencies field after initial publication. VS Code automatically installs all listed dependencies without additional consent.

{
  "name": "useful-formatter",
  "version": "1.0.1",
  "extensionDependencies": [
    "crotoapp.vscode-xml-extension"
  ]
}
Enter fullscreen mode Exit fullscreen mode

Phase 2: Invisible Code Execution

GlassWorm's signature technique: invisible Unicode characters hide malicious code from human review and static analysis. Using Unicode variation selectors (U+FE00–U+FE0F) and Private Use Area characters, the loader is literally invisible in code editors.

Standard grep, eslint, and even GitHub's code review UI won't flag these characters. Only tools specifically designed to detect non-ASCII invisible characters catch them.

Phase 3: Solana Dead Drop Resolver — The Unkillable C2

This is the technically fascinating part. GlassWorm uses Solana blockchain transactions as a dead drop resolver — a technique borrowed from espionage tradecraft where messages are left at agreed locations rather than transmitted directly.

How It Works

The attacker writes the current C2 server URL into a Solana transaction memo. The malware reads recent transactions from the attacker's wallet, extracts memo instructions, and RC4-decrypts the payload to get the C2 URL.

async function resolveC2(): Promise<string> {
  const connection = new Connection("https://api.mainnet-beta.solana.com");
  const signatures = await connection.getSignaturesForAddress(
    new PublicKey(ATTACKER_WALLET), { limit: 5 }
  );
  for (const sig of signatures) {
    const tx = await connection.getParsedTransaction(sig.signature);
    for (const instruction of tx.transaction.message.instructions) {
      if (instruction.programId.equals(MEMO_PROGRAM_ID)) {
        const c2Url = rc4Decrypt(instruction.parsed, DERIVED_KEY);
        if (isValidUrl(c2Url)) return c2Url;
      }
    }
  }
  return resolveFromCalendar(); // Fallback: Google Calendar C2
}
Enter fullscreen mode Exit fullscreen mode

Why Solana Is the Perfect Dead Drop

Immutability: Once confirmed (~400ms), the memo is permanent. No takedown possible.

Public readability: Any RPC node can read transaction memos without authentication.

Plausible traffic: Solana RPC calls from developer machines are completely normal.

Low cost: ~$0.0001 per C2 rotation. Hourly updates for pennies.

Censorship resistance: Dozens of RPC providers exist. Block one, use another.

Wallet rotation: March 2026 samples rotate Solana wallets to evade static blocklists.

The Multi-Layer C2 Fallback Chain

Primary:   Solana transaction memos (unkillable)
Secondary: Google Calendar events (hard to block)
Tertiary:  Direct IP addresses (easy to block, always available)
Enter fullscreen mode Exit fullscreen mode

Triple-redundancy means blocking all three simultaneously is extremely difficult.


Detection: How to Know If You're Compromised

Indicator 1: Suspicious Solana RPC Traffic

If your development machine is making Solana RPC calls and you're not a Solana developer, that's a red flag.

sudo tcpdump -i any -A 'port 443' | grep -i 'solana'
Enter fullscreen mode Exit fullscreen mode

Suricata detection rule:

alert http $HOME_NET any -> $EXTERNAL_NET any (
  msg:"GLASSWORM Solana Dead Drop Resolver";
  content:"getSignaturesForAddress";
  content:"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr";
  classtype:trojan-activity;
  sid:2026031601; rev:1;
)
Enter fullscreen mode Exit fullscreen mode

Indicator 2: Invisible Unicode in Extensions

find ~/.vscode/extensions -name "*.js" -exec \
  grep -Pl '[\x{FE00}-\x{FE0F}\x{E0100}-\x{E01EF}]' {} \;
Enter fullscreen mode Exit fullscreen mode

Indicator 3: Extension Dependency Chains

for dir in ~/.vscode/extensions/*/; do
  if [ -f "$dir/package.json" ]; then
    deps=$(jq -r '.extensionDependencies // [] | .[]' "$dir/package.json" 2>/dev/null)
    packs=$(jq -r '.extensionPack // [] | .[]' "$dir/package.json" 2>/dev/null)
    if [ -n "$deps" ] || [ -n "$packs" ]; then
      echo "=== $(basename $dir) ==="
      [ -n "$deps" ] && echo "  deps: $deps"
      [ -n "$packs" ] && echo "  pack: $packs"
    fi
  fi
done
Enter fullscreen mode Exit fullscreen mode

Defense: Hardening Your Development Environment

1. Extension Allowlisting

Disable auto-updates. Review every extension update manually.

{
  "extensions.autoUpdate": false,
  "extensions.autoCheckUpdates": false,
  "extensions.ignoreRecommendations": true
}
Enter fullscreen mode Exit fullscreen mode

2. Network Segmentation

Your development machine should not have direct access to production credentials or cryptocurrency wallets.

3. Credential Isolation

Use short-lived tokens, hardware wallets for crypto, and credential helpers with short TTLs. Never store production NPM tokens, GitHub PATs, and crypto wallet seeds on the same machine.

4. Unicode Audit in CI/CD

name: Unicode Safety Check
on: [push, pull_request]
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Detect invisible Unicode
        run: |
          SUSPICIOUS=$(grep -rPl '[\x{200B}-\x{200F}\x{2028}-\x{202F}\x{2060}-\x{206F}\x{FE00}-\x{FE0F}\x{E0100}-\x{E01EF}]' \
            --include="*.js" --include="*.ts" --include="*.py" . || true)
          if [ -n "$SUSPICIOUS" ]; then
            echo "::error::Invisible Unicode detected: $SUSPICIOUS"
            exit 1
          fi
Enter fullscreen mode Exit fullscreen mode

5. Extension Integrity Monitoring

Hash your extensions and alert on changes via a cron job. Any unexpected modification to .js files in your extensions directory is a red flag.


The Bigger Picture: Blockchain as Malware Infrastructure

GlassWorm represents a paradigm shift in malware C2 design. Traditional C2 takedowns work because domains can be seized, IPs blocked, and hosting providers compelled to act. But blockchain transactions are immutable, decentralized, publicly readable, cheap, and fast.

This isn't the first time blockchains have been used for C2 — Bitcoin OP_RETURN has been abused since 2015. But GlassWorm's use of Solana is the most sophisticated implementation to date: transaction memos + wallet rotation + encrypted payloads + multi-chain fallbacks.

Expect this technique to proliferate. Every blockchain with memo/data fields is a potential dead drop resolver. Defenders need to start treating blockchain RPC traffic from non-blockchain applications as a potential IOC.


Key Takeaways

  1. GlassWorm targets developers, not protocols. Your VS Code extensions are an attack surface. Treat them like dependencies — audit, pin, and monitor.

  2. Solana's speed and cost make it ideal malware infrastructure. 400ms finality + $0.0001 per C2 update = unkillable command channel.

  3. Transitive extension dependencies bypass review. A clean extension today can become a GlassWorm vector tomorrow via a dependency update.

  4. Invisible Unicode is the new obfuscation. Standard code review and static analysis don't catch it. Add explicit Unicode auditing to CI.

  5. Credential isolation is non-negotiable. If your dev machine has NPM tokens, GitHub creds, AND crypto wallets, one infected extension compromises everything.

  6. Blockchain C2 will become standard. GlassWorm is the template. Build detection for blockchain RPC traffic from unexpected applications now.


DreamWork Security publishes weekly research on emerging attack vectors in Web3 and developer security. Follow for exploit analysis, tooling guides, and defensive architecture.

Top comments (0)