Connexion Premium

Plus de 1 300 paquets contaminés dans NPM : Shai-Hulud « de retour » avec ChainDrop

Revoilà la sous-préfète

Plus de 1 300 paquets contaminés dans NPM : Shai-Hulud « de retour » avec ChainDrop

Un « nouveau » malware s’est propagé dans des centaines de paquets sur npm, dont plusieurs très populaires. Il s’agit une nouvelle fois d’une attaque contre la chaine d’approvisionnement ayant réussi à contourner toutes les mesures de sécurité. Dans le code, l’ombre de Shai-Hulud plane, tandis que le point de défaillance initial n’est pas clair.

Le nouveau venu se nomme ChainDrop. Selon les analyses faites sur son code, il est basé sur Shai-Hulud (en référence au ver des sables dans l’univers de Dune), qui avait déjà fait un carnage dans NPM en septembre 2025. Il en reprend les principales caractéristiques, dont son aspect auto-répliquant et le vol de nombreuses informations.

On pourrait croire que l’attaque de l’automne 2025 avait provoqué une vague d’actions pour verrouiller les comptes et inciter à la plus extrême prudence. C’est en fait le cas, mais le ou les pirates s’y sont pris autrement.

Que s’est-il passé ?

La compromission a été réalisée en poussant directement des fichiers malveillants sur la branche principale des dépôts, puis en créant immédiatement de nouvelles versions. Conséquence, ces versions vérolées ont été publiées sur NPM avec une provenance valide signée par GitHub Actions. Les contrôles de provenance npm, censés garantir qu’un package provient bien d’un flux légitime, n’ont ainsi rien pu détecter car les pirates ont justement réussi à le détourner.

868 paquets, répartis sur 1 381 versions, ont pu être contaminés par ce biais. Le pouvoir de nuisance est réel, car beaucoup d’entre eux sont populaires, l’ensemble de la liste cumulant en moyenne deux milliards de téléchargements par mois.

Tout est parti de la compromission du compte du mainteneur du paquet keyv (Jared Wray), qui représente à lui seul plus de 600 millions de téléchargements par mois. S’en sont suivies les contaminations de flat-cache, file-entry-cache, cacheable-request, cacheable ou encore cache-manager, autant de projets spécialisés dans la gestion des caches pour de multiples cas de figure.

Une fois les paquets contaminés, la propagation s’est faite rapidement, atteignant des entreprises comme Deliveroo, Ornikar, OneReach, Picsart, Qlik ou ServiceTitan.

La petite chimie de ChainDrop

Les chercheurs de l’entreprise de sécurité Aikido se sont penchés sur ChainDrop. Dans leur billet publié le 4 aout, ils décrivent ainsi deux composants retrouvés dans les paquets contaminés, comme c’est souvent le cas.

Le premier est un dropper nommé setup.mjs. Un dropper est un code chargé d’installer un ou plusieurs composants malveillants sur le système. Il sert de vecteur d’installation pour la charge utile (payload) et remplit plusieurs missions : déposer l’exécutable sur le disque, l’extraire depuis des données intégrées dans le programme ou le télécharger depuis un serveur distant, l’exécuter en mémoire ou encore mettre en place des mécanismes de persistance avant de lancer la charge utile. Selon les chercheurs, setup.mjs est un dropper fortement obfusqué récupérant le runtime JavaScript Bun depuis son dépôt GitHub pour pouvoir exécuter ensuite la charge.

Il reste 66% de l'article à découvrir.

Cadenas en colère - Contenu premium

Soutenez un journalisme indépendant,
libre de ton, sans pub et sans reproche.

Accédez en illimité aux articles

Profitez d'un média expert et unique

Intégrez la communauté et prenez part aux débats

Partagez des articles premium à vos contacts

Commentaires (17)

votre avatar
Et on en revient toujours à "Il faut que le code soit testé par un tiers".

Au pire de le faire sur des moteurs de test qui permettent (comme le fait Google avec les applications mobile) de :

  • 1 voir s'il reconnait du code malveillant déjà estampillé malveillant. Un attaquant cherche lui aussi à optimiser son temps et va reprendre des éléments A ou B.

  • 2 Faire tourner sur une Sandbox et regarder ce que cela fait. Ca permet de détecter des accès sensibles ou hors contexte de l'application (ou module).



Pour rappel Google le fait déjà. Mais ce n'est pas le seul exemple. Dans la sécu aussi il y a des outils etc.

Pour Google cela va même assez loin. Ça inspecte aussi d'autres choses. Comme l'accessibilité pour les malvoyants et plein d'autres.

