No items found.
April 30, 2026
·
0
Minutes Read

Mini Shai Hulud Supply Chain Attack (Updated 30 Apr)

Advisory
April 30, 2026
·
0
Minutes Read

Mini Shai Hulud Supply Chain Attack (Updated 30 Apr)

Advisory
April 30, 2026
·
0
Minutes Read
Kudelski Security Team
Find out more
table of contents
Share on
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Summary

A sophisticated supply chain attack, dubbed "Mini Shai Hulud" has been attributed to the threat actor group TeamPCP. This operation involves the compromise of SAP-related npm packages through the injection of malicious preinstall scripts. The attack aims to harvest developer and CI/CD secrets from platforms such as GitHub, npm, and major cloud providers, with exfiltration occurring via attacker-controlled GitHub repositories.

Update 30 April: Campaign Expansion

The campaign has expanded beyond the initial SAP package ecosystem to compromise high-profile packages in the PyPI (lightning aka PyTorch Lightning) and npm (intercom-client) registries. The threat actors have shifted tactics to leverage automated CI/CD workflows and compromised maintainer accounts to distribute malicious versions, indicating a highly coordinated and automated propagation strategy.

Affected Systems and/or Applications

The attack targets specific npm packages within the SAP ecosystem, including:

  • @cap-js/sqlite - v2.2.2
  • @cap-js/postgres - v2.2.2
  • @cap-js/db-service - v2.10.1
  • mbt - v1.2.48

These packages have been modified to include malicious preinstall scripts that execute during the npm install process.

Update 30 April: Campaign Expansion

  • PyPI Packages:
    • lightning (PyTorch Lightning) versions 2.6.2 and 2.6.3
  • npm Packages:
    • intercom-client version 7.0.4

Technical Details

The attack begins with the execution of a setup.mjs script, which downloads the Bun runtime and executes an obfuscated payload (execution.js). This payload acts as a credential stealer and propagation framework, targeting developer environments and CI/CD pipelines. It collects sensitive data, including:

  • GitHub tokens
  • npm credentials
  • Cloud secrets (AWS, Azure, GCP)
  • Kubernetes tokens
  • GitHub Actions secrets

Exfiltration is conducted via public GitHub repositories using encrypted payloads. The malware includes logic to propagate to additional repositories and package distributions. Notably, the operation employs a system check to terminate if the compromised machine is configured for the Russian language, ensuring no data is exfiltrated from Russian-speaking systems.

The attack also introduces browser credential theft capabilities, targeting multiple browsers such as Chrome, Safari, Edge, Brave, and Chromium.

Update 30 April:

  • Execution Chain in PyPI: The compromised lightning package includes a hidden _runtime directory containing a downloader and an obfuscated JavaScript payload. A Python script (start.py) automatically executes upon module import, downloading the Bun runtime and running an 11 MB obfuscated payload (router_runtime.js) designed for comprehensive credential theft.
  • npm Propagation: The malware modifies local npm packages by injecting a postinstall hook into the package.json file, increments the patch version number, and repacks the .tgz tarballs. If a developer inadvertently publishes these tampered packages, the malware propagates to downstream systems.

Mitigation

Security teams should take the following steps to mitigate the impact of this attack:

  1. Identify Exposure: Search environments, lockfiles, artifact stores, and CI logs for affected package versions and malicious files (setup.mjs, execution.js).
  2. Rotate Credentials: If exposure is suspected, immediately rotate GitHub tokens, npm tokens, cloud credentials, Kubernetes tokens, and CI/CD secrets.
  3. Audit GitHub Activity: Look for suspicious commits, newly created repositories, or indicators such as the propagation keyword and unusual commit authors.
  4. Monitor for Indicators of Compromise (IoCs): Utilize the provided file hashes to detect compromised files within your environment.

Update 30 April: Immediate Remediation

  1. Block and Remove Malicious Versions: Explicitly block lightning versions 2.6.2 and 2.6.3, as well as intercom-client version 7.0.4. Remove these packages from all developer systems and CI/CD caches if already installed.
  2. Downgrade to Clean Releases: Revert to the last known secure versions lightning 2.6.1 and/or intercom-client 7.0.3 at time of writing to restore functionality without the malicious payload.
  3. Enforce Branch Protection and Commit Verification: Implement strict branch protection rules requiring pull request reviews and status checks. Enforce commit signature verification (GPG/SSH) to neutralize AI impersonation tactics and detect unauthorized commits

Indicators of Compromise

Component File / Package File Size (bytes) SHA256 SHA1 MD5
Shared Dropper setup.mjs 4,549 4066781fa830224c8bbcc3aa005a396657f9c8f9016f9a64ad44a9d7f5f45e34 307d0fa7407d40e67d14e9d5a4c61ac5b4f20431 35baf8316645372eea40b91d48acb067
Execution Script execution.js (sqlite/postgres) 11,723,748 eb6eb4154b03ec73218727dc643d26f4e14dfda2438112926bb5daf37ae8bcdb ca4a5bb85778ffcd2153ace88fe2d882c8ceeb23 b523a69b27064d1715d1f0aaffcfae63
Execution Script execution.js (db-service) 11,729,871 6f933d00b7d05678eb43c90963a80b8947c4ae6830182f89df31da9f568fea95 bc95cc5dda788295aa0c9456791520599ef99526 6fb87d243b011b5445f379f80e1a6b4d
Execution Script execution.js (mbt) 11,678,349 80a3d2877813968ef847ae73b5eeeb70b9435254e74d7f07d8cf4057f0a710ac 6bc859aaee1f8885eec2a3016226e877e5adba08 45dc9c02f82b4370ca92785282d43a86
Tarball @cap-js/sqlite & @cap-js/postgres 3,409,213 1d9e4ece8e13c8eaf94cb858470d1bd8f81bb58f62583552303774fa1579edee e80824a19f48d778a746571bb15279b5679fd61c e32eaf0c3cde9616831a1e92d42b0058
Tarball @cap-js/db-service 3,395,651 a1da198bb4e883d077a0e13351bf2c3acdea10497152292e873d79d4f7420211 7b6a28e92149637e5d7c7f4a2d3e54acd507c929 8cd683f78735c9bfc32600c73d3d9abe
Tarball mbt 3,373,788 86282ebcd3bebf50f087f2c6b00c62caa667cdcb53558033d85acd39e3d88b41 0af7415d65753f6aede8c9c0f39be478666b9c12 04d8a99447b16f6839fff3b978f88d7e
Dropper - intercom-client setup.mjs Unspecified fe64699649591948d6f960705caac86fe99600bf76e3eae29b4517705a58f0e2 7c8bf63a9ba9169d5237acfc683f1bd004349341 598f8a39b021cf56d33432b6f67f7660
Execution Script - intercom-client router_runtime.js ~11.7 MB 5ae8b2343e97cc3b2c945ec34318b63f27fa2db1e3d8fbaa78c298aa63db52ed 0cf67457352cf82dea4189d9dbd41b8f519dbb81 9bd71891febd47b6a7d9ef1f6120662a
Execution Script - lightning router_runtime.js ~11.4 MB 5f5852b5f604369945118937b058e49064612ac69826e0adadca39a357dfb5b1 f1b3e7b3eec3294c4d6b5f87854a52471f03997f 40d0f21b64ec8fb3a7a1959897252e09

What the Cyber Fusion Center is Doing

The Cyber Fusion Center (CFC) continues to actively monitor the situation and will issue advisory updates as needed. A threat hunting campaign regarding the above activity will be conducted.

References

Related Post