{"id":18050,"date":"2026-06-26T12:22:23","date_gmt":"2026-06-26T12:22:23","guid":{"rendered":"https:\/\/www.securitytoday.de\/?p=18050"},"modified":"2026-06-26T12:55:17","modified_gmt":"2026-06-26T12:55:17","slug":"mini-shai-hulud-le-ver-npm-devore-la-chaine-dapprovisionnement","status":"publish","type":"post","link":"https:\/\/www.securitytoday.de\/fr\/2026\/06\/26\/mini-shai-hulud-le-ver-npm-devore-la-chaine-dapprovisionnement\/","title":{"rendered":"Mini Shai-Hulud : le ver npm d\u00e9vore la cha\u00eene d&rsquo;approvisionnement"},"content":{"rendered":"<p style=\"color:#69d8ed;font-size:0.9em;margin:0 0 16px;padding:0;\">7 Min. de lecture<\/p>\n<p><strong>Le 11 mai 2026, Microsoft Security Research signale une nouvelle vague du ver npm Shai-Hulud : 170 paquets npm et deux paquets PyPI touch\u00e9s, r\u00e9partis sur 404 versions malveillantes de paquets.<\/strong> Il s&rsquo;agit de la premi\u00e8re campagne coordonn\u00e9e frappant simultan\u00e9ment npm et PyPI. Ce n&rsquo;est pas le chiffre qui est remarquable, mais la conception. Mini Shai-Hulud vole des identifiants et se propage ensuite de lui-m\u00eame, en empruntant exactement les canaux de publication fiables qui maintiennent ensemble les cha\u00eenes d&rsquo;approvisionnement logicielles modernes.<\/p>\n<div style=\"background:#003340;color:#fff;padding:32px 36px;margin:32px 0;border-radius:8px;\">\n<p style=\"margin:0 0 18px 0;font-size:0.95em;font-weight:800;text-transform:uppercase;letter-spacing:0.2em;color:#69d8ed;border-bottom:2px solid rgba(105,216,237,0.25);padding-bottom:12px;\">Les points cl\u00e9s en bref<\/p>\n<ul style=\"margin:0;padding-left:22px;color:rgba(255,255,255,0.92);line-height:1.6;\">\n<li><strong style=\"color:#69d8ed;\">Le ver se propage de lui-m\u00eame :<\/strong> Les droits OIDC et de publication vol\u00e9s g\u00e9n\u00e8rent de nouvelles versions malveillantes sous de v\u00e9ritables identit\u00e9s de mainteneurs, sans aucun nouvel acc\u00e8s par phishing.<\/li>\n<li><strong style=\"color:#69d8ed;\">Persistance au-del\u00e0 du paquet :<\/strong> Le code malveillant s&rsquo;immisce en partie dans les configurations des d\u00e9veloppeurs et reste actif, m\u00eame apr\u00e8s la suppression du paquet infect\u00e9.<\/li>\n<li><strong style=\"color:#69d8ed;\">Les tokens sont la porte d&rsquo;entr\u00e9e :<\/strong> En privil\u00e9giant npm Trusted Publishing et WebAuthn plut\u00f4t que des tokens de longue dur\u00e9e, vous fermez le principal vecteur de propagation.<\/li>\n<\/ul>\n<\/div>\n<p style=\"font-size:0.88em;color:#666;margin:20px 0 32px 0;border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5;padding:10px 0;\"><span style=\"color:#004a59;font-weight:700;text-transform:uppercase;font-size:0.72em;letter-spacing:0.14em;margin-right:14px;\">Articles connexes :<\/span><a href=\"https:\/\/www.securitytoday.de\/fr\/2026\/06\/22\/la-faille-splunk-qui-supprime-des-fichiers-sans-connexion\/\" style=\"color:#333;text-decoration:underline;\">La faille Splunk sans connexion<\/a>&nbsp;&nbsp;<span style=\"color:#ccc;\">\/<\/span>&nbsp;&nbsp;<a href=\"https:\/\/www.securitytoday.de\/fr\/2026\/06\/20\/identites-de-machines-offboarding-owasp-nhi\/\" style=\"color:#333;text-decoration:underline;\">Identit\u00e9s machine lors de l&rsquo;offboarding<\/a><\/p>\n<h2 style=\"margin-top:48px;margin-bottom:18px;\">Une deuxi\u00e8me vague, plus vaste et coordonn\u00e9e<\/h2>\n<p>Shai-Hulud n&rsquo;est pas un nouveau venu. Entre le 24 novembre et le 1 d\u00e9cembre 2025, la premi\u00e8re vague avait compromis des centaines de paquets npm, dont des composants issus des \u00e9cosyst\u00e8mes de Zapier, PostHog, Postman, ENS Domains et AsyncAPI. La variante document\u00e9e par Microsoft d\u00e9but mai 2026, baptis\u00e9e Mini Shai-Hulud, franchit un cap suppl\u00e9mentaire. Elle cible \u00e0 nouveau des projets de premier plan tels que TanStack, Mistral AI, UiPath, OpenSearch et AntV, et s&rsquo;\u00e9tend pour la premi\u00e8re fois aux deux grandes registries.<\/p>\n<p>Les 404 versions malveillantes correspondent au nombre d&rsquo;\u00e9tats de paquets manipul\u00e9s, r\u00e9partis sur les 170 paquets npm et les deux paquets PyPI. Ce chiffre n&rsquo;a rien \u00e0 voir avec des erreurs HTTP. Pour les \u00e9quipes de s\u00e9curit\u00e9, cela d\u00e9place la recherche : il ne s&rsquo;agit plus de chercher un seul paquet corrompu, mais de suivre une cha\u00eene de publications qui s&rsquo;auto-entretiennent.<\/p>\n<h2 style=\"margin-top:48px;margin-bottom:18px;\">La m\u00e9canique : preinstall s&rsquo;ex\u00e9cute avant chaque test<\/h2>\n<p>L&rsquo;attaque commence \u00e0 la faille la plus faible du processus d&rsquo;installation. Un script malveillant pr\u00e9install dans le fichier package.json s&rsquo;ex\u00e9cute automatiquement lors de l&rsquo;installation, avant m\u00eame que les tests ou les v\u00e9rifications de s\u00e9curit\u00e9 ne puissent intervenir. Ce cr\u00e9neau temporel est la cl\u00e9. \u00c0 l&rsquo;int\u00e9rieur de ce cr\u00e9neau, un script d&rsquo;initialisation nomm\u00e9 <span style=\"font-family:monospace;background:#f4f4f4;padding:1px 5px;border-radius:3px;font-size:0.92em;\">set_bun.js<\/span> installe, si n\u00e9cessaire, l&rsquo;alternative JavaScript Runtime Bun et ex\u00e9cute via celle-ci le v\u00e9ritable payload contenu dans le fichier <span style=\"font-family:monospace;background:#f4f4f4;padding:1px 5px;border-radius:3px;font-size:0.92em;\">bun_environment.js<\/span>.<\/p>\n<p>Ce qui suit est une r\u00e9colte m\u00e9thodique. Le code malveillant t\u00e9l\u00e9charge un runner GitHub Actions et utilise le scanner de credentials TruffleHog pour extraire des secrets depuis les d\u00e9p\u00f4ts et les variables d&rsquo;environnement. La prise est transf\u00e9r\u00e9e vers des d\u00e9p\u00f4ts contr\u00f4l\u00e9s par les attaquants. Ce qui est vol\u00e9 d\u00e9passe largement les tokens npm : acc\u00e8s AWS-SSO et IMDS-v2, identifiants Azure, Google Cloud et Kubernetes, cl\u00e9s SSH, secrets de configuration locaux, voire m\u00eame des portefeuilles crypto.<\/p>\n<div style=\"background:#0a2e3d;border-radius:8px;padding:28px 32px;margin:32px 0;\">\n<div style=\"color:#69d8ed;font-size:2.4em;font-weight:800;line-height:1;margin-bottom:8px;\">404 versions<\/div>\n<div style=\"color:#ffffff;font-size:1.02em;line-height:1.5;margin-bottom:10px;\">des configurations de paquets malveillantes ont propag\u00e9 Mini Shai-Hulud via 170 paquets npm et deux paquets PyPI, identifi\u00e9es par Microsoft Security Research le 11 mai 2026.<\/div>\n<div style=\"color:rgba(255,255,255,0.55);font-size:0.82em;\">Source : Microsoft Security Blog<\/div>\n<\/div>\n<h2 style=\"margin-top:48px;margin-bottom:18px;\">Pourquoi le ver survivra m\u00eame si le paquet a disparu<\/h2>\n<p>Le v\u00e9ritable avantage par rapport aux attaques classiques sur la cha\u00eene d&rsquo;approvisionnement r\u00e9side dans sa propagation. Mini Shai-Hulud utilise les droits OIDC et de publication vol\u00e9s pour publier de nouveaux releases malveillants sous les identit\u00e9s de mainteneurs authentiques. Gr\u00e2ce \u00e0 GitHub Trusted Publishing et aux scripts de cycle de vie npm, l&rsquo;attaque se propage ainsi via les canaux de publication fiables, sans qu&rsquo;il soit n\u00e9cessaire aux attaquants de recourir \u00e0 nouveau au phishing.<\/p>\n<p>Pire encore est la persistance. Selon Microsoft, le code malveillant s&rsquo;ancre partiellement via des hooks SessionStart dans le fichier <span style=\"font-family:monospace;background:#f4f4f4;padding:1px 5px;border-radius:3px;font-size:0.92em;\">.claude\/settings.json<\/span> et via l&rsquo;interface GraphQL de GitHub. Ainsi, l&rsquo;attaque persiste dans l&rsquo;environnement de d\u00e9veloppement, pas seulement dans la d\u00e9pendance. Celui qui supprime le paquet infect\u00e9 et croit avoir termin\u00e9 ignore le m\u00e9canisme qui se d\u00e9clenche \u00e0 chaque prochain d\u00e9marrage de l&rsquo;outil.<\/p>\n<h2 style=\"margin-top:48px;margin-bottom:18px;\">La nouvelle surface d&rsquo;attaque : outils de d\u00e9veloppement IA et runtimes alternatifs<\/h2>\n<p>C&rsquo;est exactement ici que r\u00e9side la le\u00e7on qui va au-del\u00e0 de ce seul incident. Le ver s&rsquo;appuie non seulement sur des scripts classiques npm, mais aussi sur une runtime alternative avec Bun et les fichiers de hook des outils modernes de codage IA, ainsi qu&rsquo;un m\u00e9canisme de persistance rarement pris en compte lors des audits traditionnels. Une SBOM liste les d\u00e9pendances, mais elle n&rsquo;inclut pas les configurations de hook dans l&rsquo;environnement de d\u00e9veloppement.<\/p>\n<p>Pour la r\u00e9ponse aux incidents, cela signifie d&rsquo;\u00e9largir le p\u00e9rim\u00e8tre. Quiconque enqu\u00eate sur une compromission de la cha\u00eene d\u2019approvisionnement devra d\u00e9sormais \u00e9galement examiner les fichiers de configuration des assistants IA, les fichiers de hook locaux et les runtimes non Node. Ce n\u2019est pas une panique autour de l\u2019IA. C\u2019est simplement l\u2019observation rationnelle selon laquelle la surface d\u2019attaque CI\/CD s\u2019est \u00e9tendue \u00e0 des outils qui n\u2019existaient pas sur chaque poste de d\u00e9veloppement il y a deux ans.<\/p>\n<h2 style=\"margin-top:48px;margin-bottom:18px;\">D\u00e9fense : remplacer les tokens, renforcer l&rsquo;identit\u00e9, signer la pipeline<\/h2>\n<p>La bonne nouvelle est que les mesures les plus efficaces sont des principes, pas des produits. Microsoft et plusieurs entreprises de s\u00e9curit\u00e9 comme Akamai, Snyk et StepSecurity, qui ont fait des rapports parall\u00e8les \u00e0 la campagne, convergent vers un noyau coh\u00e9rent. Les mainteneurs devraient utiliser la publication fiable via npm plut\u00f4t que des tokens longue dur\u00e9e, car un token vol\u00e9 est le carburant de la propagation auto-entretenue. Une authentification \u00e0 deux facteurs bas\u00e9e sur WebAuthn prot\u00e8ge mieux qu\u2019un TOTP, qui peut \u00eatre pirat\u00e9. Et les signatures des commits rendent visibles les versions falsifi\u00e9es.<\/p>\n<p>Dans le domaine des utilisateurs, la rapidit\u00e9 compte. Qui pourrait \u00eatre touch\u00e9 doit tourner imm\u00e9diatement les donn\u00e9es d\u2019acc\u00e8s expos\u00e9es, sans attendre. La cr\u00e9ation automatis\u00e9e d\u2019une SBOM et le scanning sans agent aident \u00e0 d\u00e9tecter les versions manipul\u00e9es. Des r\u00e8gles r\u00e9duisant les points d\u2019entr\u00e9e peuvent bloquer les scripts obscurcis avant m\u00eame qu\u2019ils ne s\u2019ex\u00e9cutent. Pour les entreprises allemandes, une couche juridique suppl\u00e9mentaire s\u2019ajoute. NIS2 rend la diligence raisonnable dans la cha\u00eene d\u2019approvisionnement une exigence prouvable. Un incident comme celui-ci est donc \u00e0 la fois un sujet technique et un sujet de documentation.<\/p>\n<h2 style=\"padding-top:64px;margin-bottom:20px;\">Foire aux questions<\/h2>\n<h3>Qu\u2019est-ce que Mini Shai-Hulud ?<\/h3>\n<p>Mini Shai-Hulud est une variante du ver npm Shai-Hulud de 2025. La vague document\u00e9e par Microsoft le 11 mai 2026 a compromis 170 packages npm et deux packages PyPI via 404 versions malveillantes, se propageant de mani\u00e8re autonome via les canaux de publication de la cha\u00eene logistique logicielle.<\/p>\n<h3>Comment le ver infecte-t-il un syst\u00e8me ?<\/h3>\n<p>Par un script malveillant preinstall, ex\u00e9cut\u00e9 automatiquement et avant tous les tests lors de l\u2019installation d\u2019un package. Il installe la runtime Bun, charge un payload et scanne avec TruffleHog pour rep\u00e9rer les donn\u00e9es d\u2019acc\u00e8s, qui sont ensuite transmises aux attaquants.<\/p>\n<h3>Pourquoi supprimer le package infect\u00e9 ne suffit-il pas ?<\/h3>\n<p>Parce que le code malveillant s\u2019installe en partie en dehors des d\u00e9pendances, par exemple via des hooks SessionStart dans la configuration des outils de codage bas\u00e9s sur l\u2019IA ou via l\u2019API GitHub-GraphQL. Cette persistance active \u00e0 chaque d\u00e9marrage de l\u2019outil, m\u00eame si le package a \u00e9t\u00e9 retir\u00e9 depuis longtemps.<\/p>\n<h3>Quelles donn\u00e9es d\u2019acc\u00e8s sont concern\u00e9es ?<\/h3>\n<p>Sont vol\u00e9es les tokens npm, les acc\u00e8s AWS-SSO et IMDS-v2, les identifiants Azure, Google Cloud et Kubernetes, les cl\u00e9s SSH, les secrets de configuration locaux et les portefeuilles cryptographiques. Qui soup\u00e7onne une compromission doit tourner imm\u00e9diatement les donn\u00e9es d\u2019acc\u00e8s expos\u00e9es.<\/p>\n<h3>Quel impact cet incident a-t-il sur les obligations NIS2 ?<\/h3>\n<p>NIS2 exige une diligence raisonnable prouvable dans la cha\u00eene d\u2019approvisionnement. Un incident de cha\u00eene d\u2019approvisionnement de ce type touche ainsi au-del\u00e0 de la d\u00e9fense technique les obligations de documentation et d\u2019alerte des entreprises concern\u00e9es.<\/p>\n<h3>Les recommandations de lecture de la r\u00e9daction<\/h3>\n<ul style=\"line-height:1.8;\">\n<li><a href=\"https:\/\/www.securitytoday.de\/fr\/2026\/06\/25\/a-partir-de-quand-lhorloge-du-delai-de-declaration-commence-t-elle-vraiment-a\/\">Quand le compte \u00e0 rebours des d\u00e9lais de notification commence vraiment<\/a><\/li>\n<li><a href=\"https:\/\/www.securitytoday.de\/fr\/2026\/06\/24\/dns-de-protection-la-couche-que-beaucoup-negligent\/\">Protective DNS : la couche que beaucoup n\u00e9gligent<\/a><\/li>\n<li><a href=\"https:\/\/www.securitytoday.de\/fr\/2026\/06\/20\/loi-sur-les-toits-resilience-physique-ciso\/\">Loi-cadre KRITIS : quand la r\u00e9silience devient une obligation pour le CISO<\/a><\/li>\n<\/ul>\n<div style=\"margin:40px 0 24px 0;\">\n<p style=\"margin:0 0 12px 0;font-size:0.78em;font-weight:700;text-transform:uppercase;letter-spacing:0.18em;color:#666;\">Plus d&rsquo;articles du r\u00e9seau MBF Media<\/p>\n<div style=\"padding:14px 18px;border-left:3px solid #0bb7fd;background:#fafafa;margin-bottom:6px;\">\n<div style=\"font-size:0.7em;font-weight:700;color:#0bb7fd;text-transform:uppercase;letter-spacing:0.12em;margin-bottom:4px;\">cloudmagazin<\/div>\n<p><a href=\"https:\/\/www.cloudmagazin.com\/2026\/06\/24\/ingress-nginx-eol-gateway-api-migration\/\" style=\"font-weight:600;line-height:1.4;color:#1a1a1a;text-decoration:none;\">Ingress-NGINX arrive en fin de vie : la voie vers l&rsquo;API Gateway<\/a><\/p>\n<\/div>\n<div style=\"padding:14px 18px;border-left:3px solid #202528;background:#fafafa;margin-bottom:6px;\">\n<div style=\"font-size:0.7em;font-weight:700;color:#202528;text-transform:uppercase;letter-spacing:0.12em;margin-bottom:4px;\">mybusinessfuture<\/div>\n<p><a href=\"https:\/\/mybusinessfuture.com\/schatten-ki-mittelstand-prozess-signal\/\" style=\"font-weight:600;line-height:1.4;color:#1a1a1a;text-decoration:none;\">L&rsquo;IA fant\u00f4me dans les PME : ce que r\u00e9v\u00e8le son utilisation clandestine<\/a><\/p>\n<\/div>\n<div style=\"padding:14px 18px;border-left:3px solid #d65663;background:#fafafa;\">\n<div style=\"font-size:0.7em;font-weight:700;color:#d65663;text-transform:uppercase;letter-spacing:0.12em;margin-bottom:4px;\">digital-chiefs<\/div>\n<p><a href=\"https:\/\/www.digital-chiefs.de\/ki-generierter-code-haftung-governance-review-gates-cio\/\" style=\"font-weight:600;line-height:1.4;color:#1a1a1a;text-decoration:none;\">L&rsquo;IA \u00e9crit le code. Qui en est responsable ?<\/a><\/p>\n<\/div>\n<\/div>\n<p style=\"text-align:right;color:#868e96;font-size:0.85em;margin-top:48px;\"><em>Source de l&rsquo;image de titre : Pexels \/ Pachon in Motion (px:30547598)<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"Mini Shai-Hulud se propage lui-m\u00eame via npm et PyPI : comment le ver de la cha\u00eene d&rsquo;approvisionnement vole des jetons et ce que les \u00e9quipes de s\u00e9curit\u00e9\u2026","protected":false},"author":50,"featured_media":18042,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_focuskw":"Petit Shai-Hulud","_yoast_wpseo_title":"Mini Shai-Hulud : le ver npm d\u00e9vore la cha\u00eene d'approvisionnement","_yoast_wpseo_metadesc":"Mini Shai-Hulud se propage via npm et PyPI : comment le ver de la cha\u00eene d'approvisionnement vole des tokens et ce que les \u00e9quipes de s\u00e9curit\u00e9 doivent\u2026","_yoast_wpseo_meta-robots-noindex":"","_yoast_wpseo_meta-robots-nofollow":"","_yoast_wpseo_meta-robots-adv":"","_yoast_wpseo_canonical":"","_yoast_wpseo_opengraph-title":"","_yoast_wpseo_opengraph-description":"","_yoast_wpseo_opengraph-image":"","_yoast_wpseo_opengraph-image-id":0,"_yoast_wpseo_twitter-title":"","_yoast_wpseo_twitter-description":"","_yoast_wpseo_twitter-image":"","_yoast_wpseo_twitter-image-id":0,"_evm_translation_lang":"","featured_post":0,"featured_post_sortierung":0,"_wp_old_slug":[],"footnotes":""},"categories":[3],"tags":[],"class_list":["post-18050","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aktuelles"],"evm_reading_time_minutes":8,"wpml_language":"fr","wpml_translation_of":18041,"_links":{"self":[{"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/posts\/18050","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/users\/50"}],"replies":[{"embeddable":true,"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/comments?post=18050"}],"version-history":[{"count":1,"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/posts\/18050\/revisions"}],"predecessor-version":[{"id":18051,"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/posts\/18050\/revisions\/18051"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/media\/18042"}],"wp:attachment":[{"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/media?parent=18050"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/categories?post=18050"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.securitytoday.de\/fr\/wp-json\/wp\/v2\/tags?post=18050"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}