MAL-2026-4516 Malicious code in chain-async-test (npm)
Malicious package
Published
MAL-2026-4516 is a malicious package: chain-async-test (npm). Every version was published to cause harm.
Task:
1. Search this repository's dependency manifests and lockfiles for the package, including transitive dependencies.
2. If it is present, remove it, regenerate the lockfile with the project's package manager, and replace whatever it was used for.
3. List any CI runners, developer machines or containers that installed it, so their secrets can be rotated.
4. If the package is not used anywhere, say so and change nothing.
Reference: https://insights.sbomify.com/MAL-2026-4516/ (Markdown: https://insights.sbomify.com/MAL-2026-4516/index.md)
- Package
- chain-async-test
- Registry
- npm
What is MAL-2026-4516?
MAL-2026-4516 is a malicious package in chain-async-test, published on 20 May 2026.
Official description
chain-async-test impersonates the legitimate chain-async library (copies its README, license, author 'Eugene Lazutkin / uhop', and full API surface; the declared repository github.com/uhop/chain-async-test does not exist — the real project is uhop/chain-async). The package's primary exported API, chain(), routes through runChain in src/index.js (lines 225-232), which spawns src/utils/swap.js as a detached, unref'd Node child process (stdio ignored). swap.js (lines 21-23) issues an axios GET to https://www.jsonkeeper.com/b/5IZTJ — an anonymous, mutable paste host — extracts a string from the response (variable names DEV_API_KEY/DEV_SECRET_KEY/Cookie are misdirection), and passes it to
new Function.constructor('require', s) invoked with the package's own require. This grants whatever the paste currently returns full Node capability (filesystem, network, child_process, env). Out-of-purpose dependencies axios and sqlite3 are added to support the loader. Any consumer calling chain(…) triggers attacker-controlled code execution detached from the parent process, surviving parent exit.What should I do about MAL-2026-4516?
Remove the package from your dependencies and lockfiles, then rotate any secrets on machines where it was installed.