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


- **Type:** Malicious package
- **Package:** `@webapp-shared/login-vmok` (npm)
- **Published:** 27 Oct 2026

## 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.

## Fix prompt for AI coding agents

```text
MAL-2026-18356 is a malicious package: @webapp-shared/login-vmok (npm). Every version was published to cause harm.

Task:
1. Search this repository's dependency manifests and lockfiles for the package, including transitive dependencies.
2. If it is present, remove it, regenerate the lockfile with the project's package manager, and replace whatever it was used for.
3. List any CI runners, developer machines or containers that installed it, so their secrets can be rotated.
4. If the package is not used anywhere, say so and change nothing.

Reference: https://insights.sbomify.com/MAL-2026-18356/ (Markdown: https://insights.sbomify.com/MAL-2026-18356/index.md)
```

## Sources

- OSV: https://osv.dev/vulnerability/MAL-2026-18356

---
From sbomify Insights: https://insights.sbomify.com/MAL-2026-18356/
Summaries are generated and may contain mistakes; the official description above is the record.
