Beyond JavaScript: A Compiled Weapon in Your node_modules
IronWorm was discovered on June 4, 2026, embedded in 36 npm packages. Unlike previous supply chain worms that used obfuscated JavaScript, IronWorm ships a compiled Rust binary triggered by a postinstall script. The binary is platform-specific, optimized for Linux, and invisible to JavaScript-based security scanners. When a developer runs npm install, the binary executes silently.
The payload deploys an eBPF rootkit — a kernel-level program that intercepts system calls to hide its own process, files, and network connections from monitoring tools. The worm communicates with its operator over the Tor network, making command-and-control traffic indistinguishable from legitimate anonymized traffic. This is not a typosquatted package with a Base64-encoded eval. This is military-grade malware distributed through the world's largest package manager.
86 Environment Variables, 20 Credential Files
IronWorm's credential harvester is comprehensive. It targets 86 environment variables that may contain API keys for OpenAI, Anthropic, AWS, Azure, GCP, npm, and cryptocurrency exchanges. It reads 20 credential files including SSH keys, Vault configuration, Kubernetes configs, Docker credentials, and browser-stored passwords. The focus on AI service credentials — OpenAI and Anthropic keys — reflects the growing value of AI API access in underground markets.
After harvesting credentials, IronWorm uses stolen GitHub tokens to push backdated commits into the victim's repositories. These commits plant malware into other packages the victim maintains, which are then published to npm where they infect the next developer. The self-propagation cycle is automated — each compromised developer becomes an unwitting distribution point for the next wave.
The Generational Leap from Shai-Hulud
WebPulse has tracked the Shai-Hulud supply chain worm family since September 2025. The original used obfuscated JavaScript. The Hades variant added prompt injection to confuse AI scanners. Miasma, built from open-sourced Shai-Hulud code, hit 73 Microsoft repositories. IronWorm represents a generational leap: compiled Rust replaces JavaScript, an eBPF rootkit replaces process-level hiding, Tor replaces clearnet C2.
DevOps.com's analysis notes that IronWorm shares some Shai-Hulud traits — the self-propagation via stolen credentials, the npm lifecycle hook trigger — but takes the threat to a fundamentally different level. JavaScript worms can be detected by reading the source. Rust binaries must be reverse-engineered. eBPF rootkits operate at the kernel level, below the visibility of most endpoint detection tools. Tor C2 defeats network-based detection.
Framework Exposure
IronWorm targets npm — the package manager shared by Next.js, Angular, Nuxt, React, Express, and every Node.js-based framework. The 36 compromised packages were not framework-specific, but any project that included them in its dependency tree was exposed. The attack targets Linux environments specifically, which means production servers and CI/CD pipelines are the primary victims — not developer laptops.
Frameworks with no npm dependency — Hugo, Jekyll, Pelican — have zero IronWorm exposure. Frameworks with minimal, audited npm dependencies — Astro, Eleventy — have proportionally less. The frameworks with the deepest npm dependency trees and the most complex CI/CD pipelines carry the highest risk. When the worm is written in Rust and hidden by a kernel rootkit, the supply chain depth is not just a theoretical risk metric — it is the distance between your production server and a Tor-controlled backdoor.