On 1 June 2026, Wiz Research identified a supply chain compromise affecting multiple packages published under the @redhat-cloud-services npm namespace. Investigation revealed that at least 32 package releases contained unauthorized modifications that do not match the corresponding source repositories. These packages cumulatively average ~80,000 weekly downloads.
Changelog
June 1, 2026 1PM UTC update: most malicious versions have been revoked, with 2 remaining as of writing.
June 1, 2026 2PM UTC update: Added Root Cause section with analysis.
June 1, 2026 2:20PM UTC update: Added information on second wave of commits.
June 1, 2026 3PM UTC update: Added second wave to table of impacted packages, as well as additional details about the payload.
What is Miasma?
Analysis of the compromised package versions identified a common malicious payload introduced across multiple affected releases. The packages contained newly added installation-time execution mechanisms, including preinstall scripts that automatically invoked a malicious index.js file during package installation. The payloads consisted of unusually large, heavily obfuscated JavaScript files employing eval() and ROT-based decoding techniques to conceal their functionality.
The payload appears to be derived from the (Mini) Shai-Hulud malware open-sourced by TeamPCP. The observed modifications are largely cosmetic, with references to the Dune universe replaced by Greek mythology themes (i.e "spartan"), while the underlying functionality and tradecraft remain substantially similar. This variant creates repositories containing the description Miasma: The Spreading Blight.
One of the main changes in this new variant is the addition of new data collectors focused on cloud identities. Specifically, collectors for GCP and Azure identities were added that collect all identities the infected machine has access to. While previous versions of the malware primarily focused on extracting secrets from these environments, this variant suggests an increased attacker focus on gaining and leveraging access to the cloud itself.
In addition, the malware now generates a uniquely encrypted payload for each infection, making hash-based IOCs useful only for a specific package version. Unlike previous variants that simply copied themselves, this approach makes detection and version tracking significantly more difficult.
Root Cause
Evidence indicates that a specific Red Hat employee GitHub account was compromised and used to inject the malware into these packages. The compromised account pushed malicious orphan commits to two RedHatInsights repositories, bypassing code review. This happened across two waves of activity.
| Time (UTC) | Repository | Commit SHA | Branch |
|---|---|---|---|
| 10:53:06 | RedHatInsights/frontend-components | 8bf051251ec3b973e39a313547e53421a2f8d2f6 | oidc-61fff775 |
| 10:53:22 | RedHatInsights/javascript-clients | 608d01124cd6b5b8c55888e984b4c4d9b06fa686 | oidc-4d5900f3 |
| 10:53:33 | RedHatInsights/platform-frontend-ai-toolkit | oidc-2530ec68 | |
| 13:44:48 | RedHatInsights/frontend-components | ab9903d9edc720d1e11ea7d3d3e7a1c456f44ff7 | oidc-af10000d |
| 13:45:49 | RedHatInsights/javascript-clients | oidc-6523a11b | |
| 13:46:47 | RedHatInsights/platform-frontend-ai-toolkit | 7569d69cf3684a792ce63d19b6e0d9d192597963 | oidc-93b9a955 |
These contained a minimal workflow that requested an OIDC token for npm publishing:
name: release
on:
push:
branches: ['*']
jobs:
release:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6
- name: prepare
run: bun run _index.js
env:
OIDC_PACKAGES: "@redhat-cloud-services/frontend-components, ..."
The workflow triggered on push to any branch, requested GitHub's OIDC identity token via id-token: write, then executed an obfuscated payload (_index.js) that published packages with valid SLSA provenance attestations. This resembles TeamPCP’s previous attack against Tanstack, which also included the production of valid SLSA provenance attestations.
Attribution
The observed tradecraft is consistent with TTPs associated with TeamPCP's "Mini Shai-Hulud" npm supply chain campaign. However, because TeamPCP publicly released details and code related to the Mini Shai-Hulud operation, other threat actors may be able to replicate or adapt the same techniques. As a result, the similarities observed in this incident should be treated as evidence of TTP overlap rather than definitive attribution to TeamPCP, and the possibility of a copycat actor leveraging publicly available tooling and methodologies cannot be ruled out.
What Steps Should Security Teams Take?
Organizations should immediately investigate developer workstations, CI/CD environments, and repositories for signs of compromise. Teams should audit systems for the affected packages, GitHub Actions, and VSCode extensions, while also reviewing GitHub activity for unauthorized repositories, newly created access tokens, or suspicious workflow executions.
Because the malware targets developer credentials and secrets, organizations should assume potential exposure of GitHub tokens, SSH keys, cloud credentials, and CI/CD secrets, and rotate them accordingly.
Finally, organizations should strengthen software supply chain defenses by implementing dependency allowlisting, SBOM generation, package verification, and improved monitoring of developer and build environments.
How Can Wiz Help?
Wiz customers can use the pre-built queries and advisory in the Wiz Threat Intel Center to search for relevant instances in their environment. Wiz Research will continue to update that advisory as the situation develops.
Indicators of Compromise
Attacker created repositories description:
Miasma: The Spreading BlightUser-agent used for GCP querying:
google-api-nodejs-client/7.0.0 gl-node/20.11.0 gccl/7.0.0
Affected Packages
| Package | Compromised Version |
|---|---|
| @redhat-cloud-services/topological-inventory-client | = 3.0.10 || = 3.0.11 || = 3.0.13 |
| @redhat-cloud-services/compliance-client | = 4.0.3 || = 4.0.4 || = 4.0.6 |
| @redhat-cloud-services/rbac-client | = 9.0.3 || = 9.0.4 || = 9.0.6 |
| @redhat-cloud-services/insights-client | = 4.0.4 || = 4.0.5 || = 4.0.7 |
| @redhat-cloud-services/frontend-components | = 7.7.2 || = 7.7.3 || = 7.7.5 |
| @redhat-cloud-services/frontend-components-utilities | = 7.4.1 || = 7.4.2 || = 7.4.4 |
| @redhat-cloud-services/remediations-client | = 4.0.4 || = 4.0.5 || = 4.0.7 |
| @redhat-cloud-services/frontend-components-notifications | = 6.9.2 || = 6.9.3 || = 6.9.5 |
| @redhat-cloud-services/patch-client | = 4.0.4 || = 4.0.5 || = 4.0.6 |
| @redhat-cloud-services/host-inventory-client | = 5.0.3 || = 5.0.4 || = 5.0.6 |
| @redhat-cloud-services/rule-components | = 4.7.2 || = 4.7.3 || = 4.7.5 |
| @redhat-cloud-services/frontend-components-advisor-components | = 3.8.2 || = 3.8.3 || = 3.8.5 |
| @redhat-cloud-services/notifications-client | = 6.1.4 || = 6.1.5 || = 6.1.7 |
| @redhat-cloud-services/sources-client | = 3.0.10 || = 3.0.11 || = 3.0.13 |
| @redhat-cloud-services/integrations-client | = 6.0.4 || = 6.0.5 || = 6.0.7 |
| @redhat-cloud-services/frontend-components-config | = 6.11.3 || = 6.11.4 || = 6.11.6 |
| @redhat-cloud-services/frontend-components-config-utilities | = 4.11.2 || = 4.11.3 || = 4.11.5 |
| @redhat-cloud-services/hcc-pf-mcp | = 0.6.1 || = 0.6.2 || = 0.6.4 |
| @redhat-cloud-services/frontend-components-remediations | = 4.9.2 || = 4.9.3 || = 4.9.5 |
| @redhat-cloud-services/eslint-config-redhat-cloud-services | = 3.2.1 || = 3.2.2 || = 3.2.4 |
| @redhat-cloud-services/javascript-clients-shared | = 2.0.8 || = 2.0.9 || = 2.0.11 |
| @redhat-cloud-services/quickstarts-client | = 4.0.11 || = 4.0.12 || = 4.0.14 |
| @redhat-cloud-services/config-manager-client | = 5.0.4 || = 5.0.5 || = 5.0.7 |
| @redhat-cloud-services/hcc-feo-mcp | = 0.3.1 || = 0.3.2 || = 0.3.4 |
| @redhat-cloud-services/entitlements-client | = 4.0.11 || = 4.0.12 || = 4.0.14 |
| @redhat-cloud-services/tsc-transform-imports | = 1.2.2 || = 1.2.3 || = 1.2.5 |
| @redhat-cloud-services/hcc-kessel-mcp | = 0.3.1 || = 0.3.2 || = 0.3.4 |
| @redhat-cloud-services/frontend-components-testing | = 1.2.1 || = 1.2.2 || = 1.2.4 |
| @redhat-cloud-services/types | = 3.6.1 || = 3.6.2 || = 3.6.4 |
| @redhat-cloud-services/chrome | 2.3.1 |
| @redhat-cloud-services/frontend-components-translations | 4.4.1 |
| @redhat-cloud-services/vulnerabilities-client | 2.1.8 |