Hostage Token: Shai-Hulud Hijacks Tensorlake's npm SDK
A maintainer-identity push let the project's own release pipeline publish tensorlake 0.5.144 carrying a Shai-Hulud worm variant with a dead-man's switch.
Summary
- First seen
- October 7, 2026
- Targeted regions
- Worldwide
- Targeted platforms
- Windows, Linux, macOS, npm ecosystem, CI/CD pipelines, Kubernetes, Cloud environments
- Targeted industries
- Software Development, Artificial Intelligence, Technology
- Malware
- Shai-Hulud
A threat actor pushed malicious code into the tensorlakeai/tensorlake GitHub repository using a maintainer's identity and let the project's own release pipeline publish version 0.5.144 of the tensorlake npm SDK. The poisoned release carries a variant of the Shai-Hulud worm that runs during installation, sweeps the host for npm, GitHub, cloud, Kubernetes, Vault, SSH, browser and cryptocurrency wallet secrets, exfiltrates them, and republishes itself into other packages the victim owns. It also plants a dead-man's switch: if the stolen GitHub token is revoked, a background monitor wipes the user's home directory.
Attack Details
This attack started inside the project's own GitHub repository, not on npm. On October 7, 2026, someone using a maintainer's identity pushed malicious commits directly to the main branch of tensorlakeai/tensorlake without review, and one of them added a preinstall entry so the code would run automatically during installation. On October 8, the project's own release workflow published tensorlake 0.5.144 to npm, which means the poisoned release even carried a valid provenance attestation. Provenance only proves where a package was built, not that the code inside is clean. With more than 100,000 lifetime installs, one npm install was all it took.
The malware runs the moment the package is installed. The preinstall hook calls node lib/setup.mjs, a scrambled loader that downloads the Bun runtime and uses it to launch the real payload, lib/Math_Symbol.js. Bun is a deliberate choice, since security tools watch Node.js far more closely. Researchers found the loader skips build servers, so developer laptops are the target. It then settles in to survive restarts, running as a gh-token-monitor service on Linux, a LaunchAgent on macOS, and a logon task calling monitor.ps1 on Windows, and it drops .claude/settings.json and .vscode/tasks.json into any repository it can reach so the code fires again when someone opens that project in Claude Code or VS Code. The worst part is the hostage token: the monitor checks the stolen GitHub token every sixty seconds, and the moment GitHub rejects it, the malware deletes the user's home directory. Revoking the token, which is the obvious first move, is exactly what sets it off.
The payload then hunts for secrets, and it casts a wide net. It takes npm and GitHub tokens, AWS, Google Cloud and Azure credentials, Docker and Kubernetes settings, Vault tokens, SSH and GPG keys, .env files, messaging app data, and the configuration files of AI tools such as Claude, Cursor, Windsurf and Zed. It also reads browser profiles and the local databases of fourteen cryptocurrency wallet extensions, which points to an operator who wants to cash in quickly.
It then spreads using the credentials it has just stolen, republishing the victim's other npm packages with itself inside, and committing those AI tool files into their repositories under a fake author with the harmless-looking message "chore: update dependencies". It encrypts everything it collects and pushes it into a new public repository the malware creates in the victim's GitHub account, labelled "Shai-Hulud: Here We Go Again", while a background process reports host and user details to iseekaigogo[.]com. That domain is hardcoded, but the malware is not tied to it, since it can also read an attacker-controlled Ethereum contract to look up a new address to send data to. Because that instruction sits on a public blockchain, the operator can switch infrastructure without publishing a new package, so blocking the known domain alone buys very little time.
Recommendations
- 01Find Every Copy of tensorlake 0.5.144 FirstRun
npm ls tensorlakeacross your projects and grep lockfiles, build logs, container images and deployed artefacts for the 0.5.144 string. Include transitive pulls and any machine that cloned or pulled tensorlakeai/tensorlake main after October 7 and ran npm install in the typescript directory. Scope before you touch anything, because the cleanup order matters here. - 02Remove the gh-token-monitor Before Revoking AnythingOn every affected host, find and delete the token monitor before a single credential is rotated. On Linux, disable and remove
gh-token-monitor.servicealong with the~/.config/gh-token-monitordirectory and the helper script in~/.local/bin. On macOS, unload and deletecom.user.gh-token-monitor.plistfrom~/Library/LaunchAgents. On Windows, delete the ONLOGON scheduled task that runsmonitor.ps1. Back up anything irreplaceable first. - 03Rotate Credentials Only After the Monitor Is GoneOnce the switch is disarmed, revoke and replace everything the malware could reach from a known-clean machine: GitHub and npm tokens, AWS, Azure and Google Cloud keys, SSH and GPG keys, Kubernetes and Vault credentials, secrets held in .env files, AI tool API keys, browser-saved passwords and any wallet material. Revoking the GitHub token while the monitor is still alive triggers the home directory wipe no matter where the revocation is performed.
- 04Pin tensorlake to 0.5.143Version 0.5.143 and earlier contain neither the preinstall hook nor the payload files. Pin to it, delete node_modules, clear the npm cache and reinstall from clean sources until a verified good release ships. Treat the six tensorlake-native 0.5.144 binary packages as part of the same tainted release and avoid them even though no payload was found inside them.
- 05Turn Off npm Lifecycle Scripts Where You CanThe entire attack hangs on a preinstall hook. Setting
ignore-scripts=truein .npmrc, or installing with--ignore-scripts, stops this class of payload before it ever runs. Apply it to CI runners and developer machines wherever your build tolerates it. - 06Block the C2 Domain and Hunt the File HashesBlock
iseekaigogo[.]comat DNS, proxy and endpoint layers, and sweep file systems for the known SHA-256 values of setup.mjs and Math_Symbol.js. Treat this as a floor rather than a fix, since the Ethereum dead drop lets the operator swap domains without shipping a new package. - 07Audit npm and GitHub Accounts for Worm SpreadLook for newly created public repositories carrying the description "Shai-Hulud: Here We Go Again", commits authored by
claude@users.noreply.github.com, package versions published under your accounts that nobody on the team recognises, unexpected personal access tokens and new GitHub Actions workflows. The worm republishes through the victim's own identity, so your account activity log is the clearest early warning. - 08Rebuild Hosts You Cannot Prove Are CleanAny workstation, build runner or server that installed 0.5.144 should be treated as fully compromised, not merely infected. Removing the dependency does not remove a persistent implant. Preserve evidence for investigation, then rebuild from trusted media and restore access to secrets only once the host is verified clean.
Indicators of Compromise (IoCs)
| Type | Value |
|---|---|
| SHA256 | 25a0735d0db7dc40e5d45ce42d9c106067e6a66e184d967cfecfab17c3bcb5ef b50a00900399ba99fb6ce1fc151519cb99d44320ef2a631f2237e1aea0ad6fec |
| Domain | iseekaigogo[.]com |
claude[@]users[.]noreply[.]github[.]com | |
| File Path | lib/setup.mjs lib/Math_Symbol.js |
| npm Package | tensorlake@0.5.144 |
| Ethereum Address | 0xb614155Fd88114d40549b259457Bcf921Df091B9 0x779f83aE56309682beDb04816c19d358c4B21040 |
MITRE ATT&CK TTPs
References & Patch Links
References
- https://socket.dev/blog/tensorlake-compromise
- https://www.endorlabs.com/learn/tensorlake-npm-package-compromised-by-shai-hulud-in-latest-software-supply-chain-attack
- https://www.stepsecurity.io/blog/tensorlake-npm-compromised-hostage-token-worm
- https://www.hivepro.com/threat-advisory/chaindrop-shai-hulud-npm-supply-chain-worm-compromises-keyv-ecosystem
What Next?
At Hive Pro, it is our mission to detect the most likely threats to your organization and to help you prevent them from happening.
