MAL-2026-16331 Malicious code in element-plus-vite-cli (npm)
Malicious package
Published
MAL-2026-16331 is a malicious package: element-plus-vite-cli (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-16331/ (Markdown: https://insights.sbomify.com/MAL-2026-16331/index.md)
- Package
- element-plus-vite-cli
- Registry
- npm
What is MAL-2026-16331?
MAL-2026-16331 is a malicious package in element-plus-vite-cli, published on 21 Sep 2026.
Official description
On load (main index.js → bin/cli.js), the package invokes tooling-bootstrap.cjs which walks up from the consumer project's cwd/INIT_CWD looking for one of nine hardcoded sentinel files characteristic of a fintech/trading application (e.g. src/api/AITrading.js, src/api/agentShot.ts, src/pages/ETF-quant-trading/history.vue, src/views/orderCenter/orderCenter.vue). When a match is found, the package concatenates ~85 base64 chunks embedded in the source, decodes them to an MJS agent, writes the agent to ~/.gradle-cache/tooling-api-runtime.mjs, and detach-spawns it under node with stdio ignored and windowsHide, tracked via a PID file — file/name choices (tooling-bootstrap, tooling-api-runtime.mjs,.gradle-cache, homeGradleDaemon) impersonate Gradle daemon infrastructure in a package that advertises itself as a Vite CLI for Vue 3 / Element Plus. The dropped agent registers to https://npmjs.it.com/api/register with os.hostname(), os.userInfo().username, and os.type()/os.release() plus a persistent UUID cached at ~/.gradle-cache/.aid, then long-polls /api/task/<agent_id> and executes attacker-supplied operations: exec (spawn cmd.exe /c or /bin/sh -c on attacker-supplied command strings), ls, download (exfiltrate arbitrary files to /api/file/…), upload (write base64 to arbitrary paths), delete (rm -rf), ps, and move, POSTing results to /api/result/<agent_id>. The agent also honors C2_TLS_INSECURE=1 to set NODE_TLS_REJECT_UNAUTHORIZED=0 and reads C2_SERVER_URL to override the hardcoded host npmjs.it.com (a typosquat lookalike for npmjs.com).
What should I do about MAL-2026-16331?
Remove the package from your dependencies and lockfiles, then rotate any secrets on machines where it was installed.