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"
]
}
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
}
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)
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'
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;
)
Indicator 2: Invisible Unicode in Extensions
find ~/.vscode/extensions -name "*.js" -exec \
grep -Pl '[\x{FE00}-\x{FE0F}\x{E0100}-\x{E01EF}]' {} \;
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
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
}
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
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
GlassWorm targets developers, not protocols. Your VS Code extensions are an attack surface. Treat them like dependencies — audit, pin, and monitor.
Solana's speed and cost make it ideal malware infrastructure. 400ms finality + $0.0001 per C2 update = unkillable command channel.
Transitive extension dependencies bypass review. A clean extension today can become a GlassWorm vector tomorrow via a dependency update.
Invisible Unicode is the new obfuscation. Standard code review and static analysis don't catch it. Add explicit Unicode auditing to CI.
Credential isolation is non-negotiable. If your dev machine has NPM tokens, GitHub creds, AND crypto wallets, one infected extension compromises everything.
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)