Campaign Open Source 2025-09-08 · 1 day ·Financial Exploitation

Qix phishing shipped wallet drainers

The Qix npm phishing campaign began with a fake npmjs.help login flow and poisoned at least 18 heavily depended-on JavaScript packages on September 8, 2025. Follow-on reporting tied the same wave to DuckDB, Prebid, proto-tinker-wc, and @coveops/abi.

Story

The September 2025 npm phishing wave was ordinary at the front door and enormous behind it. A maintainer received a fake npm support message from npmjs.help, followed the credential-reset flow, and effectively handed attackers publishing access. Within hours, malicious releases appeared under some of the most common JavaScript utility names.

The first public set centered on packages maintained by Josh Junon, including debug, chalk, ansi-regex, strip-ansi, wrap-ansi, and related color and terminal helpers. The packages were small, but their reach was not. Public reporting put their aggregate weekly download volume around two billion, with the malicious versions removed after a short exposure window.

The injected code was aimed at cryptocurrency theft rather than generic host compromise. It hid in client-side bundles, hooked browser and web3 APIs, watched for transaction material across Ethereum, Bitcoin, Solana, Tron, and other chains, and replaced destination addresses with attacker-controlled lookalikes before the user signed.

That payload choice made the blast radius more subtle than a server-side credential stealer. A compromised package could be installed in a build environment, bundled into browser code, and only become dangerous when a user later interacted with a wallet or transaction flow.

Follow-on reporting tied additional package surfaces to the same campaign, including DuckDB packages, Prebid packages, proto-tinker-wc, and @coveops/abi. Those are kept as separate attack records where the maintainer, project, or distribution boundary differs from the original Qix account.

The campaign record therefore carries the shared phishing path and wallet-drainer mechanics, while the leaf records preserve the exact package coordinates defenders need for lockfile, cache, mirror, and deployed-bundle searches.

Linked Attacks

2025

Top vector Package registry Top payload point Distribution
5 entries 5 open source 0 proprietary
September 5 entries
@coveops/abi shipped Qix wallet drainer

JFrog listed @coveops/abi 2.0.1 among the September 2025 npm phishing follow-on packages. The malicious release carried the same browser wallet-drainer family as the wider Qix campaign.

proto-tinker-wc shipped Qix wallet drainer

proto-tinker-wc 0.1.87 was reported with the same September 2025 npm wallet-drainer campaign. The malicious npm release put browser-side transaction manipulation code into a legitimate package path.

Campaign Context

Actor
Third Party
Attribution
Group
Cause
Unknown

Affected Packages

Notes

  • The Register reported the initial 18-package Qix set, while JFrog and later advisories reported additional package surfaces including DuckDB, Prebid, proto-tinker-wc, and @coveops/abi.
  • JFrog reported the initial compromised versions were downloaded more than 2.5 million times and that DuckDB-related follow-on versions were removed quickly.

External References

Source record: oss/campaigns/qix-npm-phishing-2025/meta.yaml