A compromised npm maintainer account has pushed the Mini Shai-Hulud worm through hundreds of trusted packages, putting developer credentials, cloud tokens, and crypto wallets at risk. The uncomfortable lesson is simple: in modern software supply chains, a legitimate package can become hostile overnight.
The latest Shai-Hulud wave is not a fringe npm incident. Security researchers say the attacker used the compromised maintainer account atool on May 19 to publish 639 malicious versions across 323 unique packages, including 558 versions tied to 279 @antv packages. That matters because the affected set includes widely used software such as echarts-for-react, timeago.js, size-sensor, and AntV libraries that sit inside dashboards, analytics tools, and internal business applications.
This was not typosquatting, where an attacker hopes a developer mistypes a package name. The packages were real. The publishing account was real. As Socket researchers recently reported, the attack hit legitimate packages with established download bases, including echarts-for-react, which draws roughly 1.1 million weekly downloads. That is what makes this kind of compromise so hard to defend against: developers were not reaching for something obscure, they were pulling software they already trusted.
The worm hunts cloud keys, tokens, and wallets
Once installed, the malicious payload runs through npm lifecycle hooks before the legitimate package ever has a chance to do useful work. Researchers found heavily obfuscated JavaScript designed to harvest a long list of secrets, including AWS, Google Cloud, and Azure credentials, npm and GitHub tokens, SSH keys, Docker configuration files, Kubernetes secrets, Vault tokens, Stripe keys, database connection strings, and crypto wallet files.
The stolen data is encrypted and sent to attacker-controlled infrastructure, including the domain t.m-kosche[.]com. If GitHub credentials are available, the worm can also create public repositories under the victim's account as a backup exfiltration channel. Several reports tied those repositories to the reversed marker string 'niagA oG eW ereH :duluH-iahS', which reads as 'Shai-Hulud: Here We Go Again' when reversed.
The persistence mechanism is just as important as the initial theft. The malware can write hooks into .vscode/tasks.json and .claude/settings.json, allowing it to survive package removal and reactivate when a developer opens a project. For teams experimenting with AI coding agents, that is a serious warning. The development environment itself is becoming part of the attack surface.
Why automated propagation changes the risk
The defining feature of Mini Shai-Hulud is its ability to spread. Using stolen npm tokens, the worm can validate access against the npm registry, identify packages the victim is allowed to publish, download clean tarballs, inject the malicious payload, alter package metadata, increment versions, and republish poisoned releases. One stolen token can turn into dozens of compromised packages in minutes.
That changes the economics of the attack. A single developer laptop or CI runner is no longer just one infected machine. It can become a publishing platform for the next wave. Snyk and other researchers estimate the atool-related packages represented about 16 million weekly downloads, although download counts are only a rough measure of exposure because the real damage depends on where the malicious versions were installed and what credentials were present at the time.
The broader campaign has also moved beyond one package family. Recent reporting tied Mini Shai-Hulud activity to npm, PyPI, Composer, GitHub Actions, and even a VS Code extension. Earlier May incidents involving TanStack, Mistral AI-related packages, and other developer tools showed the same direction of travel: attackers are focusing on the systems that build and ship software, not just the software itself.
What startups should do now
The immediate response is practical. Pin exact versions in lockfiles. Use npm ci in CI environments so builds respect those lockfiles. Where possible, run installs with --ignore-scripts to block lifecycle hooks that do not need to execute. Any credential present on a machine or runner that installed a malicious version should be treated as exposed and rotated.
Teams should also audit GitHub Actions workflows, especially privileged patterns such as pull_request_target, and review whether npm publishing tokens are scoped as narrowly as possible. Secrets should live in a dedicated secrets manager, not in broad environment variables available to every build step. That may sound basic, but many young engineering teams still optimize for speed first and clean up access later.
The larger lesson is structural. npm's scale is a strength, but it also means every package installation is a trust decision. Signature checks, SBOMs, local proxy registries, package reputation tools, and malicious behavior scanning are no longer enterprise-only concerns. They are becoming normal operating hygiene for any startup shipping software on top of open source.
The next few weeks will show whether this remains a contained incident or becomes a template for copycats. The Shai-Hulud code has already circulated publicly, and researchers are tracking related campaigns across multiple ecosystems. For founders, the takeaway is not to stop using open source. It is to stop treating dependency security as something that can wait until the company is bigger.