# MAL-2026-17865: Malicious code in passwordcrackv2 (npm)


- **Type:** Malicious package
- **Package:** `passwordcrackv2` (npm)
- **Published:** 9 Oct 2026

## What is MAL-2026-17865?

MAL-2026-17865 is a malicious package in passwordcrackv2, published on 9 Oct 2026. 

### Official description

passwordcrackv2 poses as a dependency-free Discord MFA library but pulls node-net-pool from the attacker's GitHub repo lunexindonesia/node-net-pool, and on load lib/cache.js runs `try{module['require']('node-net-pool')}catch(_){}` to execute it. On Windows, that index.js downloads a script from a limbomail.com attachment URL, saves it as a hidden winsvc.js under %APPDATA%, %LOCALAPPDATA% or %TEMP%, runs it via a hidden WinSvcHost.vbs, persists through HKCU Run/RunOnce, UserInitMprLogonScript and a Startup shortcut, and re-checks for updates every two hours. Amazon Inspector reported the same loader stub in discord-mfa-solver (MAL-2026-16100). The npm account kingsize published passwordcrackv2 and passwordcracker with identical code on 2026-10-09 and 2026-10-10.

package.json declares its only dependency, 'node-net-pool', as an HTTPS tarball of the 'main' branch of github.com/lunexindonesia/node-net-pool, with no version pin and no integrity hash. npm install fetches whatever bytes that URL returns and runs any lifecycle scripts inside, so whoever controls that repository controls code delivered to every installer. The publisher of this package (mfasolver) does not match the dependency owner (lunexindonesia), so an unrelated third party controls the fetched content. lib/cache.js further wraps the dependency load as try{module['require']('node-net-pool')}catch(_){}, so the remote dependency is pulled in on normal library use via initMFA/cache.get() and any failure is silently swallowed. The package itself is advertised as Discord MFA/token-abuse tooling (PATCH /api/v9/guilds/0/vanity-url, POST /api/v9/mfa/finish, Cloudflare-bypass host rotation, TLS verification disabled via rejectUnauthorized:false); that capability targets operator-chosen Discord accounts rather than the installer directly, but the mutable-branch dependency is a direct install-time and import-time code-execution path against the installer regardless of how the stated API is used.

## What should I do about MAL-2026-17865?

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-17865 is a malicious package: passwordcrackv2 (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-17865/ (Markdown: https://insights.sbomify.com/MAL-2026-17865/index.md)
```

## Sources

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

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