Is My Site Secure

npm · disclosed 8 September 2025

chalk/debug npm maintainer phishing hijack

A maintainer of very widely used npm packages (Josh Junon, 'Qix') was phished by a fake npm '2FA reset' email from the lookalike domain npmjs.help. The attacker used his account to publish malicious versions of chalk, debug and about 17 related packages, which together get billions of downloads a week. The injected code was a browser-side crypto stealer: it hooked fetch, XMLHttpRequest and wallet APIs such as window.ethereum and swapped crypto addresses and transactions to attacker wallets. npm removed the malicious versions the same day, but any website bundle built during that window could still contain the code.

  • Detectable by a website scanYes
  • Last reviewed23 October 2026

Timeline

  1. The phishing domain npmjs.help is registered (per Aikido).
  2. Around 13:12-13:16 UTC, malicious versions of ansi-styles, debug, chalk, supports-color, strip-ansi and others are published. Aikido's feed alerts at 13:16 UTC.
  3. At 15:15 UTC the maintainer confirms the compromise and starts cleanup. npm removes the malicious versions over the course of the day.
  4. DuckDB discloses that four of its npm packages, including @duckdb/duckdb-wasm@1.29.2, were published with the same crypto-stealing payload after a maintainer fell for the same npmjs.help phish on Sept 8 (GHSA-w62p-hx95-gf2c).
  5. The package owner publishes new patch versions so private registries and caches stop serving the cached bad versions.
  6. GitHub advisories and CVEs are published, including CVE-2025-59143 (color) and GHSA-6jp5-hh4c-8c5h / CVE-2025-59330 (error-ex).

Affected packages

PackageAffected versions
chalk5.6.1
debug4.4.2
ansi-styles6.2.2
ansi-regex6.2.1
strip-ansi7.1.1
supports-color10.2.1
wrap-ansi9.0.1
slice-ansi7.1.1
color-convert3.1.1
color-name2.0.1
color-string2.1.1
color5.0.1
is-arrayish0.3.3
simple-swizzle0.2.3
error-ex1.3.3
has-ansi6.0.1
supports-hyperlinks4.1.1
chalk-template1.1.1
backslash0.2.1
proto-tinker-wc0.1.87
duckdb1.3.3
@duckdb/node-api1.3.3
@duckdb/node-bindings1.3.3
@duckdb/duckdb-wasm1.29.2

19 packages from the Qix account. Aikido and StepSecurity each list 18 but each is missing a different one: Aikido omits color@5.0.1 and StepSecurity omits error-ex@1.3.3. Both are confirmed by GitHub advisories and CVEs (CVE-2025-59143, CVE-2025-59330). proto-tinker-wc, with the same payload under a different maintainer, was found later on 2025-09-08 (Aikido). The four DuckDB packages were compromised through the same phishing campaign and disclosed on 2025-09-09 (GHSA-w62p-hx95-gf2c). DuckDB noticed within four hours, deprecated the versions and had npm delete them. Aikido says the Qix packages total over 2 billion weekly downloads, and Socket says 2-3 billion.

What to do

  1. Check package-lock.json, yarn.lock or pnpm-lock.yaml, including transitive dependencies, for any of the listed versions.
  2. If any front-end bundle was built while a bad version was installed, delete node_modules, clear the package-manager cache, reinstall clean versions and rebuild and redeploy every browser bundle. Updating the lockfile alone does not clean bundles you already shipped.
  3. Purge the bad versions from any private registry, mirror or CI cache.
  4. If your site handles crypto payments or wallet connections, review transactions made by your users during the exposure window and tell them if needed.
  5. Pin exact versions, use a lockfile, and consider a short cooldown before adopting newly published dependency versions.

Sources

We update this page as new information is published. Package versions are also checked live against OSV.dev during every audit, so newly flagged versions are caught even before this page changes.