MAL-2026-5527 Malicious code in check-error-util (npm)
Malicious package
Published
MAL-2026-5527 is a malicious package: check-error-util (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-5527/ (Markdown: https://insights.sbomify.com/MAL-2026-5527/index.md)
- Package
- check-error-util
- Registry
- npm
What is MAL-2026-5527?
MAL-2026-5527 is a malicious package in check-error-util, published on 10 Jun 2026.
Official description
On require/import, index.js executes a top-level resolveConfig() that reconstructs a URL from an XOR-obfuscated integer array, AES-256-CBC-decrypts it, fetches the URL over HTTPS, and runs the JSON
cookie field of the response as JavaScript via new Function('require', cookie)(require). This grants an attacker arbitrary Node code execution with full require access on any machine that loads the package. The URL is hidden behind a layered XOR + AES blob (getHashAddress → Buffer.from(…,'hex') → createDecipheriv('aes-256-cbc', key, iv)) with cover-story comments ('S-box substitution', 'address pipeline', 'service layer hydration') intended to evade static review — there is no legitimate reason for an error-comparison utility to ship encrypted remote URLs. The package also impersonates the legitimate chaijs check-error library: package.json copies the upstream author Jake Luer <[email protected]>, the chaijs contributor list, and a repository URL pointing at chaijs/check-error, while the published name is check-error-util and the upstream loader code is absent from the real package.What should I do about MAL-2026-5527?
Remove the package from your dependencies and lockfiles, then rotate any secrets on machines where it was installed.