ChainDrop : l’attaque npm qui a compromis 1 300 paquets et impacté 2 milliards de téléchargements mensuels
La campagne ChainDrop a infecté plus de 1300 paquets npm via la chaîne d'approvisionnement. Découvrez le mécanisme de cette attaque par infostealer.
Image d’illustration générée par IA
Le 4 août 2026, la campagne ChainDrop a été révélée. Elle consiste en une attaque auto-propageante de la chaîne d’approvisionnement ayant infecté plus de 1 300 paquets npm, pour un volume mensuel estimé de 2 milliards de téléchargements. L’opération, toujours en cours, est partie de la compromission du compte GitHub du mainteneur de Keyv et s’est propagée en cascade via les dépendances partagées. Les chercheurs d’Aikido, Wiz, StepSecurity, Socket et Ox Security surveillent son expansion et publient des indicateurs de compromission.
L’élément déclencheur : le compte GitHub de Keyv et la chaîne de cache
L’attaquant a pris le contrôle du compte GitHub du responsable de Keyv, un module répandu de gestion de stockage clé-valeur. De là, il a inséré du code malveillant directement sur les branches principales de Keyv et de ses dépendances : Cacheable, flat-cache et file-entry-cache. Pour rendre les nouvelles versions crédibles, l’agresseur a exploité les mêmes GitHub Actions légitimes configurées dans les dépôts. Résultat : chaque version infectée publiée sur npm conserve une attestation de provenance valide, contournant ainsi les vérifications de nombreux outils de sécurité de la chaîne d’approvisionnement.
Le mécanisme d’infection : preinstall, Bun et la charge utile obscurcie
Chaque paquet compromis inclut un fichier setup.mjs appelé par la clé preinstall du package.json. Ce script s’exécute automatiquement lors d’une commande npm install. Le dropper télécharge le runtime Bun et l’utilise pour exécuter un second fichier, Math_Symbol.js (ou math_init.js), obscurci et contenant un infostealer capable de s’auto-propager.
Le ver ne nécessite aucune interaction : il suffit d’installer une dépendance infectée pour déclencher toute la chaîne. L’exécution a lieu sur le runner qui effectue l’installation, qu’il s’agisse d’un poste de développement, d’un environnement CI/CD ou d’un conteneur temporaire.
Ce qu’il vole et comment il se propage
L’infostealer collecte de manière agressive toutes les informations d’identification accessibles depuis l’environnement d’exécution :
- jetons GitHub (
ghp_,gho_,ghs_), jetons npm (npm_) et secrets GitHub Actions ; - identifiants AWS, y compris les valeurs obtenues depuis SSM avec
WithDecryption: trueet les secrets de Secrets Manager ; - secrets Kubernetes, jetons HashiCorp Vault, chaînes de connexion de bases de données ;
- clés Stripe, Slack, Twilio, Azure, GCP et l’intégralité des variables d’environnement de processus.
Toutes les données volées sont chiffrées puis envoyées vers un dépôt GitHub public contrôlé par l’attaquant. Selon Wiz, le domaine npm-cache[.]com est également utilisé pour l’exfiltration. Le ver ne se contente pas de voler : pour chaque jeton obtenu, il appelle registry.npmjs[.]org/-/whoami et, s’il est valide, l’utilise pour infecter de nouveaux paquets du mainteneur correspondant. La propagation s’auto-alimente, élargissant le rayon d’action à chaque installation.
Impact : compromission totale des environnements de développement et CI/CD
Toute machine ayant exécuté npm install sur une version infectée doit être considérée comme entièrement compromise, même si le paquet est retiré par la suite. Le vol d’identifiants cloud, de secrets CI/CD et de clés privées ouvre la porte à des mouvements latéraux, une exfiltration massive et des modifications non autorisées de code sur les dépôts d’entreprises comme Deliveroo, Ornikar, OneReach, Picsart, Qlik et ServiceTitan, déjà touchées par la campagne.
La présence d’une provenance valide rend cette attaque particulièrement sournoise : de nombreux outils de vérification, basés sur la correspondance entre attestations et sources, n’ont détecté aucune anomalie avant que les premières analyses forensiques ne mettent au jour le mécanisme.
Comment se défendre et repartir
Les sociétés de sécurité impliquées ont diffusé des listes de hashs et de domaines malveillants, mais la priorité pour les organisations potentiellement exposées est d’agir immédiatement :
- Reconstruire intégralement les environnements compromis ou restaurer des sauvegardes non infectées.
- Révoquer tous les jetons et identifiants accessibles depuis l’environnement impacté (PAT GitHub, jetons npm, clés AWS/GCP/Azure, secrets Vault, identifiants de bases de données et de services externes).
- Examiner attentivement les journaux système et les commits dans les dépôts pour identifier les accès anormaux ou les modifications non autorisées.
- Mettre en place des listes d’autorisation pour les dépendances et réviser les politiques d’exécution des scripts
preinstall. - Surveiller en temps réel les indicateurs de compromission partagés par Aikido, Wiz, StepSecurity, Socket et Ox Security.
La campagne ChainDrop est toujours active et le nombre de paquets infectés continue d’augmenter. Les responsables d’environnements npm doivent s’attendre à de nouvelles mises à jour et se préparer à vérifier l’intégrité de leurs dépendances, au-delà des premières listes d’IoC.
Sources
Cet article est une réécriture originale fondée sur les sources ci-dessous.




