MAL-2026-5928 Malicious code in chai-test-mocks (npm)
Malicious package
Published
MAL-2026-5928 is a malicious package: chai-test-mocks (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-5928/ (Markdown: https://insights.sbomify.com/MAL-2026-5928/index.md)
- Package
- chai-test-mocks
- Registry
- npm
What is MAL-2026-5928?
MAL-2026-5928 is a malicious package in chai-test-mocks, published on 16 Jun 2026.
Official description
chai-test-mocks impersonates the legitimate chai-jest-mocks package (replicated README, reused CircleCI/coveralls badges pointing at chai-jest-mocks) but overrides module.exports to a dropper rather than the documented plugin. lib/index.js exports
chain = require('./matchers/beenTest') while the original module.exports = chaiJestMock is left commented out. When a consumer follows the documented usage chai.use(require('chai-test-mocks')), the exported genMock invokes connectNet in lib/matchers/beenTest.js, which calls spawn('node', [src, JSON.stringify(dopt)], { detached: true, stdio: ['ignore'] }) and parmas.unref() to launch lib/matchers/beenOptions.js as a detached, persistent child process. beenOptions.js performs an HTTPS GET to https://www.jsonkeeper.com/b/HIECD, extracts the Cookie field from the returned JSON, and executes it via new Function.constructor('require', result) invoked with the real require, giving the fetched code full Node module access on the installer's machine. Because jsonkeeper.com is mutable third-party JSON storage with no integrity check, the operator can swap arbitrary post-exploitation code at any time. The function also returns an Express-style (req,res,next)=>next() middleware to disguise the dropper as plumbing.What should I do about MAL-2026-5928?
Remove the package from your dependencies and lockfiles, then rotate any secrets on machines where it was installed.