Pourquoi NPM ne pourrait pas le faire ?

On a l'impression scandales après scandales qu'on a une autruche aux commandes. Peut on encore faire confiance à ce genre de structure ?
votre avatar
Peut-êtrr parce que NPM n'a pas les moyens de Google.
votre avatar
Ils ont dépassé les 10 millions jusqu'en 2015 et n'annonce plus le chiffre aujourd'hui. Ce n'est jamais innocent. Acheter quelques serveurs supplémentaires et monter une plateforme de validation est envisageable. Voire même de la faire en mode collaboratif.

Source : https://www.clay.com/dossier/npm-funding

De plus Google ne part pas dans une débauche quasi lubrique de moyens pour les tests des développeurs. On fait la queue comme tout le monde. La dernière fois que j'ai regardé : ils ont une fourchette de 1 à 3 jours pour répondre. Bref rien d'instantané.
votre avatar
NPM, c'est GitHub.
votre avatar
Pour être précis, c’est surtout Microsoft qui possède github et npm.

Donc une très très grosse boite !
votre avatar
C'est un peu plus transitif que ça en réalité.

NPM Inc. a été rachetée par GitHub Inc. en 2020 qui en a fait une filiale, GitHub étant elle-même une filiale de Microsoft.
votre avatar
Reste que c’est bien Microsoft derrière qui pilote / finance, donc ils auraient largement les moyens d’améliorer les choses et de financer les dev.
votre avatar
Ben non, une filiale n'est pas forcément financée par sa holding. C'est même plutôt l'inverse, en général.
votre avatar
Pour rappel Google le fait déjà. Mais ce n'est pas le seul exemple. Dans la sécu aussi il y a des outils etc.
Pour Google cela va même assez loin. Ça inspecte aussi d'autres choses. Comme l'accessibilité pour les malvoyants et plein d'autres.
Tu fais référence à l'approbation des app android là?
Parce que bien que beaucoup plus contraignante elle est aussi très loin d'être infaillible, les stores d'application (Google mais Apple ou MS aussi, et ne parlons même pas de constructeur comme Samsung, LG...) restent des sources importante de diffusion de malware.
votre avatar
Rien n'est parfait. Quelque chose qui fonctionne de manière imparfaite c'est mieux que quasiment zéro (ou zéro absolu).

Soyons honnête. Tu as largement moins de risque de choper une vérole sur le store Android qu'avec des paquets/module venant de NPM/node.

On parle aussi d'une magnitude dans le cas de NPM. 1300 paquets... Je pense ne pas avoir a expliquer plus avant.
votre avatar
On parle aussi d'une magnitude dans le cas de NPM. 1300 paquets... Je pense ne pas avoir a expliquer plus avant.
Le premier lien récent que je trouve après 30s concerne un incident concernant quelques centaines d'applications suspicieuse cumulant quelques dizaines de millions de download.

https://www.humansecurity.com/learn/blog/satori-threat-intelligence-alert-slopads-covers-fraud-with-layers-of-obfuscation/

La différence d’échelle ne me parait pas évidente... dans les deux cas vaut mieux être prudent avec ce qu'on installe (mais avec l'imbrication des dépendances c'est vrai que c'est beaucoup plus insidieux dans le cas d'un gestionnaire de package comme npm.js)
votre avatar
Apple et Google se fichent pas mal des scams et arnaques.
L'unique but de leur modération est de protéger leurs revenus, pas les utilisateurs.
votre avatar
Je suis d'accord avec toi. Toutefois cela ne change pas l'acte de modération / filtrage.

Enlever le marron pour éviter l'amende (ou autre truc du genre) ça reste quand même à l'avantage de l'utilisateur au final. Y'à au moins un filtre...
votre avatar
C'est là qu'on se dit que tout ce système de dépendance de packages (qui ne concerne pas que NPM bien entendu) est peut-être une bonne idée sur le papier, mais dans la pratique, ça a fini par engendre des attaques de supply chain tellement chiantes entre les dépendances vérolées et les dépendances de dépendances transitives vérolées...

Je pense que l'idée de base n'est pas bonne à jeter, mais peut être que ces tonnes d'interdépendances pour une fonctionnalité engendrent plus de complexité et d'emmerdes que de recoder la-dite fonctionnalité.
votre avatar
Kôa, dépendre de ce genre de paquet est dangereux 😅 ? https://www.npmjs.com/package/is-odd (et son pendant is-even)
votre avatar
Y'a quand même eu 24 commits sur ce projet... ^^'
votre avatar
Non mais cet écosystème…