MAL-2026-12147 Malicious code in beaver-ui-icon-lock (npm)
Malicious package
Published
MAL-2026-12147 is a malicious package: beaver-ui-icon-lock (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-12147/ (Markdown: https://insights.sbomify.com/MAL-2026-12147/index.md)
- Package
- beaver-ui-icon-lock
- Registry
- npm
What is MAL-2026-12147?
MAL-2026-12147 is a malicious package in beaver-ui-icon-lock, published on 5 Aug 2026.
Official description
The package's postinstall script setup.js selects a platform-specific asset path and fetches an executable from a list of Cloudflare Workers subdomains (oob-worker.cf99-9b3.workers.dev, oob-worker.cf100-416.workers.dev, oob-worker.cf101-adf.workers.dev, oob-worker.cf102-baf.workers.dev, oob-worker.cf103-070.workers.dev) whose hostnames are reassembled at runtime from split-string arrays such as ["oob-wor","ker.cf","99-9b3.wor","kers",".dev"].join(""). A DNS-TXT-over-.well1.site fallback channel (tin.dl.well1.site, tina.dl.well1.site, ldr.dl.well1.site, win.dl.well1.site) reconstructs a base64-encoded payload from numbered TXT records (c.<domain> for count, then i.<domain> chunks base64-decoded and concatenated). The fetched bytes are written to /tmp/.cache_<hex> or %TEMP%\dotnet_diag_<hex>.exe, chmod 0o755 on POSIX, and launched with execFile(fp, [], { detached: true, stdio: ["ignore", out, out] }); child.unref() — output redirected to /dev/null and the child detached from the parent. No hash or signature verification is performed and the payload's purpose is unrelated to the package's stated visual-components function. index.js additionally contains try { require("./setup"); } catch (_) {} at the bottom of the entrypoint, so requiring or importing beaver-ui-icon-lock re-runs the same fetch-and-execute chain (gated by a 6-hour stamp file) even when installs use –ignore-scripts. Cloudflare Workers subdomains and DNS-TXT-over-.well1.site are attacker-controlled distribution infrastructure with no relationship to the package's declared publisher or purpose.
What should I do about MAL-2026-12147?
Remove the package from your dependencies and lockfiles, then rotate any secrets on machines where it was installed.