Campaign · Open Source · · 1 day

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.

Draws together 5 incidents across 27 packages

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 would have been. 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 a 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. This 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.

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.

Incidents in this campaign

  1. Prebid npm packages carried Qix wallet drainer
  2. proto-tinker-wc shipped Qix wallet drainer
  3. Qix npm account shipped wallet drainers
  4. @coveops/abi shipped Qix wallet drainer
  5. DuckDB npm account published wallet drainer

Appendix · Affected packages

prebid.js 2025-09-09
10.9.2
1.17.3
proto-tinker-wc 2025-09-09
0.1.87
ansi-regex 2025-09-08
6.2.1
ansi-styles 2025-09-08
6.2.2
backslash 2025-09-08
0.2.1
chalk 2025-09-08
5.6.1
chalk-template 2025-09-08
1.1.1
color 2025-09-08
5.0.1
color-convert 2025-09-08
3.1.1
color-name 2025-09-08
2.0.1
color-string 2025-09-08
2.1.1
15 more packages
debug 2025-09-08
4.4.2
error-ex 2025-09-08
1.3.3
has-ansi 2025-09-08
6.0.1
is-arrayish 2025-09-08
0.3.3
simple-swizzle 2025-09-08
0.2.3
slice-ansi 2025-09-08
7.1.1
strip-ansi 2025-09-08
7.1.1
supports-color 2025-09-08
10.2.1
supports-hyperlinks 2025-09-08
4.1.1
wrap-ansi 2025-09-08
9.0.1
@coveops 2025-09-09
2.0.1
duckdb 2025-09-09
1.3.3
@duckdb 2025-09-09
1.3.3
@duckdb 2025-09-09
1.29.2
@duckdb 2025-09-09
1.3.3

Samples and hashes sit on each incident page, linked above

References

  1. Widespread npm Supply Chain Attack Breaks Down Impact Scope Across debug, chalkwiz.io
  2. Dev snared in crypto phishing net, 18 npm packages compromisedtheregister.com
  3. New compromised packages identified in largest npm attack in historyjfrog.com
  4. Sindre Sorhus compromised chalk source samplegist.github.com

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