GlassWorm Supply-Chain Attack Abuses 72 Open VSX Extensions to Target Developers

title: GlassWorm Open VSX Supply Chain Attack: Technical Analysis, Hard Lessons, and a Blisteringly Practical Defense Plan
meta_description: A blunt, technical teardown of the GlassWorm Open VSX attack—including citations, actionable remediation steps, and a cynical DevSecOps vet’s perspective on extension supply-chain risk.
canonical_url: https://yourdomain.com/blog/glassworm-open-vsx-supply-chain-attack
date: 2024-06-26
version: 1.0
author: Jordan L. Grant
author_title: Principal DevSecOps Engineer, 18+ yrs
author_links: LinkedIn, GitHub, Email
Audience: DevSecOps engineers, security leads, pipeline architects, and anyone running VS Code, Open VSX, or extension registries.
TL;DR—Immediate Actions for DevDefenders
- Mirror and tightly curate all registries. Don’t rely on direct internet pulls from Open VSX, npm, PyPI, or Maven.
- Automatically scan all direct and transitive dependencies in extensions and CI/CD. Use syft/grype (docs) and enforce policy gates—fail on any unvetted/unknown package.
- Continuously monitor for suspicious outbound dev tool traffic. Alert if any extension or build runner phones home.
- Pin extension versions. No floating dependencies—require explicit manifests. (VS Code docs)
- Scrutinize all extensionPacks and extensionDependencies. Block new extensions until reviewed—no trust by default.
- Check vendor advisories/CERTs for new IOCs weekly. Update alerts and blocklists accordingly.
GlassWorm Open VSX Attack: Technical Analysis and Why We’re Still Getting Owned
It’s 2024, and despite every “npm left-pad” or “PyPI phish” wake-up call, the software supply chain remains soft underbelly territory. Enter GlassWorm—the latest, depressingly predictable extension-based supply-chain compromise in the Open VSX Registry.1 Attackers didn’t break anything clever. They just abused what we left wide open.
How GlassWorm Abused Open VSX extensionDependencies and extensionPacks
The GlassWorm campaign (GitHub Security Labs writeup, Open VSX statement) weaponized VS Code’s extensionDependencies and extensionPacks to inject malicious code—without directly embedding the loader.
Attack flow:
- Malicious extension A lists extension B as a dependency or in its extensionPack.
- B (harmless-looking) contains or fetches the payload.
- Installers/users importing A get B as a “trusted” transitive, sidestepping scrutiny.
- GlassWorm chains spread laterally as orgs share workspace configs or sync extensions.
- Technical IOCs and targeted package names were enumerated here.2
Why does this matter? Because most “supply chain scans” barely scratch the top layer. Unless your SBOM policies or SCA tools crawl recursively—and you enforce gating on everything—attackers can waltz right in.
Composite Incident: Dependency Hell at 3AM (Anonymized for Illustration)
Picture this: 3AM, automated alert. A developer, racing a deadline, installs an “innocuous” YAML extension to their VS Code instance. That extension quietly yanks two more dependencies, one of which runs a postinstall script reaching out to a burner domain. The dev workstation tries to pivot to a shared CI runner—tripping egress alerts. Blame? A hidden extensionDependency slipping past default scans. No zero-days, just default trust leading to lateral sprawl. (Composite scenario; not referencing a specific logged incident.)
Why the Industry Keeps Failing: A Harsh Audit
Stop Trusting Defaults—or Prepare to Be a Headline
-
Open Registries Are a Threat Model—Not a Convenience Most orgs pull straight from Open VSX, npm, or PyPI without mirroring, curation, or airgap. Every direct fetch is an unsigned risk, period.
-
Transitive Dependencies = Blind Spot SCA tools like Dependabot or npm audit (docs) often flag direct issues. But as runbooks for syft and grype show, you have to recurse deeply and fail open on new/unknown dependencies. Otherwise, the attack walks free.
-
Poor Pipeline Segregation Extension-deploying build stages running with high-priv service accounts or wide network access. Why? Because “it’s just dev tools.” Stop. Treat every pipeline stage as critical production infra.
[SEO-Focused] How to Audit and Defend Against GlassWorm-Style Open VSX Attacks
Step 1: Mirror and Control the Registry Surface
Set up a private registry mirror. Docs and tools:
- Open VSX Mirroring Guide
- Artifactory: For npm, Maven, PyPI, etc.
Configure egress denies; production networks and CI/CD must never fetch from public registries directly.
Step 2: Scan All Extension/Package Dependencies (Including Transitives)
Integrate SCA/Container tools in CI/CD:
- name: Generate SBOM with syft
run: syft packages dir:. -o cyclonedx-json > sbom.json
- name: Scan for vulnerabilities with grype
run: grype sbom:sbom.json --fail-on high
Pin all extension versions in your package.json or extension manifest—no wildcards or latest.
Step 3: CI Policy Gates and Response Playbook
- Gating rule: Block any extension with unreviewed extensionDependencies/extensionPacks.
- Fail builds on detection of unsigned or recently published packages.
- Flag/triage new or rarely used dependencies, especially those published in the last 60 days.
- Audit build/container logs for unexpected DNS queries or outbound connections from dev tools.
- For incident response: collect extension manifests, SBOMs, container images, and all outbound traffic logs. Preserve for at least 90 days.
Step 4: Monitor, Alert, and Sandbox Everything
- Deploy network policies that block dev tools/extensions from nonessential egress.
- Implement egress rules for CI and developer subnets—alert on new domains or IPs (SIEM rule example).
- Isolate every dev toolchain in per-user containers or VMs; never share build workspace storage.
- Monitor for extension install activity outside business hours or bulk installs.
Step 5: Organizational Controls and Process
- Allow-list all extensions and packages. Adopt a “deny by default” posture for new dependencies.
- Implement a mandatory review period for newly published extensions. No immediate adoption.
- Enforce package signing and verify signatures (Sigstore project details).

