MAL-2026-18356

    Dashboard / Malicious Package / MAL-2026-18356

    MAL-2026-18356

    Published: 27 Oct 2026Last Modified: 29 Oct 2026

    Summary: Malicious code in @webapp-shared/login-vmok (npm)

    Details: @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. Source: amazon-inspector (038927c39e3df3caeb1629368073886842fe7abed1413e3ac6d8a215c9cd68bf) 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.

    Affected packages

    Package

    Name: @webapp-shared/login-vmok

    Purl: pkg:npm/%40webapp-shared/login-vmok

    Affected ranges

    Type: N/A

    Events:

    Introduced- None
    Fixed -None

    Affected versions

    1.0.0
    1.0.1