MSC-2026-13025
Published:October 23, 2026
Updated:October 28, 2026
Fourteen npm packages published from throwaway accounts in the testmetest campaign install a self-propagating, Shai-Hulud-derived worm. Most of them use a command expansion in binding.gyp that makes node-gyp execute an obfuscated index.js loader at install time; the payload steals SSH keys, registry, cloud and CI credentials, .env files and browser logins, republishes itself through the victim's package-registry accounts, spreads over SSH, and deletes the home directory when its stolen GitHub token is rejected. Three later packages (@iobandamwer/cache-helper, @iobandamwer/native-helper and path-stream-utils-testmetest) ship a precompiled native addon instead: a postinstall hook loads it, it XOR-decrypts a hidden .napi_cache file into JavaScript and runs it detached, and it stays dormant on CI runners, containers, small VMs and machines with a debugger or analysis tool attached.
Related Resources (1)
Do you need more information?
Contact UsCVSS v4
Base Score:
9.4
Attack Vector
NETWORK
Attack Complexity
LOW
Attack Requirements
NONE
Privileges Required
NONE
User Interaction
PASSIVE
Vulnerable System Confidentiality
HIGH
Vulnerable System Integrity
HIGH
Vulnerable System Availability
HIGH
Subsequent System Confidentiality
HIGH
Subsequent System Integrity
HIGH
Subsequent System Availability
HIGH
CVSS v3
Base Score:
9.6
Attack Vector
NETWORK
Attack Complexity
LOW
Privileges Required
NONE
User Interaction
REQUIRED
Scope
CHANGED
Confidentiality
HIGH
Integrity
HIGH
Availability
HIGH
Weakness Type (CWE)
Embedded Malicious Code