EN
en direct

ChainDrop infecte 1 300 paquets npm et 2 milliards de téléchargements mensuels

Une attaque **supply-chain** auto-propagante baptisée **ChainDrop** a compromis plus de **1 300 paquets** sur le registre **npm** le **4 août 2026**. Les paquets infectés totalisaient **2 milliards de téléchargements mensuels** et touchent des organisations comme **Deliveroo**, **Qlik** et **ServiceTitan**. Vérifiez vos dépendances.

Un câble réseau fibre optique dont une fibre est sectionnée, une goutte de lumière ambrée s’échappe de la coupure, fond sombre anthracite

Le 4 août 2026, BleepingComputer et plusieurs équipes de sécurité ont documenté ChainDrop, une attaque supply-chain d’une ampleur rare sur l’écosystème npm. En quelques heures, un acteur malveillant a compromis le compte GitHub d’un mainteneur clé, injecté du code malveillant auto-propageant dans ses paquets, et vu la contamination se diffuser en cascade à travers le graphe de dépendances.

Le bilan provisoire, à 15 h UTC le jour de la découverte : plus de 1 300 paquets infectés, représentant un volume cumulé de 2 milliards de téléchargements mensuels.

Le vecteur d’entrée : un mainteneur, sept paquets

L’attaque a commencé par la compromission du compte GitHub du mainteneur de la bibliothèque Keyv, un système de stockage clé-valeur pour Node.js utilisé par des millions de projets.

Le mainteneur en question gérait sept paquets interconnectés :

  • Keyv — le stockage clé-valeur principal (~800 millions de téléchargements mensuels)
  • Cacheable — couche d’abstraction de cache
  • flat-cache — cache sérialisé sur disque
  • file-entry-cache — cache de métadonnées de fichiers
  • Trois paquets de connecteurs (Keyv Postgres, Keyv SQLite, Keyv Redis)

L’attaquant a publié des versions compromises de chacun de ces paquets, contenant un script postinstall malveillant exécuté automatiquement lors de l’installation via npm install.

Le mécanisme d’auto-propagation

ChainDrop ne se contente pas d’infecter les projets qui dépendent directement de Keyv. Le malware intègre une routine d’auto-propagation en deux étapes :

  1. Scan du node_modules local : le script postinstall parcourt l’arborescence node_modules à la recherche d’autres paquets dont le mainteneur utilise le même jeton npm que celui stocké dans le .npmrc local.
  2. Republication en chaîne : s’il trouve un jeton d’authentification valide, le malware republie une version compromise du paquet correspondant sur le registre npm — avec le même payload.

C’est ce mécanisme qui a transformé une compromission initiale de sept paquets en une cascade de plus de 1 300 paquets infectés.

Parmi les organisations dont les paquets internes ont été contaminés par rebond :

  • Deliveroo — plateforme de livraison de repas cotée à Londres
  • Ornikar — auto-école en ligne française
  • Qlik — éditeur de solutions BI et d’intégration de données
  • Picsart — plateforme de création graphique
  • ServiceTitan — logiciel de gestion pour les métiers de services
  • OneReach — plateforme d’automatisation conversationnelle

Ce que fait le payload

Le code malveillant injecté remplit trois fonctions :

  • Exfiltration de secrets : il collecte les variables d’environnement, les fichiers .env, les clés SSH privées et les tokens de services cloud, puis les exfiltre vers un serveur de commande et contrôle (C2).
  • Persistance : il modifie le package.json des projets infectés pour s’assurer que la version compromise est réinstallée à chaque npm ci ou npm install.
  • Propagation : le scan du node_modules et la republication automatique (décrits ci-dessus).

Le C2 était hébergé derrière un CDN légitime, ce qui a compliqué le blocage par les équipes de sécurité.

La réponse de GitHub et npm

GitHub (propriétaire de npm depuis 2020) a réagi en plusieurs vagues le 4 août :

  • Révocation massive de tokens : tous les tokens npm associés aux comptes compromis ont été révoqués automatiquement.
  • Unpublish ciblé : les versions compromises des sept paquets initiaux ont été retirées du registre.
  • Notification aux mainteneurs : GitHub a notifié les propriétaires des 1 300 paquets concernés via l’adresse email associée à leur compte.
  • Analyse post-mortem : l’équipe sécurité de GitHub a lancé une investigation sur la méthode de compromission initiale du compte GitHub du mainteneur de Keyv.

À 17 h UTC, le registre npm a temporairement bloqué la publication de nouvelles versions pour les paquets comptant plus d’un million de téléchargements mensuels — une mesure d’urgence sans précédent depuis l’incident colors.js/faker.js de 2022.

L’ombre de l’incident colors.js

ChainDrop n’est pas la première crise majeure de l’écosystème npm, mais elle en dépasse toutes les précédentes par son ampleur et son mécanisme.

En janvier 2022, le mainteneur de colors.js et faker.js avait intentionnellement introduit une boucle infinie dans ses paquets pour protester contre l’absence de rémunération des mainteneurs open source. Quelques mois plus tard, l’attaque IconBurst avait compromis une trentaine de paquets via du typosquatting.

ChainDrop combine les deux pires propriétés : une compromission réelle du compte mainteneur et une propagation automatique. Ce n’est plus un développeur mécontent qui sabote son propre paquet — c’est un attaquant qui utilise le graphe de dépendances comme vecteur de propagation.

Comment vérifier si vous êtes affecté

bash
# Vérifiez si vos dépendances incluent les paquets initiaux
npm ls keyv cacheable flat-cache file-entry-cache keyv-postgres keyv-sqlite keyv-redis 2>/dev/null

# Vérifiez les versions installées — toute version publiée le 4 août 2026 est suspecte
npm outdated

# Auditez les scripts postinstall de vos dépendances
grep -r "postinstall" node_modules/*/package.json | grep -v '"postinstall": ""'

Le projet Socket a publié un package de détection dédié :

bash
npx @socketsecurity/chaindrop-detect

Verdict

ChainDrop est l’attaque supply-chain la plus étendue jamais observée sur un registre de paquets public. Elle ne doit rien au hasard : c’est l’exploitation méthodique des deux faiblesses structurelles de npm — le privilège des scripts postinstall et la confiance transitive illimitée dans le graphe de dépendances.

Si votre projet utilise Keyv ou l’un de ses satellites, mettez à jour immédiatement vers la dernière version non compromise. Si votre projet a été infecté par rebond, faites tourner les clés et tokens exposés — l’attaquant a eu une fenêtre d’au moins six heures pour collecter les secrets avant la révocation massive.

À plus long terme, deux remèdes : exiger la signature des paquets et désactiver par défaut l’exécution automatique des scripts de cycle de vie. Le manifeste npm les autorise depuis toujours. ChainDrop démontre que ce n’est plus tenable.

Références

Le brief cyber, chaque mardi

Les failles qui comptent, les correctifs à appliquer, en dix minutes de lecture.

Pas de spam. Désinscription en un clic.
à lire ensuite

Sur le même sujet

← Retour au fil

Tapez au moins deux caractères.

naviguer ouvrir esc fermer