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
Appendix · Affected packages
15 more packages
Samples and hashes sit on each incident page, linked above
References
- Widespread npm Supply Chain Attack Breaks Down Impact Scope Across debug, chalkwiz.io
- Dev snared in crypto phishing net, 18 npm packages compromisedtheregister.com
- New compromised packages identified in largest npm attack in historyjfrog.com
- Sindre Sorhus compromised chalk source samplegist.github.com
Source record: oss/campaigns/qix-npm-phishing-2025/meta.yaml