Mini Shai Hulud Supply-Chain Campaign Expands to PyPI and npm Packages

· Original article ↗

Summary

Kudelski Security reports that the TeamPCP-attributed Mini Shai Hulud campaign compromised npm and PyPI packages to steal developer and CI/CD credentials, with propagation through maintainer accounts and automated workflows.

Key points

  • The report attributes the campaign to TeamPCP and lists compromised SAP-related npm packages, PyPI lightning versions 2.6.2 and 2.6.3, and npm intercom-client 7.0.4.
  • Malicious install scripts download the Bun runtime and execute obfuscated payloads; the lightning package also runs a Python script on import.
  • The malware targets GitHub and npm credentials, cloud secrets, Kubernetes tokens, CI/CD secrets, and browser credentials.
  • Stolen data is reportedly exfiltrated through attacker-controlled public GitHub repositories using encrypted payloads.
  • The campaign can modify local npm packages, add a postinstall hook, and repack them, enabling further spread if tampered packages are published.
  • The report recommends blocking and removing affected versions, rotating potentially exposed credentials, auditing GitHub activity, and checking for listed file hashes and malicious files.
  • Kudelski Security says its Cyber Fusion Center is monitoring the activity and plans a threat-hunting campaign.

Article Details

Attack Vectors
  • Compromised npm and PyPI packages execute malicious preinstall, postinstall, or import-triggered scripts that download the Bun runtime and run obfuscated JavaScript payloads.
  • The payload steals developer and CI/CD credentials, including GitHub and npm tokens, cloud secrets, Kubernetes tokens, GitHub Actions secrets, and browser credentials.
  • Stolen data is encrypted and exfiltrated through attacker-controlled public GitHub repositories.
  • The malware propagates by modifying local npm packages, adding a postinstall hook, incrementing package versions, and repacking tarballs for potential downstream publication.
Defensive Notes
  • Search environments, lockfiles, artifact stores, and CI logs for the affected package versions and the files setup.mjs and execution.js.
  • Rotate potentially exposed GitHub, npm, cloud, Kubernetes, and CI/CD credentials.
  • Audit GitHub activity for suspicious commits, newly created repositories, the propagation keyword, and unusual commit authors.
  • Block and remove lightning 2.6.2 and 2.6.3 and intercom-client 7.0.4; the article identifies lightning 2.6.1 and intercom-client 7.0.3 as clean releases at the time of writing.
  • Use the listed file hashes to detect compromised files, and enforce branch protection, pull-request reviews, status checks, and commit signature verification.

Indicators of compromise

