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

pxnpmnpm

Advisory published Updated

pxnpm is a confirmed malicious npm package (MAL-2026-17710) that steals credentials and exfiltrates sensitive data (malicious versions 7.0.0, 7.0.0-beta.6, 7.0.0-beta.8…). Do not install it — remove it immediately and rotate any exposed credentials.

Malicious code in pxnpm (npm)

MAL-2026-17710
Immediate action
Remove the package, then rotate any secrets the build/runtime could reach.
npm uninstall pxnpm

What this malware does

pxnpm 7.0.0-beta.6, 7.0.0-beta.8 and 7.0.0 (published 2026-10-06 by user nfjbill) are a 10-file, 16 KB launcher for a native executable that is not contained in the package. The postinstall script (bin/install.cjs) calls ensureNative() in dist/download.cjs, which downloads a 17-21 MB Brotli archive for the current platform from a non-npm host, https://registry-pxnpm.rdc.nfjbill.ren:20021/__static/srv/downloads/pxnpm/<version>/<platform>-<sha256>.br, decompresses it into a 52-72 MB executable under ~/.cache/pxnpm/native/<platform>/<sha256>/, sets mode 0755, and the launcher (dist/launcher.cjs line 54) later runs it with child_process.spawn. The manifest (dist/native-manifest.json) sets networkPolicy 'fixed', so the environment variables that would let a user supply a reviewed binary or a different download location are ignored; the archive and the executable are verified only against hashes shipped in the same package.

When run, dist/launcher.cjs prepare() deletes every registry and proxy setting from the user's environment (npm_config_registry, scoped registries, http(s)_proxy, no_proxy and the pnpm/pxnpm equivalents), rejects --registry and --proxy flags, and forces PXNPM_CONFIG_REGISTRY to https://registry-pxnpm.rdc.nfjbill.ren:20021/ and PXNPM_CONFIG_PROXY, HTTPS_PROXY and HTTP_PROXY to an authenticated proxy URL on the same host, port 20022 (a gost proxy), that is embedded in the file as a base64 string with the comment 'Filled only in the release staging directory; never store credentials in Git'. All package traffic of a user of this public package is therefore routed through the author's host, which can observe and alter it.

Nothing in the package name, the one-line README or the install output discloses that an executable will be fetched from a private host or that registry and proxy settings will be replaced. The JavaScript itself contains no data collection and no obfuscation beyond the base64 string. At the time of this report the download URL returns a 430-byte npm registry JSON document instead of the archive, so installation from outside the author's network fails at the checksum step and the executable could not be examined; its behavior is unknown. The same host is the hard-coded endpoint of yakuza0 2.23.40 by the same author (MAL-2026-13605).

Trigger: on install (postinstall) and on every run. Type: silent install-time download and execution of an unreviewable binary from a private host, with hijacking of registry and proxy settings.

pxnpm advertises itself as a pnpm-compatible package manager but hardcodes its npm registry to https://registry-pxnpm.rdc.nfjbill.ren:20021/ via PXNPM_CONFIG_REGISTRY, strips the installer's own npm/pnpm registry and proxy environment variables and configuration keys, and throws 'external network flags are not accepted' if the user passes --registry or --proxy. Every dependency resolution performed with this tool, for every project the installer runs it against, is served by that author-controlled host, so the operator of that host chooses the exact bytes that resolve for any package name — a registry-hijack / dependency-confusion mechanism that lets arbitrary attacker-controlled code be installed in place of real npm packages. In addition, launcher.cjs ships a base64-encoded string that decodes to https://pn:[email protected]:20022 and injects it as PXNPM_CONFIG_PROXY / HTTP_PROXY / HTTPS_PROXY for the native engine, with NO_PROXY scoped only to the author's own host, so all remaining HTTP(S) traffic the package manager performs transits an author-controlled proxy with hardcoded credentials, exposing any auth tokens and scoped credentials from the installer's.npmrc that would normally go to private registries. The base64 wrapping conceals the destination URL and credentials from casual inspection of the source.

Malicious versions

5 flagged
7.0.07.0.0-beta.67.0.0-beta.87.0.17.0.2

Indicators of compromise (SHA-256)

c9fb312469a49a3b9c5156456aaf5f88836b2323c58502287481517a688a4af6

Detection & response playbook

Credential / info stealer
  1. Find it

    Search your lockfiles and build artifacts for pxnpm (5 malicious versions).

  2. If you installed it — respond

    pxnpm is built to steal secrets, so assume every credential the build or runtime could read is compromised. Remove it from your project and lockfile, then rotate ALL exposed secrets — npm/registry tokens, cloud keys, CI/CD secrets, SSH keys, and any .env values — from a known-clean machine. Audit logs for unauthorized use of those credentials.

  3. Did it already run?

    If pxnpm was installed, its post-install payload may already have run. Removing the package does not undo that — check outbound connections and credential use from the install window onward.

Frequently asked questions

No. pxnpm on npm has been identified as a malicious package (versions 7.0.0, 7.0.0-beta.6, 7.0.0-beta.8, 7.0.1, 7.0.2 flagged). It should be removed immediately — do not install or keep it in your dependency tree.

Campaign

IN-MAL-2026-021281

References

Credits

  • Amazon Inspector · finder
  • Eunsoo Kim · finder

Detect & block this

O3 blocks pxnpm-class packages before install and in CI — and if it already ran, its runtime egress monitoring catches the credential exfiltration and severs the channel.

Explore

pxnpm (npm) malicious package — MAL-2026-17710 | O3 Security