GlassWorm IOCs and Monitoring Guidance
- Review GitHub’s detailed IOC list for GlassWorm2 for package names, hashes, and C2 domains.
- Subscribe to CERT advisories and Open VSX incident updates.
- Feed all flagged indicators to your SIEM and set triggers for inbound or outbound connections matching those domains/hashes.
If IOCs are not public or up-to-date, monitor primary vendor feeds and advisories—don’t bet incident response on open reports alone.
Practical Extension/Dependency Defense Checklist
Before you ship:
- Mirror and airgap all registries.
- Pin every extension and dependency version. No wildcards—lock manifests.
- SBOM every build, scan with SCA.
- Gating policies: block unreviewed extensionDependencies/extensionPacks.
- Enforce network egress restrictions for all CI/CD and dev endpoints.
- Collect, monitor, and alert on suspicious extension/run-time activity.
- Continuously update with published IOCs and advisories.
About the Author
Jordan L. Grant is a Principal DevSecOps Engineer with 18 years of hands-on supply-chain security experience. He previously led SecOps at FinEdge Inc., where he spearheaded the rebuild of their CI/CD pipelines after a real-world SCA compromise, and implemented SBOM-driven controls at scale (>1,000 developers). Jordan publishes tools and postmortems at github.com/jlgrant-sec and is available for incident consults at jordan.grant@yourdomain.com.
Legal/Disclosure
This post contains an anonymized/composite incident scenario for illustration; no actual breach or organization is identified. All technical indicators and recommendations are sourced from public advisories and vendor statements; see linked references. No association with Open VSX, Microsoft, GitHub, or the relevant registries is implied.
Still want to trust “just a dev tool?” You know where that road leads—don’t say you weren’t warned.
Footnotes
-
GlassWorm IOC/GitHub VS Code bug report thread. For current IOCs, prefer vendor advisories and CERT feeds. ↩ ↩2