npm Supply Chain Crisis: Self-Propagating Worms in Trusted Namespaces
Three Concurrent Attacks, One Blown Trust Model
npm is under pressure from three concurrent campaigns. The shared finding: publisher reputation is no longer a defensive control.
Campaign 1: Miasma / Shai-Hulud Evolution
Microsoft Security Intelligence confirmed a self-propagating worm across 90+ packages published under Red Hat's @redhat-cloud-services npm scope. The worm harvests npm tokens, GitHub PATs, AWS access keys, and SSH keys from any host that runs npm install against an affected package. Stolen npm tokens are then used to republish trojanized versions of other packages owned by the compromised maintainer. The list grows.
Campaign 2: codexui-android (BrutalStrike)
Aikido researcher Charlie Eriksen flagged codexui-android, an npm package pulling ~27,000 weekly downloads, exfiltrating OpenAI access_token, id_token, account ID, and non-expiring refresh_token. The loader chunk-PUR7OUAG.js lives only in the npm tarball, not the GitHub repo. That defeats SCA tools that diff published artifacts against upstream source. Exfiltration target: sentry.anyclawstore disguised as Sentry telemetry.
Campaign 3: Play Store Delivery
The same operator ships two Android apps through Google Play. They pass review as clean 26MB APKs, then unpack a Termux-derived Linux userland and pull codexui-android@latest via pnpm under PRoot. Both apps remain live.
The structural failure: npm's install-script execution model remains opt-out, not opt-in. npm 11.16.0's allowScripts feature is advisory-only. The postinstall vector that has driven every major npm incident since event-stream (2018) is still the default behavior.
Cross-Source Pattern
Four independent sources, same finding from different angles: compromise a trusted publisher namespace, not a typosquat; self-propagate via stolen credentials; target AI developer tooling. The convergence is not coincidental. OpenAI refresh tokens and GitHub PATs are now the highest-value credentials on a developer workstation.
Structural Fixes Required
Short-lived OIDC-issued credentials in CI strip the value from stolen long-lived tokens. ignore-scripts=true org-wide kills the postinstall vector. Provenance attestation via Sigstore/SLSA is the only mechanism that survives namespace compromise. None of these are deployed at most organizations.
What to do
Grep all lockfiles and CI caches for @redhat-cloud-services packages and codexui-android; treat any match as confirmed credential exposure
Force-rotate all npm publish tokens, GitHub PATs, AWS access keys, SSH keys, and OpenAI API keys for any developer or CI runner that installed Node packages in the last 7 days
Block sentry.anyclawstore at DNS/egress and add chunk-PUR7OUAG.js to EDR detection rules
Deploy ignore-scripts=true in all .npmrc files across CI base images and developer onboarding by end of week
Implement registry proxy with quarantine window (72-hour hold on new package versions) and provenance attestation verification before Q3