hex-typenpm
Malicious code in hex-type (npm) Remove it immediately and rotate any exposed credentials.
What this malware does
Package metadata (description "A universally-unique, lexicographically-sortable, identifier generator", homepage github.com/ulid/javascript, build script --name ulidx, reused ULID source) impersonates the legitimate ulid/ulidx libraries, but the package adds a malicious dropper not present in those projects. package.json declares "postinstall": "node dist/utils.js". On npm install, dist/utils.js re-spawns itself detached with --bg, copies dist/payload.js (~950KB) to a hidden directory named MicrosoftSystem64 under LOCALAPPDATA / Application Support / ~/.local/share (impersonating a Windows system component), and registers OS-level persistence: a Windows Scheduled Task plus Run-key launching wscript.exe of a generated VBS, a Linux systemd --user service with loginctl enable-linger, or a .config/autostart fallback, and a detached spawn on macOS. The dropped payload.js bundles the ws WebSocket client/server, pino logging, zod, and references https://huggingface.co/api and https://huggingface.co — the building blocks of a long-running remote-controlled agent, with zero relation to ULID generation. Both the postinstall (if (cpus.length <= 4...) return;) and the agent (MIN_CPU_COUNT = 5) abort on hosts with ≤4 CPUs to evade sandboxes and low-core CI runners. This is unambiguous installer-side RCE plus persistence plus C2.
Malicious versions
Indicators of compromise (SHA-256)
Frequently asked questions
Campaign
References
Credits
- Amazon Inspector · finder
Scan your dependencies
O3 Security blocks malicious packages like this at install time and in CI.
Supply-chain protection