Jun 3, 2026BTA Team9 min read

Miasma Worm Republishes 96 Versions of 32 Red Hat npm Packages to Steal Cloud Credentials

The supply chain attacks worth fearing are the ones where the legitimate publisher is still the legitimate publisher on paper, and that is exactly what happened to the official @redhat-cloud-services npm namespace on June 1, 2026. Between roughly 10:54 and 14:23 UTC, in three rapid waves, an attacker republished 96 malicious versions across 32 packages in that namespace and let npm itself do the distribution, because every tarball was signed and uploaded through normal Red Hat release plumbing rather than smuggled in from a typosquat. The compromise was reverse engineered and named by Wiz Research, which called the payload Miasma: The Spreading Blight, and was confirmed in parallel by Snyk, JFrog, and Sonatype, with broader reporting from BleepingComputer and The Hacker News.

The initial access was a compromised Red Hat employee GitHub account, and the campaign turned efficient when the attacker abused GitHub Actions OIDC tokens issued from three internal RedHatInsights repositories, frontend-components, javascript-clients, and platform-frontend-ai-toolkit, all of which already held publish authority over the @redhat-cloud-services namespace. The attacker pulled the legitimate tarballs, injected a preinstall hook into each package, and republished the tampered builds under fresh version numbers using the trust those repositories had with npm, which preserved the provenance metadata downstream consumers were trained to treat as a green light. Aggregate weekly downloads across the affected packages sat near 117,000 according to the Wiz and Snyk advisories, and although npm and Red Hat revoked most malicious versions within hours, any CI runner or developer workstation that fired npm install during the window had already executed the payload.

The payload, a variant of the Mini Shai-Hulud npm worm that Wiz tracks as Miasma, has two jobs, sweeping credentials and then propagating. On install, the preinstall hook hunted AWS, GCP, and Azure identities, SSH private keys, npm and PyPI publish tokens, GitHub Actions secrets including GITHUB_TOKEN and ACTIONS_RUNTIME_TOKEN, Kubernetes kubeconfig files and service account tokens, HashiCorp Vault tokens, Docker registry credentials, and any .env file it could reach, as documented by SafeDep and JFrog. The self-replicating half then used stolen npm tokens to enumerate other packages the victim could publish and tried to inject itself into them, which is how a compromise at one company becomes a compromise across a supply graph nobody mapped in advance.

The detection and response gap

Miasma was built to slip past assumptions defenders rely on, and each one maps to a control that did not fire when it needed to:

Mapping the behavior to MITRE ATT&CK

Translating the Miasma kill chain into ATT&CK gives a blue team something concrete to build detections against and then validate:

Operationalizing a response

If any pipeline or workstation in your environment ran npm install on June 1, 2026, treat that machine as compromised until the cleanup below has been completed and verified, because the speed at which a credential sweep turns into lateral movement does not give you a wait and see posture:

  1. Diff every package-lock.json and pnpm-lock.yaml against the version lists published by Wiz, Snyk, JFrog, and Sonatype, and flag any environment that resolved a @redhat-cloud-services package between 10:54 and 14:23 UTC on June 1, 2026, even briefly.
  2. Rotate every secret reachable from those environments, including AWS, GCP, and Azure credentials, SSH private keys, npm and PyPI publish tokens, GitHub Actions secrets (GITHUB_TOKEN and ACTIONS_RUNTIME_TOKEN), Kubernetes service account tokens and kubeconfigs, HashiCorp Vault tokens, Docker registry credentials, and any .env values present.
  3. Audit your own npm publish history for unauthorized version bumps, because if a developer with publish rights ran the worm, their tokens may already have seeded the next wave on packages your organization owns.
  4. Pin @redhat-cloud-services dependencies to known good versions identified after the revocation, refresh lockfiles, and rerun npm install against a clean mirror so any cached tarballs are replaced.
  5. Constrain GitHub Actions OIDC trust policies so federated tokens cannot publish to npm without a gating step, and tighten the scope of each repository with publish authority over a shared namespace.

How BlueTeamAutomation closes the loop

Doing all of the above by hand, after the malicious versions are already in your lockfiles, is the slow path an attacker is counting on. BlueTeamAutomation runs the full blue-team workflow against this class of npm supply-chain worm continuously and on hardware you control:

The lesson behind Miasma is the same one Megalodon and Nx Console already taught about GitHub Actions: the boundary between your build pipeline and your production crown jewels is now a single OIDC token chain away from collapse, and continuous validation paired with local detection and automated response is what stands between catching the next supply-chain campaign in a drill and explaining to your customers why their secrets walked out of your CI logs.

Validate your pipeline against the next npm worm

BASzy emulates real supply-chain attacks against your developer machines and CI runners, so you discover the detection and response gaps before an attacker turns a preinstall hook into a credential sweep. See the full local-first blue-team stack.

Explore BASzy →