TypeIndicatorContext
MD504d8a99447b16f6839fff3b978f88d7eMD5 hash listed for the compromised mbt tarball.
MD535baf8316645372eea40b91d48acb067MD5 hash listed for the shared dropper file setup.mjs.
MD540d0f21b64ec8fb3a7a1959897252e09MD5 hash listed for the lightning execution payload router_runtime.js.
MD545dc9c02f82b4370ca92785282d43a86MD5 hash listed for the execution.js payload associated with mbt.
MD5598f8a39b021cf56d33432b6f67f7660MD5 hash listed for the intercom-client dropper file setup.mjs.
MD56fb87d243b011b5445f379f80e1a6b4dMD5 hash listed for the execution.js payload associated with db-service.
MD58cd683f78735c9bfc32600c73d3d9abeMD5 hash listed for the compromised @cap-js/db-service tarball.
MD59bd71891febd47b6a7d9ef1f6120662aMD5 hash listed for the intercom-client execution payload router_runtime.js.
MD5b523a69b27064d1715d1f0aaffcfae63MD5 hash listed for the execution.js payload associated with the sqlite/postgres packages.
MD5e32eaf0c3cde9616831a1e92d42b0058MD5 hash listed for the compromised @cap-js/sqlite and @cap-js/postgres tarball.
SHA10af7415d65753f6aede8c9c0f39be478666b9c12SHA-1 hash listed for the compromised mbt tarball.
SHA10cf67457352cf82dea4189d9dbd41b8f519dbb81SHA-1 hash listed for the intercom-client execution payload router_runtime.js.
SHA1307d0fa7407d40e67d14e9d5a4c61ac5b4f20431SHA-1 hash listed for the shared dropper file setup.mjs.
SHA16bc859aaee1f8885eec2a3016226e877e5adba08SHA-1 hash listed for the execution.js payload associated with mbt.
SHA17b6a28e92149637e5d7c7f4a2d3e54acd507c929SHA-1 hash listed for the compromised @cap-js/db-service tarball.
SHA17c8bf63a9ba9169d5237acfc683f1bd004349341SHA-1 hash listed for the intercom-client dropper file setup.mjs.
SHA1bc95cc5dda788295aa0c9456791520599ef99526SHA-1 hash listed for the execution.js payload associated with db-service.
SHA1ca4a5bb85778ffcd2153ace88fe2d882c8ceeb23SHA-1 hash listed for the execution.js payload associated with the sqlite/postgres packages.
SHA1e80824a19f48d778a746571bb15279b5679fd61cSHA-1 hash listed for the compromised @cap-js/sqlite and @cap-js/postgres tarball.
SHA1f1b3e7b3eec3294c4d6b5f87854a52471f03997fSHA-1 hash listed for the lightning execution payload router_runtime.js.
SHA2561d9e4ece8e13c8eaf94cb858470d1bd8f81bb58f62583552303774fa1579edeeSHA-256 hash listed for the compromised @cap-js/sqlite and @cap-js/postgres tarball.
SHA2564066781fa830224c8bbcc3aa005a396657f9c8f9016f9a64ad44a9d7f5f45e34SHA-256 hash listed for the shared dropper file setup.mjs.
SHA2565ae8b2343e97cc3b2c945ec34318b63f27fa2db1e3d8fbaa78c298aa63db52edSHA-256 hash listed for the intercom-client execution payload router_runtime.js.
SHA2565f5852b5f604369945118937b058e49064612ac69826e0adadca39a357dfb5b1SHA-256 hash listed for the lightning execution payload router_runtime.js.
SHA2566f933d00b7d05678eb43c90963a80b8947c4ae6830182f89df31da9f568fea95SHA-256 hash listed for the execution.js payload associated with db-service.
SHA25680a3d2877813968ef847ae73b5eeeb70b9435254e74d7f07d8cf4057f0a710acSHA-256 hash listed for the execution.js payload associated with mbt.
SHA25686282ebcd3bebf50f087f2c6b00c62caa667cdcb53558033d85acd39e3d88b41SHA-256 hash listed for the compromised mbt tarball.
SHA256a1da198bb4e883d077a0e13351bf2c3acdea10497152292e873d79d4f7420211SHA-256 hash listed for the compromised @cap-js/db-service tarball.
SHA256eb6eb4154b03ec73218727dc643d26f4e14dfda2438112926bb5daf37ae8bcdbSHA-256 hash listed for the execution.js payload associated with the sqlite/postgres packages.
SHA256fe64699649591948d6f960705caac86fe99600bf76e3eae29b4517705a58f0e2SHA-256 hash listed for the intercom-client dropper file setup.mjs.

MITRE ATT&CK

Threat Actors

Products

AWSCloud secrets (AWS, Azure, GCP)AzureCloud secrets (AWS, Azure, GCP)BraveThe attack also introduces browser credential theft capabilities, targeting multiple browsers such as Chrome, Safari, Edge, Brave, and Chromium.ChromiumThe attack also introduces browser credential theft capabilities, targeting multiple browsers such as Chrome, Safari, Edge, Brave, and Chromium.EdgeThe attack also introduces browser credential theft capabilities, targeting multiple browsers such as Chrome, Safari, Edge, Brave, and Chromium.GCPCloud secrets (AWS, Azure, GCP)GitHubpreinstall 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.Google ChromeThe attack also introduces browser credential theft capabilities, targeting multiple browsers such as Chrome, Safari, Edge, Brave, and Chromium.KubernetesKubernetes tokensnpmbeen 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 andPyPIcampaign 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 shiftedSafariThe attack also introduces browser credential theft capabilities, targeting multiple browsers such as Chrome, Safari, Edge, Brave, and Chromium.

Tools

Related Articles