By using this site, you agree to the Privacy Policy and Terms of Use.
Accept

AceFortis

Cybersecurity Research

  • Home
  • Training
  • Compliance
  • Awareness
  • Research
    • Penetration Testing
    • CVE & Vulnerabilities
    • Hacking Tutorials
    • Tools & Reviews
    • Certifications
    • CTF
  • About
  • Contact
Search

Categories

  • Cybersecurity
  • Penetration Testing
  • Frameworks & Theory
  • CVE & Vulnerabilities
  • Hacking Tutorials
  • Tools & Reviews
  • CTF
  • Certifications
  • About AceFortis
  • Privacy Policy
  • Cybersecurity Training
  • Terms of Use

Tools & Platforms

  • TryHackMe vs HackTheBox: A Beginner’s Comparison
  • Burp Suite vs OWASP ZAP: Complete Pentesting Comparison
  • Kali vs Parrot OS: Best Pentesting Distro 2026 Comparison
  • Metasploit vs Cobalt Strike: Features, Pricing, Evasion
  • Nmap Network Scanning Tutorial for Beginners (2026)
  • Cookie Policy (EU)
  • About
  • Contact
  • Privacy Policy
  • Sitemap
  • Terms of Use
© 2026 AceFortis. All Rights Reserved.
Reading: ChainDrop: The npm Worm That Infected 444 Packages in 4 Hours
Share
Notification Show More
Font ResizerAa

AceFortis

Cybersecurity Research

Font ResizerAa
Search
Follow US
  • About
  • Contact
  • Privacy Policy
  • Sitemap
  • Terms of Use
© 2026 AceFortis. All Rights Reserved.
CVE & Vulnerabilities

ChainDrop: The npm Worm That Infected 444 Packages in 4 Hours

Akash Kumar
Last updated: October 13, 2026 11:18 pm
Akash Kumar
Share
SHARE

ChainDrop: The npm Worm That Infected 444 Packages in 4 Hours

August 2026 Supply Chain Attack

Contents
What HappenedHow ChainDrop WorkedStage 1: Initial CompromiseStage 2: Payload InjectionStage 3: Self-PropagationThe Technical TimelineAffected Packages (Partial List)Why It Spread So Fast1. SLSA Provenance Not Enough2. preinstall Hook Abused3. Monorepo Blast RadiusRemediation ChecklistIf You Installed Any Affected PackageHow to Protect Your Projects1. Pin Exact Versions2. Enable npm Audit in CI3. Use a Private Registry Proxy4. Monitor for Anomalies5. Minimal Token ScopesThe Bigger PictureLessons LearnedResources

What Happened

On August 4, 2026, at 09:02 AM UTC, an attacker pushed a malicious commit to the popular keyv npm package. Within four hours, 444 packages had been compromised. Over 2,200 malicious versions were published to npm.

Total weekly downloads of affected packages? Over 450 million.

This wasn’t a typical supply chain attack. It was a self-propagating worm.


How ChainDrop Worked

Stage 1: Initial Compromise

The attacker gained access to maintainer accounts for several high-profile packages:

  • keyv – Key-value storage abstraction
  • cacheable – Caching library
  • ecto – Database toolkit
  • And 400+ more

The method? Likely credential theft via phishing or session hijacking.

Stage 2: Payload Injection

Each compromised package received identical malicious code:

// Added to preinstall script
"preinstall": "node setup.mjs"

The setup.mjs file:
1. Harvested npm tokens from developer machines
2. Grabbed GitHub personal access tokens
3. Stole cloud credentials (AWS, GCP, Azure)
4. Exfiltrated SSH keys

Stage 3: Self-Propagation

Here’s where it got clever.

When the worm found valid npm tokens, it automatically published malicious versions of other packages accessible with those credentials.

Token from a Firebase maintainer? Worm publishes @firebase/app@malicious.
Token from a Next.js contributor? Worm hits that too.

It spread like a virus through the dependency graph.


The Technical Timeline

Time (UTC)Event
09:02:37First malicious commit to keyv repo
09:35:00keyv@6.0.0 published to npm (malicious)
09:35-10:30444 packages compromised
10:06cacheable family packages infected
10:28ecto@5.0.1 published malicious
11:28GitHub release created (delayed cover)
14:00+Security researchers detect anomaly

In under 4 hours: 2,212 malicious versions published.


Affected Packages (Partial List)

High-Impact Packages:
– keyv – 150M+ weekly downloads
– cacheable – Caching utility
– cacheable-request – HTTP caching
– cache-manager – Multi-cache manager
– flat-cache – File-based cache
– file-entry-cache – File metadata cache
– ecto – Database toolkit

Organizations Compromised:
– OneReach (170+ packages)
– Qlik (30+ packages)
– ServiceTitan (100+ packages)
– Ornikar (40+ packages)


Why It Spread So Fast

1. SLSA Provenance Not Enough

The attack had valid SLSA provenance attestations – the industry’s gold standard for software supply chain security. The worm was signed with legitimate build credentials.

Signature doesn’t mean safe.

2. preinstall Hook Abused

npm runs preinstall scripts automatically before installation. Developers don’t review package code before running npm install.

3. Monorepo Blast Radius

Many affected packages were in monorepos. Compromising one maintainer token gave access to dozens of packages.


Remediation Checklist

If You Installed Any Affected Package

1. Check your lock files

