MAL-2026-4707
Vulnerability from ossf_malicious_packages
-= Per source details. Do not edit below this line.=-
Source: amazon-inspector (c320320435358c109567ef3776ced079a2196b831b583b66c87323ddf402bae9)
Package name and README impersonate the official @vue/compiler-sfc package; index.js merely re-exports it. The npm postinstall hook runs postinstall-run.cjs which invokes tooling-bootstrap.cjs. tooling-bootstrap.cjs concatenates a fragmented base64 array (BOOTSTRAP_B64), decodes it, writes the resulting JS to ~/.gradle/daemon/tooling-api-runtime.mjs (a Gradle-daemon cover name), and detached-spawns it with the user's node binary (spawn(nodeBin, args, { detached: true, stdio: 'ignore', windowsHide: true }); child.unref()). Activation is gated by victim-project sentinels (ALLOWED_PROJECT_SENTINELS includes 'src/businessCom/BLinker.vue' and 'src/api/gameCategorie.js'), so the RAT only deploys inside the intended victim's repo — evading sandboxed install scanners. The decoded payload is a long-running C2 agent that POSTs hostname, OS user, and OS info to https://npmjs.it.com/api/register, persists an agent id at ~/.gradle-cache/.aid, polls https://npmjs.it.com/api/task/, and dispatches operator-issued ops: exec (spawn /bin/sh or cmd.exe with attacker-supplied command), ls, download (read arbitrary path and POST bytes to /api/file//), upload (write attacker-supplied base64 to arbitrary path), delete (fs.rmSync), move, ps. C2 defaults to https://npmjs.it.com/ (a typosquat of npmjs.com) and TLS verification can be disabled via C2_TLS_INSECURE. This is a fully-featured backdoor enabling credential theft (~/.aws, ~/.ssh,.env,.npmrc), arbitrary code execution, and persistent remote control of any machine where install hits the targeted project.
{
"affected": [
{
"database_specific": {
"cwes": [
{
"cweId": "CWE-506",
"description": "The product contains code that appears to be malicious in nature.",
"name": "Embedded Malicious Code"
},
{
"cweId": "CWE-506",
"description": "The product contains code that appears to be malicious in nature.",
"name": "Embedded Malicious Code"
}
],
"indicators": {
"evidence_files": [
{
"path": "tooling-bootstrap.cjs",
"sha256": "611d046e90549a66bed104e3039df93ff33a7618e5c8bcc285d788c6095f7620",
"tlsh": "9e6281a6cc9b2d448350461ab5ce28c9284e87833d967dddb6ee82dc6f4e42f01f51ed"
}
],
"package_integrity": [
{
"filename": "vue-compiler-sfc-plugin-3.5.25.tgz",
"hashes": {
"sha1": "0f1e240ae86d31a345fdc4721855ff55717ad728",
"sha512_sri": "sha512-70fyCWXaP91GGi3Cs13ZuA9eoOSr3dfdWeddGwM8BiqWQqMXW6ldnyR4ZC8KD8en3sgWhEiCTh6TzrHWghi4AQ=="
}
}
]
}
},
"package": {
"ecosystem": "npm",
"name": "vue-compiler-sfc-plugin"
},
"versions": [
"3.5.25",
"3.5.26"
]
}
],
"credits": [
{
"contact": [
"actran@amazon.com"
],
"name": "Amazon Inspector",
"type": "FINDER"
}
],
"database_specific": {
"malicious-packages-origins": [
{
"id": "IN-MAL-2026-004696",
"import_time": "2026-05-26T05:53:06.374150363Z",
"modified_time": "2026-05-25T15:12:28Z",
"sha256": "c320320435358c109567ef3776ced079a2196b831b583b66c87323ddf402bae9",
"source": "amazon-inspector",
"versions": [
"3.5.25"
]
},
{
"id": "IN-MAL-2026-004915",
"import_time": "2026-05-26T15:07:42.35599729Z",
"modified_time": "2026-05-26T14:14:28Z",
"sha256": "ccae84b1e69608b53868c4776df642dd816aa47b9110e8958aa03fcb6899f5e8",
"source": "amazon-inspector",
"versions": [
"3.5.26"
]
}
]
},
"details": "\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (c320320435358c109567ef3776ced079a2196b831b583b66c87323ddf402bae9)\nPackage name and README impersonate the official @vue/compiler-sfc package; index.js merely re-exports it. The npm postinstall hook runs postinstall-run.cjs which invokes tooling-bootstrap.cjs. tooling-bootstrap.cjs concatenates a fragmented base64 array (BOOTSTRAP_B64), decodes it, writes the resulting JS to ~/.gradle/daemon/tooling-api-runtime.mjs (a Gradle-daemon cover name), and detached-spawns it with the user\u0027s node binary (spawn(nodeBin, args, { detached: true, stdio: \u0027ignore\u0027, windowsHide: true }); child.unref()). Activation is gated by victim-project sentinels (ALLOWED_PROJECT_SENTINELS includes \u0027src/businessCom/BLinker.vue\u0027 and \u0027src/api/gameCategorie.js\u0027), so the RAT only deploys inside the intended victim\u0027s repo \u2014 evading sandboxed install scanners. The decoded payload is a long-running C2 agent that POSTs hostname, OS user, and OS info to https://npmjs.it.com/api/register, persists an agent id at ~/.gradle-cache/.aid, polls https://npmjs.it.com/api/task/\u003cagent\u003e, and dispatches operator-issued ops: exec (spawn /bin/sh or cmd.exe with attacker-supplied command), ls, download (read arbitrary path and POST bytes to /api/file/\u003cagent\u003e/\u003ctask\u003e), upload (write attacker-supplied base64 to arbitrary path), delete (fs.rmSync), move, ps. C2 defaults to https://npmjs.it.com/ (a typosquat of npmjs.com) and TLS verification can be disabled via C2_TLS_INSECURE. This is a fully-featured backdoor enabling credential theft (~/.aws, ~/.ssh,.env,.npmrc), arbitrary code execution, and persistent remote control of any machine where install hits the targeted project.\n",
"id": "MAL-2026-4707",
"modified": "2026-05-26T15:09:38Z",
"published": "2026-05-25T15:12:28Z",
"references": [
{
"type": "PACKAGE",
"url": "https://www.npmjs.com/package/vue-compiler-sfc-plugin/v/3.5.25"
},
{
"type": "PACKAGE",
"url": "https://www.npmjs.com/package/vue-compiler-sfc-plugin/v/3.5.26"
}
],
"schema_version": "1.7.4",
"summary": "Malicious code in vue-compiler-sfc-plugin (npm)"
}
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.