MAL-2026-17865

    Dashboard / Malicious Package / MAL-2026-17865

    MAL-2026-17865

    Published: 9 Oct 2026Last Modified: 29 Oct 2026

    Summary: Malicious code in passwordcrackv2 (npm)

    Details: 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. Source: amazon-inspector (5af882b3d847b17692c91b05e8efb4bf9947a0ec3b1ea5e04bb8681fc73f135c) 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.

    Affected packages

    Package

    Name: passwordcrackv2

    Purl: pkg:npm/passwordcrackv2

    Affected ranges

    Type: SEMVER

    Events:

    Introduced- 0
    Fixed -None

    Affected versions

    1.1.1
    1.1.0