# Search for affected versions
npm ls | grep -E "keyv@6.0.0|cacheable@2.5.1|ecto@5.0.1"

# For specific packages
npm ls keyv
npm ls cacheable-request
npm ls cache-manager

2. Rotate ALL credentials immediately
– npm tokens (all scopes)
– GitHub personal access tokens
– Cloud provider keys (AWS, GCP, Azure)
– CI/CD secrets
– SSH private keys used on affected machines

# NPM
npm logout
npm login
# Then regenerate all tokens at npmjs.com/settings/tokens

# GitHub
# Go to github.com/settings/tokens and delete ALL tokens
# Generate new ones with minimal required scopes

3. Check for signs of compromise

# Look for unexpected network connections
lsof -i | grep -E "node|npm"

# Check for credential files
find ~/.npmrc ~/.aws ~/.ssh -mtime -7

# Review process list for unusual node processes
ps aux | grep node

4. Reinstall from clean cache

npm cache clean --force
rm -rf node_modules package-lock.json
npm install

How to Protect Your Projects

1. Pin Exact Versions

Don’t use version ranges. Pin to exact versions.

// BAD
"dependencies": {
  "keyv": "^6.0.0"
}

// GOOD
"dependencies": {
  "keyv": "6.0.1"  // Known safe version
}

2. Enable npm Audit in CI

# GitHub Actions
- name: Security Audit
  run: npm audit --audit-level=high

3. Use a Private Registry Proxy

Services like Artifactory or Nexus can:
– Cache approved versions
– Block known malicious packages
– Add “cooldown” period before new versions are available

4. Monitor for Anomalies

Watch for:
– Unexpected version bumps
– New pre/post install scripts
– Large file size changes
– Unusual dependency additions

5. Minimal Token Scopes

Never use tokens with more permissions than necessary. Use:
– Read-only tokens for CI
– Short-lived tokens
– Package-specific tokens where possible


The Bigger Picture

ChainDrop wasn’t the first npm supply chain attack. But it was the most sophisticated.

Previous attacks:
– Shai-Hulud (2025) – 800 packages, self-propagating
– Axios compromise (March 2026) – Cross-platform RAT
– TeamPCP attacks – Targeted PyPI and npm

Each attack gets more clever. Each spreads faster.


Lessons Learned

  1. Supply chain attacks are the new frontier – Attackers target the build, not the app
  2. ~~Trusted maintainers~~ Never fully trust – Even legitimate accounts get compromised
  3. Speed matters – 4 hours from first commit to 444 packages infected
  4. Layer defenses – Signed packages + audit + monitoring + least privilege

The era of npm install without review is over.


Resources

  • Datadog Security Labs Analysis
  • StepSecurity: ChainDrop Analysis
  • CISA Alert: Axios Supply Chain

Bottom line: Every npm install runs code on your machine. Know what you’re installing.

You Might Also Like

Ni8mare: The n8n RCE That Scored a Perfect 10.0
What is a CVE? A Complete Beginner’s Guide to Vulnerabilities
PrintNightmare: When Printing Became a Nightmare
October 2026 Patch Tuesday: What to Patch First
wp2shell: The Critical WordPress RCE That Needed No Credentials

Sign Up For Daily Newsletter

Be keep up! Get the latest breaking news delivered straight to your inbox.
[mc4wp_form]
By signing up, you agree to our Terms of Use and acknowledge the data practices in our Privacy Policy. You may unsubscribe at any time.
Share This Article
Facebook Copy Link Print
Share
ByAkash Kumar
Follow:
Akash Kumar, founder of AceFortis. Penetration tester and cybersecurity trainer based in Milan, and cybersecurity instructor at DEMOS Fondazione ITS. Expertise: penetration testing, red teaming and Active Directory security. I offer security awareness training, phishing simulations and courses on NIS2, DORA and ISO 27001 for companies and institutions, in English and Italian. Certifications: CPENT, CRTA, eJPT, PT1.
Previous Article wp2shell: The Critical WordPress RCE That Needed No Credentials
Next Article Shai-Hulud: The npm Worm That Compromised 800+ Packages
Leave a Comment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Latest News

EU AI Act: What Businesses Must Do Now (2026 Update)
Compliance
Password Policy in 2026: What NIST SP 800-63B Recommends
Compliance
How to Run a Cyber Tabletop Exercise: Ransomware Scenario
Security Awareness & Training
30-Day Security Awareness Training Plan
Security Awareness & Training

You Might also Like

Log4Shell Deep Dive: Technical Analysis of the JNDI Exploit

Akash Kumar
Akash Kumar
16 Min Read

Shai-Hulud: The npm Worm That Compromised 800+ Packages

Akash Kumar
Akash Kumar
16 Min Read

Linux Kernel Copy Fail: The Most Researched CVE of 2026

Akash Kumar
Akash Kumar
15 Min Read
//

Sharing knowledge that keeps the digital world a little safer.

Sign Up for Our Newsletter

Subscribe to our newsletter to get our newest articles instantly!

[mc4wp_form id=”1616″]

AceFortisAceFortis
Follow US
© 2026 AceFortis. All Rights Reserved.
Manage Consent
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
  • Manage options
  • Manage services
  • Manage {vendor_count} vendors
  • Read more about these purposes
View preferences
  • {title}
  • {title}
  • {title}
Welcome Back!

Sign in to your account

Username or Email Address
Password

Lost your password?