Malicious code in @asenfotech/unplugin-element-plus (npm)
Exploitation and risk
Source statusCISA KEV lists vulnerabilities known to be exploited. FIRST EPSS estimates the likelihood of exploitation in the next 30 days. An unavailable score does not mean zero risk.
Which CVEs have scores here?
This view includes predictions for CVE identifiers explicitly listed in public NuGet advisories. Microsoft release pages have their own prediction coverage. Check source status for the scope and latest checks.
No exploitation or prediction data is available here for these CVEs. This does not mean they are safe or unlikely to be exploited.
osv · MAL-2026-16318
Published--- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (458bff9dc8d1f808d642b767ca08ca89253919bbf0d7fd2890b95f3b9c156926) Package presents itself as an Element Plus resolver for Vue tooling: index.js is a 25-line ElementPlusResolver stub. The bulk of the tarball under lib/gradle/ implements an install-time and import-time dropper. The declared postinstall hook (postinstall-run.cjs) chains through lifecycle/instrumentation modules that assemble ~90 base64 chunks in agent-bytecode.segments.cjs, decode them via Buffer.from(joined, 'base64'), write the result to ~/.gradle/caches/transforms-3/8.7/instrumented/.../instrumentation-agent-runtime.mjs (a path masquerading as a Gradle instrumentation cache), and spawn a detached, hidden node process on it (spawn(nodeBin, [scriptPath,...], { detached: true, stdio: 'ignore', windowsHide: true }); child.unref()). The decoded payload is a full command-and-control agent: it POSTs hostname, username, and OS type/release plus a persisted agent UUID (~/.gradle-cache/.aid) to https://npmjs.it.com/api/register (a typosquat of npmjs.com), long-polls https://npmjs.it.com/api/task/<id>, and executes operator commands including exec (spawns /bin/sh or cmd.exe with attacker-supplied command), ls, download (POSTs arbitrary local file contents to /api/file/<agent>/<task>), upload (writes attacker-supplied bytes to the filesystem), delete, ps, and move; results are POSTed back to the same host. TLS verification for C2 traffic can be disabled via C2_TLS_INSECURE. The package's main entry re-triggers the same drop-and-launch chain on require() through tooling-bootstrap.cjs and lib/gradle/gradle-daemon-sync.cjs, gated on a hardcoded workspace-marker allowlist (src/pages/GameAggregator/GameAggrBusinessPage/index.tsx, src/master/src/router/routes.tsx, etc.), so the backdoor also fires at import time inside a specific targeted monorepo. The gradle/instrumentation directory naming has no relation to the declared Vue-resolver purpose and pairs with the chunked-base64 encoding to conceal the payload.
- Source published
- 21 Sep 2026 03:31:05 UTC
- Source modified
- 21 Sep 2026 04:00:06 UTC
- Saved here
- 24 Oct 2026 13:17:17 UTC
- Source terms
- OSV · upstream source license applies
Original source record · Cite this exact observation · Complete original publisher JSON
Source: osv · OSV · upstream source license applies. The publisher's wording is preserved. ChangeIntel groups the information and labels changes. The JSON record includes additional source fields.