En bref

  • Le 4 août 2026, le compte GitHub du mainteneur de keyv (127 millions de téléchargements/semaine npm) a été compromis, permettant l'injection d'un worm voleur de credentials dans toute la famille de packages associée.
  • Packages affectés : keyv, cacheable (29 M/sem.), flat-cache (565 M/sem.), file-entry-cache (557 M/sem.) — total : 1,2 milliard de téléchargements hebdomadaires. CVE associée : CVE-2026-45321.
  • Action requise : identifier si un build npm a été exécuté entre le 4 et le 7 août 2026 dans un environnement avec des secrets, effectuer une rotation complète des credentials concernés, et mettre à jour vers les versions saines publiées après le 7 août.

Les faits

Le 4 août 2026, la communauté open source a découvert l'une des attaques de supply chain les plus dévastatrices de l'année. Des attaquants ont compromis le compte GitHub du mainteneur unique derrière keyv, une bibliothèque de stockage clé-valeur pour Node.js affichant environ 127 millions de téléchargements hebdomadaires sur npm. Après prise de contrôle du compte, les attaquants ont directement pushé des fichiers malveillants sur la branche main du dépôt avant de déclencher immédiatement la publication d'une nouvelle version via GitHub Actions. Cette manœuvre a signé la version empoisonnée avec une provenance GitHub Actions techniquement valide — rendant inopérants les mécanismes standard de vérification de provenance.

La particularité de cette attaque réside dans son effet de contagion massif. Le même mainteneur est également responsable de plusieurs autres packages npm à fort volume. Liste des packages directement compromis : cacheable (29 millions de téléchargements/semaine), flat-cache (565 millions de téléchargements/semaine), file-entry-cache (557 millions de téléchargements/semaine), et plusieurs utilities de caching moins connus. Total : plus d'1,2 milliard de téléchargements hebdomadaires exposés via un seul compte GitHub compromis.

La charge malveillante est un worm conçu pour voler des credentials silencieusement. Son mode de fonctionnement : lire les variables d'environnement du processus Node.js en cours d'exécution (fréquemment peuplées de tokens AWS, GCP, Azure, clés API, secrets CI/CD) puis exfiltrer ces données vers une infrastructure C2 externe via une unique requête HTTPS encodée, passant inaperçue dans les logs réseau. La CVE associée, CVE-2026-45321, est documentée par Tenable avec une complexité d'exploitation faible et un impact élevé sur la confidentialité.

L'attaque s'inscrit dans la campagne Shai-Hulud, documentée par GitGuardian et Aikido Security : une opération coordonnée ayant compromis plus de 170 packages npm et PyPI représentant collectivement plus de 518 millions de téléchargements hebdomadaires cumulés. Le vecteur keyv/flat-cache est le plus critique de cette campagne en raison des dépendances transitives : flat-cache et file-entry-cache sont des dépendances d'ESLint, intégré dans Webpack, Create React App, Angular CLI et la majorité des boilerplates JavaScript modernes. Un projet utilisant ESLint intègre donc flat-cache sans nécessairement en avoir conscience.

Le vecteur d'entrée exact pour compromettre le compte GitHub du mainteneur n'est pas encore confirmé publiquement. Les hypothèses avancées par Aikido Security et Unit 42 (Palo Alto Networks) incluent le phishing ciblé, le vol d'un token OAuth GitHub via un environnement de développement compromis, ou l'exploitation d'une session persistante dans un navigateur infecté. Ce qui est certain : l'attaquant a agi dans les minutes suivant la prise de contrôle du compte pour minimiser la fenêtre de détection.

La détection de la compromission a été réalisée par Aikido Security le même jour, grâce à des systèmes de surveillance en temps réel des publications npm détectant les comportements anormaux : appels réseau inattendus, accès aux variables d'environnement en dehors du flux normal d'une bibliothèque de caching. L'alerte a été propagée via GitHub Security, le NHS England Digital (Cyber Alert CC-4781), et les équipes de réponse aux incidents des grands fournisseurs cloud. npm a suspendu les versions empoisonnées dans les heures suivant la détection. Des versions saines ont été republiées à partir du 7 août 2026 après audit communautaire.

