Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
Malicious package

@emcd-vue/authnpm

Malicious code in @emcd-vue/auth (npm) Remove it immediately and rotate any exposed credentials.

MAL-2026-5163
Immediate action
Remove the package, then rotate any secrets the build/runtime could reach.
npm uninstall @emcd-vue/auth

What this malware does

Part of a coordinated multi-package supply-chain attack impersonating EMCD (emcd.io), a legitimate Russian cryptocurrency exchange and mining pool. The attacker registered the @emcd-vue npm scope to pose as an internal Vue.js front-end tooling package from "EMCD Platform Engineering." The package contains no functional library code — the entire package is a delivery vehicle for a multi-stage dropper embedded in a 137.5 KB single-line obfuscated postinstall hook (JScrambler/WaCk-style; 811-element encoded string array).

Trigger: scripts.postinstallscripts/postinstall.js

Execution flow:

  • Checks EMCD_VUE_NO_TELEMETRY env var as a kill-switch (README misleadingly documents a different, non-functional kill-switch name)
  • Computes a per-host/project dedup key to execute only once
  • Detects platform (linux-x64, darwin-arm64, win)
  • Downloads platform-specific second-stage: GET https://oob.moika.tech/payload/{platform} with X-Secret: l95HdDaz3kQx1Zsg3WxH6HvKANf51RY1
  • Writes payload to ~/.emcd-vue_init.js (dot-prefixed hidden file)
  • Spawns payload as a detached, unref'd process — persists after npm exits
  • Beacons installation metadata to https://oob.moika.tech/report

@emcd-vue/[email protected] is a hollow shell package whose only functional content is a malicious postinstall script. package.json advertises this as an 'Internal @wildberries/service-router package' (a dependency-confusion lure targeting builds that expect an internal @wildberries/* mirror), but dist/index.js is a one-line re-export module.exports = require('../src/index.js') pointing at a path that does not exist in the tarball — the package provides no library functionality. scripts/postinstall.js is heavily obfuscated using an obfuscator.io-style shuffled string array with RC4 + base64 decoders and hex-encoded property accesses; critical strings (host, URL path, secret header) are assembled only at runtime via atob(...)+atob(...) concatenation to evade static inspection. On npm install the script issues an HTTPS GET with a custom X-Secret header to the runtime-assembled URL, writes the response buffer to a randomly-named.js file under os.tmpdir(), and spawns it with process.execPath (Node) detached, stdio:'ignore', windowsHide:true, then .unref()s the child so it survives the installer. Host-identifying data is exfiltrated as part of the fetch (hostname-keyed string selection via os.hostname(), CWD walk-up via process.cwd(), Node version check), and the spawned child receives the installer's full process.env plus additional atob-decoded secret values, handing any environment-resident credentials to the attacker-controlled payload.

Malicious versions

1 flagged
6.4.5

Indicators of compromise (SHA-256)

600739f96b23cdddf4ff3f36734e4db70832c7fa065fec5f2e019b7951230255
f8bc285b34b9a2e8abc8e2a86a7a0c8738823d504bbc7e30a4e56b1ec9810162

Frequently asked questions

No. @emcd-vue/auth on npm has been identified as a malicious package (version 6.4.5 flagged). It should be removed immediately — do not install or keep it in your dependency tree.

Campaign

IN-MAL-2026-005916IN-MAL-2026-005915

References

Credits

  • Amazon Inspector · finder
  • SafeDep · finder

Scan your dependencies

O3 Security blocks malicious packages like this at install time and in CI.

Supply-chain protection
@emcd-vue/auth (npm) malicious package — MAL-2026-5163 | O3 Security