How a Single Compromise Threatened 34% of npm

Client Alert
September 11, 2025
On September 8, 2025, the npm account of Josh Junon (Qix), the maintainer of widely used JavaScript libraries, was compromised. Malicious versions of chalk, debug, and other packages were briefly published before removal.

The injected malware was a crypto-clipper aimed at stealing developers’ cryptocurrency wallets. Because Qix’s libraries are foundational to the JavaScript ecosystem, the compromise demonstrated a potential blast radius of more than 20 million packages — about 34% of the entire NPM ecosystem. This incident underscores the fragility of modern software supply chains: a single maintainer compromise can cascade to a scale comparable with Log4j/Log4Shell.

What Happened During the Attack

Attackers gained access to Qix’s npm account through a phishing attack that bypassed 2FA. At least 20 Qix-owned NPM packages were published with malicious versions, including:

  • chalk (22.6k GitHub stars, ~300M weekly downloads).
  • debug (11.3k GitHub stars, ~357M weekly downloads).
  • Others: strip-ansi,color-convert, error-ex, and more.

The malware intercepted wallet addresses and hijacked transactions. Because the payload caused build errors in some environments, it was discovered relatively quickly.

npm logo: Boboss74, Public domain, via Wikimedia Commons

Software Supply Chain Impact

The widespread use of Qix libraries results in far-reaching cybersecurity ramifications – well beyond those involving the compromised libraries directly.

Direct compromise:

  • ~80 Qix-maintained npm packages.
  • ~20 confirmed malicious versions.

Potential blast radius*:

  • npm: ~3.3M direct dependents (Tier 1); ~20.2M transitive dependents (Tier N), ≈34% of NPM.
  • Cross-environment packages: ~25.8k Cargo packages and ~11.5k PyPI packages also depend on Qix libraries.

* Numbers are the theoretical maximum exposure if the compromised versions had propagated unchecked, not confirmed infections.

Compromised Packages
20
All Qix Packages
~80
Tier 1 Direct Dependents
~3,286,256
Tier N Transitive Dependents
~20,263,692 (≈34% of NPM)

Why This Matters

This compromise highlights three critical questions for every organization:

  1. Do you have visibility into your transitive supply chain?
    It’s not enough to track the 20 compromised packages. What matters is whether Qix, or any other maintainer, appears anywhere in your dependency tree.
  2. Could you respond if a compromise targeted your systems?
    If the payload had stolen credentials or introduced backdoors instead of targeting wallets, would you have been able to identify the affected builds and act quickly?
  3. Are you continuously monitoring for supply chain threats?
    Attacks on maintainers and ecosystems will continue. Effective defense means monitoring for actor-driven threats, detecting malicious dependencies early, and adjusting your software inventory in real time.

Exiger Recommendations

  • Audit dependencies: 
    Identify direct and transitive usage of Qix-owned packages.
  • Pin safe versions: 
    Use lockfiles or overrides to prevent adoption of compromised releases.
  • Rebuild clean: 
    Purge caches (node_modules, lockfiles) and reinstall dependencies.
  • Monitor advisories: 
    Track updates from npm, GitHub, and trusted security sources.
  • Enhance visibility: 
    Maintain SBOMs and automated monitoring to quickly measure exposure and respond effectively.

Exiger continuously monitors software supply chain risks and advises clients on mitigating risk, supply chain attacks, operational disruption, and reputational damage.

For a list of all known packages using the compromised Qix packages, or for questions about safeguarding your software supply chain, contact Exiger.

Table of Contents

Get in Touch

Learn how you can build a more resilient software supply chain.

Demo The
Exiger Platform