{"id":2048,"date":"2026-01-08T13:43:00","date_gmt":"2026-01-08T13:43:00","guid":{"rendered":"https:\/\/www.almtoolbox.com\/fr\/blog\/?p=2048"},"modified":"2026-01-08T13:43:03","modified_gmt":"2026-01-08T13:43:03","slug":"npm-attack-shai-hulud-explained","status":"publish","type":"post","link":"https:\/\/www.almtoolbox.com\/fr\/blog\/npm-attack-shai-hulud-explained\/","title":{"rendered":"L&#8217;attaque Shai-Hulud sur NPM expliqu\u00e9e"},"content":{"rendered":"\n<p><strong><em>Mise \u00e0 jour de novembre 2025 : Plus loin dans l&#8217;article, une explication de la deuxi\u00e8me attaque (\u00ab Shai\u2011Hulud 2.0 \u00bb)<\/em><\/strong><\/p>\n\n\n\n<p>Une cyberattaque de grande envergure visant l&#8217;\u00e9cosyst\u00e8me NPM a d\u00e9but\u00e9 le 16 septembre 2025.<br>L&#8217;attaque a \u00e9t\u00e9 surnomm\u00e9e \u00ab Shai-Hulud \u00bb.<br>L&#8217;attaque, qui est une \u00e9volution d&#8217;un incident pr\u00e9c\u00e9dent datant d&#8217;environ une semaine,<br>se propage comme un ver (worm) auto-r\u00e9plicable,<br>et infecte des paquets populaires, y compris ceux de Nx et CrowdStrike.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.almtoolbox.com\/blog_he\/wp-content\/uploads\/2025\/09\/Dune_Sandworm.png\" alt=\"Dune Sandworm\" class=\"wp-image-12587\"\/><\/figure>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><\/figure>\n<\/div>\n\n\n\n<p>Les principaux risques incluent le vol d&#8217;identifiants cloud (cloud&nbsp;credentials) et de cl\u00e9s de plateformes majeures,<br>l&#8217;auto-propagation via des comptes de d\u00e9veloppeur NPM (NPM&nbsp;developer&nbsp;accounts) compromis,<br>et la fuite de plus de 700 d\u00e9p\u00f4ts GitHub (GitHub&nbsp;repositories) publics.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Quelles sont les implications ? Et quelles actions entreprendre ?<\/h3>\n\n\n\n<p>Notez que les machines infect\u00e9es sont consid\u00e9r\u00e9es comme enti\u00e8rement compromises (fully&nbsp;compromised) !<br>Il est recommand\u00e9 de prendre des mesures imm\u00e9diates, telles que l&#8217;analyse des paquets open source \u00e0 l&#8217;aide d&#8217;outils SCA,<br>la suppression ou le verrouillage (pinning) des paquets \u00e0 des versions s\u00fbres,<br>la r\u00e9actualisation des autorisations d&#8217;acc\u00e8s aux d\u00e9p\u00f4ts externes,<br>et d&#8217;envisager la r\u00e9installation des syst\u00e8mes affect\u00e9s.<\/p>\n\n\n\n<p>\u00c0 plus long terme, il est recommand\u00e9 de prendre des mesures pr\u00e9ventives suppl\u00e9mentaires, telles que l&#8217;utilisation d&#8217;outils de gestion des secrets (Secrets management),<br>l&#8217;activation d&#8217;alertes pour les paquets infect\u00e9s, le durcissement des images (hardening), et plus encore.<br>Cette alerte souligne que la s\u00e9curit\u00e9 de la cha\u00eene d&#8217;approvisionnement (supply&nbsp;chain&nbsp;security) s&#8217;\u00e9tend d\u00e9sormais au-del\u00e0 des CVE traditionnels et inclut \u00e9galement les informations d&#8217;identification,<br>les autorisations et les vuln\u00e9rabilit\u00e9s CI\/CD, ce qui n\u00e9cessite une consultation urgente avec les \u00e9quipes de s\u00e9curit\u00e9.<\/p>\n\n\n\n<h4 class=\"wp-block-heading has-background\"><em>Si vous avez besoin d&#8217;une aide imm\u00e9diate pour r\u00e9soudre ce probl\u00e8me, gr\u00e2ce \u00e0 nos connaissances pratiques combinant D<\/em>evSecOps \/ <em>DevOps <\/em><br><em>et la protection du code et des applications, contactez-nous :<\/em><br><em><a href=\"mailto:appsec@almtoolbox.com\" target=\"_blank\" rel=\"noreferrer noopener\">appsec@almtoolbox.com<\/a> ou par t\u00e9l\u00e9phone : 072-240-5222<\/em><\/h4>\n\n\n\n<h3 class=\"wp-block-heading\">\u00c9coutez ici une br\u00e8ve explication sur le sujet (2 minutes) :<\/h3>\n\n\n\n<p><iframe loading=\"lazy\" style=\"border-radius: 12px;\" src=\"https:\/\/open.spotify.com\/embed\/episode\/1zp6o97UTAKf8nMcYhIAyx?utm_source=generator\" width=\"100%\" height=\"352\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" data-testid=\"embed-iframe\"><\/iframe><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Une explication plus approfondie sur le sujet (19 minutes) :<\/h3>\n\n\n\n<p><iframe loading=\"lazy\" style=\"border-radius: 12px;\" src=\"https:\/\/open.spotify.com\/embed\/episode\/49EfKsSfr1tNvsTuowYlng?utm_source=generator\" width=\"100%\" height=\"352\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" data-testid=\"embed-iframe\"><\/iframe><\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><em>Les explications enregistr\u00e9es ci-dessus concernent la premi\u00e8re vague de l&#8217;attaque (septembre 2025)<\/em><\/h5>\n\n\n\n<div class=\"wp-block-spacer\" style=\"height: 62px;\" aria-hidden=\"true\">&nbsp;<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"shaihulud-20-----24112025\">Mise \u00e0 jour importante : Shai\u2011Hulud 2.0 \u2013 Une nouvelle vague d&#8217;attaques depuis le 24\/11\/2025<\/h2>\n\n\n\n<p>Fin novembre 2025, une nouvelle vague am\u00e9lior\u00e9e de l&#8217;attaque a \u00e9t\u00e9 identifi\u00e9e, connue dans la communaut\u00e9 sous le nom de Shai\u2011Hulud 2.0 ou <br>\u00ab Sha1\u2011Hulud: The Second Coming \u00bb, au cours de laquelle de nouvelles versions malveillantes ont \u00e9t\u00e9 implant\u00e9es dans des centaines de paquets NPM suppl\u00e9mentaires, avec des centaines de nouvelles versions utilis\u00e9es par des dizaines de milliers de projets. <br>Cette vague est consid\u00e9r\u00e9e comme une continuation directe de la campagne de septembre, mais avec des capacit\u00e9s de propagation, d&#8217;automatisation et de destruction plus avanc\u00e9es, et elle est toujours consid\u00e9r\u00e9e comme un \u00e9v\u00e9nement actif et en cours.\u200b<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Quoi de neuf dans la deuxi\u00e8me vague ?<\/h3>\n\n\n\n<p>Dans la version 2.0, l&#8217;attaque utilise des scripts d&#8217;installation (install \/ preinstall lifecycle scripts) et de nouveaux fichiers de charge utile (payload) comme&nbsp;<code>setup_bun.js<\/code>&nbsp;et&nbsp;<code>bun_environment.js<\/code>, qui permettent d&#8217;ex\u00e9cuter du code malveillant d\u00e8s la phase d&#8217;installation et sans interaction suppl\u00e9mentaire de la part du d\u00e9veloppeur. La charge utile p\u00e9n\u00e8tre beaucoup plus profond\u00e9ment dans l&#8217;environnement CI\/CD : elle cr\u00e9e des fichiers tels que&nbsp;<code>cloud.json<\/code>,&nbsp;<code>environment.json<\/code>,&nbsp;<code>truffleSecrets.json<\/code>&nbsp;et tente m\u00eame d&#8217;injecter un fichier de workflow pour obtenir un point d&#8217;ancrage persistant dans GitHub Actions.\u200b<\/p>\n\n\n\n<p>De plus, la nouvelle attaque enregistre les machines infect\u00e9es en tant que runners GitHub auto-h\u00e9berg\u00e9s (self-hosted GitHub runners) sous le nom de SHA1HULUD, ce qui permet \u00e0 l&#8217;attaquant d&#8217;ex\u00e9cuter du code \u00e0 sa guise au sein de l&#8217;infrastructure CI\/CD de l&#8217;organisation sur la dur\u00e9e et de mani\u00e8re relativement discr\u00e8te. Dans certains cas, une capacit\u00e9 de suppression et de perturbation des d\u00e9p\u00f4ts et des pipelines a \u00e9galement \u00e9t\u00e9 document\u00e9e, de sorte qu&#8217;une tentative pour \u00ab \u00e9teindre \u00bb l&#8217;attaque pourrait entra\u00eener de graves dommages au code et \u00e0 l&#8217;infrastructure.\u200b<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00c9tendue actualis\u00e9e de l&#8217;impact<\/h3>\n\n\n\n<p>Compar\u00e9e \u00e0 la premi\u00e8re vague, la seconde a consid\u00e9rablement \u00e9largi la port\u00e9e de l&#8217;infection, avec des centaines de paquets NPM uniques infect\u00e9s (en fait, pr\u00e8s de 800), totalisant plus de 20 millions de t\u00e9l\u00e9chargements hebdomadaires,<br>et plus de 25 000 \u00e0 28 000 d\u00e9p\u00f4ts GitHub expos\u00e9s \u00e0 des secrets divulgu\u00e9s.<\/p>\n\n\n\n<p>Plusieurs organisations connues, y compris de grandes entreprises SaaS et des projets open source populaires,<br>ont signal\u00e9 r\u00e9trospectivement avoir \u00e9t\u00e9 touch\u00e9es et ont d\u00fb proc\u00e9der \u00e0 une rotation massive de leurs secrets et \u00e0 une restauration compl\u00e8te de leur environnement CI\/CD.\u200b<\/p>\n\n\n\n<p>Le nouveau ver n&#8217;est plus limit\u00e9 \u00e0 NPM : des rapports font \u00e9tat de tentatives de propagation \u00e0 d&#8217;autres \u00e9cosyst\u00e8mes comme Maven, en utilisant les m\u00eames techniques de vol de secrets, d&#8217;enregistrement de runners malveillants et de publication de d\u00e9p\u00f4ts d\u00e9di\u00e9s sur GitHub pour la collecte d&#8217;informations. Tout cela renforce la compr\u00e9hension qu&#8217;il s&#8217;agit d&#8217;une campagne d&#8217;attaque de la cha\u00eene d&#8217;approvisionnement large et continue, et non d&#8217;un \u00e9v\u00e9nement isol\u00e9 ou ponctuel.\u200b<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mise \u00e0 jour de la liste des risques<\/h2>\n\n\n\n<p>En plus des risques d\u00e9j\u00e0 d\u00e9crits dans l&#8217;article original (vol d&#8217;identifiants cloud, fuite de d\u00e9p\u00f4ts GitHub, etc.), la vague actuelle ajoute plusieurs points importants :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Transformation de l&#8217;environnement CI\/CD lui-m\u00eame en un point de contr\u00f4le persistant pour l&#8217;attaquant, y compris des runners malveillants et des workflows d\u00e9rob\u00e9s (backdoored).\u200b<\/li>\n\n\n\n<li>Automatisation \u00e9tendue du \u00ab worming \u00bb \u2013 une tentative syst\u00e9matique d&#8217;infecter davantage de paquets, de d\u00e9p\u00f4ts et d&#8217;organisations en utilisant des identifiants vol\u00e9s pr\u00e9c\u00e9demment.\u200b<\/li>\n\n\n\n<li>Capacit\u00e9s d&#8217;escalade de privil\u00e8ges (Privilege Escalation) dans les environnements Docker et ex\u00e9cution dans les environnements Linux, Windows et macOS, tout en tentant de s&#8217;\u00e9chapper des conteneurs vers le syst\u00e8me d&#8217;exploitation h\u00f4te.\u200b<\/li>\n<\/ul>\n\n\n\n<p>Par cons\u00e9quent, une machine ou un pipeline expos\u00e9 \u00e0 Shai\u2011Hulud 2.0 est consid\u00e9r\u00e9 non seulement comme \u00ab enti\u00e8rement compromis \u00bb, mais aussi comme une base potentielle pour une propagation ult\u00e9rieure \u00e0 l&#8217;int\u00e9rieur et \u00e0 l&#8217;ext\u00e9rieur de l&#8217;organisation !\u200b<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recommandations d&#8217;action mises \u00e0 jour :<\/h2>\n\n\n\n<p>En plus des recommandations existantes ci-dessus (analyse SCA, \u00e9pinglage \u00e0 des versions s\u00fbres, actualisation des autorisations, r\u00e9installations, etc.), il est recommand\u00e9 d&#8217;ajouter les actions suivantes :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Effectuer une rotation agressive de tous les secrets stock\u00e9s dans les environnements CI\/CD, GitHub\/GitLab, les clouds AWS\/Azure\/GCP et les registres de paquets \u2013 m\u00eame en l&#8217;absence d&#8217;indication certaine d&#8217;une compromission.\u200b<\/li>\n\n\n\n<li>Effectuer un examen complet des pipelines CI de GitHub Actions \/ GitLab, y compris la d\u00e9tection de workflows inconnus (par exemple, ceux li\u00e9s \u00e0 des \u00e9v\u00e9nements de discussion ou \u00e0 de nouveaux runners), et leur suppression imm\u00e9diate.\u200b<\/li>\n\n\n\n<li>Durcir la gestion des runners : limiter les runners auto-h\u00e9berg\u00e9s, surveiller les noms\/\u00e9tiquettes suspects (par exemple SHA1HULUD) et appliquer le principe de moindre privil\u00e8ge sur chaque runner.\u200b<\/li>\n\n\n\n<li>Utiliser des outils de SCA et de Secrets Scanning d\u00e9di\u00e9s, capables de d\u00e9tecter \u00e9galement les sch\u00e9mas de vers et les comportements suspects (scripts au moment de l&#8217;installation, d\u00e9clencheurs inhabituels dans les pipelines, etc.), et pas seulement les CVE standards.\u200b<\/li>\n\n\n\n<li>Envisager s\u00e9rieusement d&#8217;utiliser des registres priv\u00e9s \/ proxys internes avec une liste blanche (allowlist), agissant comme un pare-feu, <br>afin de r\u00e9duire la d\u00e9pendance directe \u00e0 l&#8217;\u00e9gard du registre NPM public et d&#8217;emp\u00eacher le t\u00e9l\u00e9chargement de versions infect\u00e9es en temps r\u00e9el.\u200b<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Liens utiles :<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.almtoolbox.com\/blog_he\/sonarqube-webinar-sep-2025\/\" target=\"_blank\" rel=\"noreferrer noopener\">Enregistrement du webinaire de formation : Pr\u00e9sentation de SonarQube et des nouveaut\u00e9s du produit (notamment SCA et SBOM)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.almtoolbox.com\/blog\/devsecops-code-app-security-offering\/\" target=\"_blank\" rel=\"noreferrer noopener\">Notre offre de solutions pour la protection du code et des applications, le d\u00e9veloppement s\u00e9curis\u00e9 et le DevSecOps<\/a><\/li>\n\n\n\n<li>\u00c0 v\u00e9rifier : <a href=\"https:\/\/www.almtoolbox.com\/blog_he\/bitnami-catalog-changes-implications-alternatives\/\" target=\"_blank\" rel=\"noreferrer noopener\">Les changements dans le catalogue Bitnami pourraient affecter votre CI\/CD<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.almtoolbox.com\/blog\/the-npm-supply-chain-attack-of-september-8-2025\" target=\"_blank\" rel=\"noreferrer noopener\">Explication de l&#8217;attaque de la cha\u00eene d&#8217;approvisionnement NPM du 08\/09\/2025<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.almtoolbox.com\/blog\/docker-webinar-oct-2025\/\" target=\"_blank\" rel=\"noreferrer noopener\">Enregistrement du webinaire de formation sur le durcissement des conteneurs avec Docker<\/a><\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-spacer\" style=\"height: 32px;\" aria-hidden=\"true\">&nbsp;<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Vous avez d&#8217;autres questions ?<\/h3>\n\n\n\n<p>Contactez-nous pour toute question, y compris les tarifs, les devis et plus encore : <a href=\"mailto:jfrog@almtoolbox.com\" target=\"_blank\" rel=\"noreferrer noopener\">devops.fr@almtoolbox.com \u00a0<\/a>ou appelez-nous : <strong>+33 1 84 17 53 28<\/strong> , 866-503-1471 (\u00c9tats-Unis \/ Canada) ou +31 85 064 4633 (International)<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><em>L&#8217;article a \u00e9t\u00e9 publi\u00e9 pour la premi\u00e8re fois en septembre 2025. Derni\u00e8re mise \u00e0 jour : d\u00e9cembre 2025.<\/em><\/h5>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><em><sub>L&#8217;image ci-dessus a \u00e9t\u00e9 initialement mise en ligne sur&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/YouTube\">YouTube<\/a>&nbsp;sous une licence CC BY.<\/sub><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Explication de l&#8217;attaque Shai-Hulud sur NPM et JS \u2013 que s&#8217;est-il pass\u00e9 et comment s&#8217;en prot\u00e9ger.&hellip; <a class=\"more-link\" href=\"https:\/\/www.almtoolbox.com\/fr\/blog\/npm-attack-shai-hulud-explained\/\">Continue reading <span class=\"screen-reader-text\">L&#8217;attaque Shai-Hulud sur NPM expliqu\u00e9e<\/span> <span class=\"meta-nav\" aria-hidden=\"true\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":4,"featured_media":2047,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35,11,261,244],"tags":[260,257,258,259],"class_list":["post-2048","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devsecops","category-github","category-javascript","category-securite-applicative","tag-attaque-de-la-chaine-dapprovisionnement","tag-crowdstrike","tag-javascript","tag-shai-hulud"],"_links":{"self":[{"href":"https:\/\/www.almtoolbox.com\/fr\/blog\/wp-json\/wp\/v2\/posts\/2048","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.almtoolbox.com\/fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.almtoolbox.com\/fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.almtoolbox.com\/fr\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.almtoolbox.com\/fr\/blog\/wp-json\/wp\/v2\/comments?post=2048"}],"version-history":[{"count":2,"href":"https:\/\/www.almtoolbox.com\/fr\/blog\/wp-json\/wp\/v2\/posts\/2048\/revisions"}],"predecessor-version":[{"id":2124,"href":"https:\/\/www.almtoolbox.com\/fr\/blog\/wp-json\/wp\/v2\/posts\/2048\/revisions\/2124"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.almtoolbox.com\/fr\/blog\/wp-json\/wp\/v2\/media\/2047"}],"wp:attachment":[{"href":"https:\/\/www.almtoolbox.com\/fr\/blog\/wp-json\/wp\/v2\/media?parent=2048"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.almtoolbox.com\/fr\/blog\/wp-json\/wp\/v2\/categories?post=2048"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.almtoolbox.com\/fr\/blog\/wp-json\/wp\/v2\/tags?post=2048"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}