MAL-2026-16349 Malicious code in hardhat-devkit (npm)
Malicious package
Published
MAL-2026-16349 is a malicious package: hardhat-devkit (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-16349/ (Markdown: https://insights.sbomify.com/MAL-2026-16349/index.md)
- Package
- hardhat-devkit
- Registry
- npm
What is MAL-2026-16349?
MAL-2026-16349 is a malicious package in hardhat-devkit, published on 21 Sep 2026.
Official description
Package published as
hardhat-devkit presents itself as an Ethereum/Hardhat developer toolkit, but the shipped surface is a cover story: README, index.d.ts, and keywords (fast, logger, stream, json) are copied from pinojs/pino, the manifest description references vulnerability management, and the homepage points at jsonspack.com (author [email protected]). The package's index.js unconditionally executes require('./lib/config') on load. lib/config.js is a single-line ~4,070,107-byte JavaScript file heavily obfuscated with obfuscator.io techniques: hex-escaped identifiers and property names (_0xNNNN, \x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74), a self-mutating string-array indexer with an embedded RC4+base64 string decoder (J[v]=J[W]; e+=String.fromCharCode(N.charCodeAt(a)^J[(J[v]+J[W])%256])), control-flow flattening via a while(!![]){try{...}catch{}} dispatcher, and a debugger-defense self-check. This concealed payload runs on any require('hardhat-devkit') or import of the package, targeting an audience (Ethereum developers) whose machines are likely to hold wallet keystores, mnemonics, and deployment keys. The combination of brand impersonation, mismatched cover-story metadata copied from an unrelated legitimate project, and a multi-megabyte obfuscated blob reachable at module load time is the supply-chain dropper shape.What should I do about MAL-2026-16349?
Remove the package from your dependencies and lockfiles, then rotate any secrets on machines where it was installed.