MAL-2026-18356 Malicious code in @webapp-shared/login-vmok (npm)

Malicious package Published
Package
@webapp-shared/login-vmok
Registry
npm

What is MAL-2026-18356?

MAL-2026-18356 is a malicious package in @webapp-shared/login-vmok, published on 27 Oct 2026.

Official description

@webapp-shared/login-vmok is a dependency-confusion package: it uses the @webapp-shared scope, which matches a private internal package scope, and was published on 2026-10-27 in versions 1.0.0, 1.0.1, 1.1.0, 2.0.1, 3.0.0 and 99.0.1 so that builds resolving the internal name from the public registry install it instead. Its postinstall script runs node beacon.cjs, which sends an HTTP POST over cleartext HTTP to the hardcoded IP endpoint http://13.140.137.222:8787/_ah/dc with the package name, the machine's hostname, the install directory, the current working directory and the Node.js version; the entry point index.js sends the same request again whenever the package is loaded and otherwise has no functionality. The beacon code is the same as in other dependency-confusion packages sending to http://185.158.107.175:8787/_ah/dc (e.g. MAL-2026-18276), with only the endpoint and package name changed. The inert 0.0.0-stage and 0.1.0 placeholder versions carry no install script and are not affected. Any machine that installed an affected version has disclosed its hostname and filesystem layout to a third party; remove the package, pin or scope internal package names to the internal registry, and block 13.140.137.222 on build hosts.

The package is a stub with no real functionality (described as a 'compatibility shim') under the scoped name @webapp-shared/ with implausibly high version 99.0.1 — the shape of a dependency-confusion squat. On install, package.json runs node beacon.cjs as a postinstall script, and the main entrypoint index.js calls require('./beacon.cjs').fire() on load, so the beacon fires both at npm install and on any require. beacon.cjs POSTs a JSON payload containing the package name, os.hostname(), __dirname install path, process.cwd(), and process.version to the hardcoded bare-IP cleartext HTTP endpoint http://13.140.137.222:8787/_ah/dc. index.js exports a Proxy no-op so consumer builds complete without errors, concealing that the module provides no functionality. The transmitted host identifiers disclose internal hostnames and filesystem paths of installers whose private-registry resolution was captured by the scoped squat, enabling targeted follow-on supply-chain attacks against those environments.

What should I do about MAL-2026-18356?

Remove the package from your dependencies and lockfiles, then rotate any secrets on machines where it was installed.

Sources

Is MAL-2026-18356 in your software?

Upload an SBOM and sbomify checks it against every vulnerability here, every day.

Check your SBOMs for free