La mécanique de la compromission illustre une limite fondamentale des défenses actuelles : la signature de provenance via Sigstore était techniquement valide — l'attaquant avait réellement déclenché le workflow GitHub Actions depuis le compte compromis. La chaîne de confiance cryptographique était intacte à tous les niveaux ; c'était sa source humaine qui était corrompue. Aucun mécanisme technique de vérification de provenance ne peut se substituer à la sécurité du compte du mainteneur humain.

Selon les analyses de Group-IB et Palo Alto Networks publiées courant 2026, six groupes distincts opèrent activement contre npm et PyPI, dont plusieurs acteurs étatiques à motivation financière. Leurs techniques progressent : ciblage des mainteneurs plutôt que des registres, exploitation des dépendances transitives pour maximiser l'impact, utilisation de signatures valides pour contourner les mécanismes de confiance. La campagne Shai-Hulud s'inscrit dans cette tendance d'industrialisation des attaques supply chain.

La fenêtre d'exposition effective — du 4 au 7 août 2026 — est courte mais suffisante. Des millions de pipelines CI/CD exécutent quotidiennement des builds intégrant ESLint et ses dépendances. Toute organisation ayant lancé un npm install ou npm ci sans lockfile strict pendant ces trois jours dans un environnement avec des secrets configurés est susceptible d'avoir exposé ces credentials.

Impact et exposition

L'impact concerne toute organisation dont les pipelines CI/CD ou environnements de développement ont exécuté npm install entre le 4 et le 7 août 2026 avec des secrets présents dans l'environnement. Les plus exposés : runners GitHub Actions avec tokens cloud d'organisation, pipelines Jenkins ou GitLab CI avec credentials d'infrastructure, machines de développement avec fichiers .env contenant des credentials de production. L'investigation forensique recommandée par Tenable et Aikido Security considère tout secret présent dans un environnement de build pendant cette fenêtre comme potentiellement exfiltré.

Recommandations

  • Audit des dépendances — Inspecter vos package-lock.json pour identifier si des versions de keyv, flat-cache, cacheable ou file-entry-cache publiées entre le 4 et le 7 août 2026 ont été installées.
  • Rotation des secrets — Si un build npm s'est exécuté pendant la fenêtre d'exposition dans un environnement avec des credentials, procéder à la rotation complète : tokens AWS/GCP/Azure, clés API, secrets CI/CD, certificats.
  • Mise à jour vers les versions saines — Mettre à jour vers les versions publiées après le 7 août 2026 pour tous les packages affectés.
  • Audit des logs CI/CD — Examiner les logs des pipelines exécutés pendant la fenêtre pour détecter des requêtes réseau vers des domaines non reconnus.
  • Pinning strict des dépendances — Implémenter des lockfiles versionnés dans git et des processus d'update contrôlés (Dependabot/Renovate avec revue humaine).

Alerte critique

Si votre pipeline CI/CD a exécuté npm install entre le 4 et le 7 août 2026, vos secrets cloud et credentials d'infrastructure doivent être considérés comme compromis. La rotation immédiate des tokens AWS, GCP, Azure et clés API prime sur le patch lui-même : l'attaquant a peut-être déjà exfiltré des credentials actifs pendant ces trois jours d'exposition.

Comment vérifier rapidement si mon projet était exposé pendant la fenêtre du 4-7 août ?

Exécutez npm ls keyv flat-cache file-entry-cache cacheable dans votre dépôt et comparez les versions installées avec votre package-lock.json versionné dans git. Si le lockfile indique une version publiée entre le 4 et le 7 août 2026 pour l'un de ces packages, votre build était potentiellement exposé. Consultez également les logs de vos runners CI/CD pour des connexions sortantes vers des IPs ou domaines inconnus pendant les phases de build — une seule requête HTTPS vers un domaine non référencé dans votre baseline est un signal fort de compromission.

Votre infrastructure est-elle exposée ?

Ayi NEDJIMI réalise des audits de sécurité supply chain pour identifier vos dépendances à risque et sécuriser vos pipelines CI/CD.

Demander un audit