{"id":52,"date":"2026-09-03T10:02:00","date_gmt":"2026-09-03T10:02:00","guid":{"rendered":"https:\/\/aptinforma.com\/blog\/?p=52"},"modified":"2026-08-08T00:20:58","modified_gmt":"2026-08-08T00:20:58","slug":"shai-hulud-comprendre-lattaque-npm-et-proteger-sa-supply-chain","status":"publish","type":"post","link":"https:\/\/www.aptinforma.com\/blog\/shai-hulud-comprendre-lattaque-npm-et-proteger-sa-supply-chain\/","title":{"rendered":"Shai-Hulud : comprendre l\u2019attaque npm et prot\u00e9ger sa supply chain"},"content":{"rendered":"\n<p>Pendant longtemps, la s\u00e9curit\u00e9 d\u2019une application \u00e9tait principalement pens\u00e9e autour de son propre code.<\/p>\n\n\n\n<p>Aujourd\u2019hui, ce n\u2019est plus suffisant.<\/p>\n\n\n\n<p>Une application moderne peut d\u00e9pendre de <strong>dizaines, centaines, voire milliers de composants externes<\/strong> : biblioth\u00e8ques npm, packages Python, images Docker, actions GitHub, outils CI\/CD, SDK cloud\u2026<\/p>\n\n\n\n<p>Et il suffit parfois qu\u2019un seul \u00e9l\u00e9ment de cette cha\u00eene soit compromis pour qu\u2019un attaquant entre indirectement dans votre environnement.<\/p>\n\n\n\n<p>Les campagnes <strong>Shai-Hulud<\/strong> en sont une illustration particuli\u00e8rement importante.<\/p>\n\n\n\n<p>Identifi\u00e9 initialement en 2025, Shai-Hulud est d\u00e9sormais r\u00e9f\u00e9renc\u00e9 par MITRE comme un <strong>ver de supply chain<\/strong> capable de se propager via des d\u00e9p\u00f4ts de code et des packages npm, tout en cherchant \u00e0 voler des identifiants et des jetons d\u2019acc\u00e8s.<\/p>\n\n\n\n<p>Et en 2026, le probl\u00e8me ne s\u2019est pas arr\u00eat\u00e9.<\/p>\n\n\n\n<p>De nouvelles variantes et campagnes ont continu\u00e9 \u00e0 appara\u00eetre, avec notamment <strong>Mini Shai-Hulud<\/strong>, puis plus r\u00e9cemment une variante baptis\u00e9e <strong>ChainDrop<\/strong> qui a de nouveau touch\u00e9 massivement l\u2019\u00e9cosyst\u00e8me npm d\u00e9but ao\u00fbt 2026.<\/p>\n\n\n\n<p>Alors, comment une simple d\u00e9pendance JavaScript peut-elle devenir un probl\u00e8me de cybers\u00e9curit\u00e9 \u00e0 l\u2019\u00e9chelle d\u2019une entreprise ?<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Qu\u2019est-ce qu\u2019une attaque de supply chain logicielle ?<\/h1>\n\n\n\n<p>Pour comprendre Shai-Hulud, il faut d\u2019abord comprendre la notion de <strong>software supply chain<\/strong>, ou cha\u00eene d\u2019approvisionnement logicielle.<\/p>\n\n\n\n<p>Lorsque vous d\u00e9veloppez une application, vous n\u2019\u00e9crivez presque jamais 100 % du code vous-m\u00eame.<\/p>\n\n\n\n<p>Vous utilisez par exemple :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un framework ;<\/li>\n\n\n\n<li>des biblioth\u00e8ques ;<\/li>\n\n\n\n<li>des packages open source ;<\/li>\n\n\n\n<li>des SDK ;<\/li>\n\n\n\n<li>des outils de compilation ;<\/li>\n\n\n\n<li>des pipelines CI\/CD ;<\/li>\n\n\n\n<li>des images Docker ;<\/li>\n\n\n\n<li>des services cloud.<\/li>\n<\/ul>\n\n\n\n<p>C\u2019est parfaitement normal.<\/p>\n\n\n\n<p>Le probl\u00e8me appara\u00eet lorsque l\u2019un de ces composants est compromis.<\/p>\n\n\n\n<p>Au lieu d\u2019attaquer directement votre entreprise, l\u2019attaquant peut chercher \u00e0 compromettre <strong>un fournisseur, un mainteneur ou un outil auquel vous faites d\u00e9j\u00e0 confiance<\/strong>.<\/p>\n\n\n\n<p>Le code malveillant peut alors arriver chez vous \u00e0 travers une mise \u00e0 jour apparemment l\u00e9gitime.<\/p>\n\n\n\n<p>C\u2019est ce qui rend ces attaques particuli\u00e8rement dangereuses :<\/p>\n\n\n\n<p><strong>la menace emprunte un chemin que votre syst\u00e8me consid\u00e8re d\u00e9j\u00e0 comme fiable.<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">npm : un \u00e9cosyst\u00e8me extr\u00eamement puissant\u2026 mais tr\u00e8s interconnect\u00e9<\/h1>\n\n\n\n<p>npm est l\u2019un des gestionnaires de packages les plus utilis\u00e9s dans l\u2019\u00e9cosyst\u00e8me JavaScript et Node.js.<\/p>\n\n\n\n<p>Installer une d\u00e9pendance est extr\u00eamement simple :<\/p>\n\n\n\n<p><code>npm install<\/code><\/p>\n\n\n\n<p>Mais derri\u00e8re cette simplicit\u00e9 se cache parfois une immense arborescence de d\u00e9pendances.<\/p>\n\n\n\n<p>Vous installez une biblioth\u00e8que.<\/p>\n\n\n\n<p>Cette biblioth\u00e8que d\u00e9pend d\u2019une autre.<\/p>\n\n\n\n<p>Qui d\u00e9pend elle-m\u00eame de trois autres packages.<\/p>\n\n\n\n<p>Et ainsi de suite.<\/p>\n\n\n\n<p>Votre application peut donc utiliser indirectement du code provenant de projets que vous n\u2019avez jamais choisis explicitement.<\/p>\n\n\n\n<p>C\u2019est ce qu\u2019on appelle les <strong>d\u00e9pendances transitives<\/strong>.<\/p>\n\n\n\n<p>Et c\u2019est pr\u00e9cis\u00e9ment ce qui rend une attaque de supply chain capable d\u2019avoir un rayon d\u2019impact tr\u00e8s important.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Que fait Shai-Hulud ?<\/h1>\n\n\n\n<p>Shai-Hulud n\u2019est pas simplement un package malveillant isol\u00e9.<\/p>\n\n\n\n<p>MITRE le d\u00e9crit comme un ver de supply chain capable de compromettre des comptes et des d\u00e9p\u00f4ts, de voler des jetons d\u2019acc\u00e8s et d\u2019utiliser ces acc\u00e8s pour continuer sa propagation.<\/p>\n\n\n\n<p>Le principe g\u00e9n\u00e9ral est particuli\u00e8rement dangereux.<\/p>\n\n\n\n<p>Une machine de d\u00e9veloppeur ou un environnement CI\/CD installe une d\u00e9pendance compromise.<\/p>\n\n\n\n<p>Le code malveillant cherche alors des secrets accessibles dans cet environnement.<\/p>\n\n\n\n<p>Cela peut concerner notamment :<\/p>\n\n\n\n<p><strong>des jetons GitHub, des acc\u00e8s npm, des identifiants cloud, des secrets CI\/CD, des cl\u00e9s SSH ou encore certains secrets Kubernetes.<\/strong> Les diff\u00e9rentes vagues Shai-Hulud observ\u00e9es en 2026 ont pr\u00e9cis\u00e9ment cibl\u00e9 ce type d\u2019informations.<\/p>\n\n\n\n<p>Si un jeton vol\u00e9 permet de publier un autre package, de modifier un d\u00e9p\u00f4t ou d\u2019utiliser un pipeline de publication, l\u2019attaque peut alors continuer \u00e0 se propager.<\/p>\n\n\n\n<p>On obtient donc potentiellement :<\/p>\n\n\n\n<p><strong>Package compromis \u2192 machine ou CI\/CD \u2192 secrets vol\u00e9s \u2192 compte compromis \u2192 nouveau package compromis \u2192 nouveaux utilisateurs expos\u00e9s<\/strong><\/p>\n\n\n\n<p>C\u2019est cet effet en cha\u00eene qui transforme une compromission technique en v\u00e9ritable attaque de supply chain.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/aptinforma.com\/wp-content\/uploads\/2026\/08\/supply-chain.png\" alt=\"Infographie expliquant le cycle d\u2019une attaque Shai-Hulud : package npm compromis, ex\u00e9cution CI\/CD, vol de secrets, publication compromise et propagation.\" class=\"wp-image-54\" srcset=\"https:\/\/www.aptinforma.com\/wp-content\/uploads\/2026\/08\/supply-chain.png 1536w, https:\/\/www.aptinforma.com\/wp-content\/uploads\/2026\/08\/supply-chain-300x200.png 300w, https:\/\/www.aptinforma.com\/wp-content\/uploads\/2026\/08\/supply-chain-1024x683.png 1024w, https:\/\/www.aptinforma.com\/wp-content\/uploads\/2026\/08\/supply-chain-768x512.png 768w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Pourquoi les pipelines CI\/CD sont-ils particuli\u00e8rement sensibles ?<\/h1>\n\n\n\n<p>Les pipelines CI\/CD repr\u00e9sentent une cible extr\u00eamement int\u00e9ressante.<\/p>\n\n\n\n<p>Pourquoi ?<\/p>\n\n\n\n<p>Parce qu\u2019ils disposent justement des autorisations n\u00e9cessaires pour automatiser le d\u00e9veloppement.<\/p>\n\n\n\n<p>Un pipeline peut par exemple :<\/p>\n\n\n\n<p><strong>compiler \u2192 tester \u2192 cr\u00e9er une image \u2192 acc\u00e9der \u00e0 un registre \u2192 publier un package \u2192 d\u00e9ployer dans le cloud.<\/strong><\/p>\n\n\n\n<p>Pour fonctionner, il doit donc souvent disposer de secrets.<\/p>\n\n\n\n<p>Un d\u00e9veloppeur n\u2019a normalement pas besoin d\u2019\u00e9crire directement ces secrets dans son code.<\/p>\n\n\n\n<p>Ils sont g\u00e9n\u00e9ralement stock\u00e9s dans GitHub Actions, GitLab CI, Jenkins, Azure DevOps ou une autre plateforme.<\/p>\n\n\n\n<p>C\u2019est une bonne pratique.<\/p>\n\n\n\n<p>Mais cela ne signifie pas que le secret est automatiquement prot\u00e9g\u00e9 contre tout code ex\u00e9cut\u00e9 dans le pipeline.<\/p>\n\n\n\n<p>Si une d\u00e9pendance compromise parvient \u00e0 ex\u00e9cuter du code pendant une installation ou une compilation, la question devient :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\u00c0 quoi ce processus a-t-il acc\u00e8s ?<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p>Les campagnes Mini Shai-Hulud observ\u00e9es au printemps 2026 ont justement vis\u00e9 les environnements de build et les runners CI\/CD afin d\u2019y r\u00e9cup\u00e9rer des informations sensibles.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">M\u00eame une cha\u00eene de publication moderne peut \u00eatre attaqu\u00e9e<\/h1>\n\n\n\n<p>Il serait tentant de penser :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u00ab Nous utilisons GitHub Actions, OIDC et des m\u00e9canismes de provenance, donc nous sommes prot\u00e9g\u00e9s. \u00bb<\/p>\n<\/blockquote>\n\n\n\n<p>Malheureusement, ce n\u2019est pas toujours suffisant.<\/p>\n\n\n\n<p>En mai 2026, une vague Mini Shai-Hulud li\u00e9e notamment \u00e0 TanStack a compromis des m\u00e9canismes de publication en s\u2019attaquant directement au workflow de build.<\/p>\n\n\n\n<p>Akamai a document\u00e9 une attaque exploitant le pipeline CI et le m\u00e9canisme de publication OIDC de npm.<\/p>\n\n\n\n<p>Cela illustre une distinction fondamentale.<\/p>\n\n\n\n<p>Une signature ou une attestation de provenance peut permettre de v\u00e9rifier :<\/p>\n\n\n\n<p><strong>\u00ab Ce package a bien \u00e9t\u00e9 produit par le pipeline attendu. \u00bb<\/strong><\/p>\n\n\n\n<p>Mais si le pipeline lui-m\u00eame est compromis, cela ne garantit pas n\u00e9cessairement :<\/p>\n\n\n\n<p><strong>\u00ab Le code produit par ce pipeline est s\u00fbr. \u00bb<\/strong><\/p>\n\n\n\n<p>Autrement dit :<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La confiance dans la cha\u00eene ne vaut que si chaque maillon est ma\u00eetris\u00e9.<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Une menace qui a continu\u00e9 \u00e0 \u00e9voluer en 2026<\/h1>\n\n\n\n<p>Les campagnes Shai-Hulud ne se r\u00e9sument pas \u00e0 un incident unique.<\/p>\n\n\n\n<p>Au printemps 2026, diff\u00e9rentes vagues ont touch\u00e9 plusieurs \u00e9cosyst\u00e8mes et projets.<\/p>\n\n\n\n<p>Le NHS britannique a par exemple publi\u00e9 en mai une alerte concernant Mini Shai-Hulud, citant notamment des packages li\u00e9s \u00e0 <strong>TanStack, Mistral AI, UiPath et OpenSearch<\/strong>.<\/p>\n\n\n\n<p>Quelques jours plus tard, une nouvelle vague touchait plus de 300 packages de l\u2019\u00e9cosyst\u00e8me <code>@antv<\/code>.<\/p>\n\n\n\n<p>En juin, des packages officiels <code>@redhat-cloud-services<\/code> ont \u00e9galement \u00e9t\u00e9 compromis, avec 96 versions r\u00e9parties sur 32 packages d\u00e9tect\u00e9es par Aikido.<\/p>\n\n\n\n<p>Puis, d\u00e9but ao\u00fbt 2026, une nouvelle variante baptis\u00e9e <strong>ChainDrop<\/strong> a encore \u00e9tendu le ph\u00e9nom\u00e8ne.<\/p>\n\n\n\n<p>Selon les informations rapport\u00e9es \u00e0 partir des recherches d\u2019Aikido, plus de <strong>1 300 versions de packages npm<\/strong> ont \u00e9t\u00e9 compromises dans cette campagne, avec des biblioth\u00e8ques tr\u00e8s utilis\u00e9es telles que Keyv et Cacheable dans la cha\u00eene d\u2019impact.<\/p>\n\n\n\n<p>Le probl\u00e8me doit donc \u00eatre consid\u00e9r\u00e9 comme <strong>une famille de techniques et de campagnes \u00e9volutives<\/strong>, plut\u00f4t qu\u2019une menace que l\u2019on pourrait simplement d\u00e9clarer termin\u00e9e.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Une d\u00e9pendance populaire n\u2019est pas automatiquement une d\u00e9pendance s\u00fbre<\/h1>\n\n\n\n<p>Une erreur fr\u00e9quente consiste \u00e0 associer popularit\u00e9 et s\u00e9curit\u00e9.<\/p>\n\n\n\n<p>Un d\u00e9veloppeur peut se dire :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u00ab Ce package est t\u00e9l\u00e9charg\u00e9 des millions de fois, donc il doit \u00eatre fiable. \u00bb<\/p>\n<\/blockquote>\n\n\n\n<p>Ce raisonnement est compr\u00e9hensible, mais insuffisant.<\/p>\n\n\n\n<p>Un package peut \u00eatre parfaitement l\u00e9gitime pendant plusieurs ann\u00e9es, puis \u00eatre compromis parce que :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>le compte d\u2019un mainteneur est pirat\u00e9 ;<\/li>\n\n\n\n<li>un jeton de publication est vol\u00e9 ;<\/li>\n\n\n\n<li>un workflow CI\/CD est modifi\u00e9 ;<\/li>\n\n\n\n<li>un poste d\u00e9veloppeur est compromis ;<\/li>\n\n\n\n<li>une d\u00e9pendance indirecte est contamin\u00e9e.<\/li>\n<\/ul>\n\n\n\n<p>Le risque ne vient donc pas forc\u00e9ment du fait d\u2019avoir choisi un projet douteux.<\/p>\n\n\n\n<p>Il peut provenir de la <strong>compromission ult\u00e9rieure d\u2019un projet parfaitement l\u00e9gitime<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Comment r\u00e9duire le risque ?<\/h1>\n\n\n\n<p>Il n\u2019existe pas de bouton permettant de supprimer totalement le risque li\u00e9 \u00e0 la supply chain.<\/p>\n\n\n\n<p>L\u2019objectif est donc d\u2019appliquer plusieurs couches de protection.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Ma\u00eetriser les versions r\u00e9ellement install\u00e9es<\/h2>\n\n\n\n<p>Les fichiers de verrouillage comme :<\/p>\n\n\n\n<p><code>package-lock.json<\/code><\/p>\n\n\n\n<p><code>pnpm-lock.yaml<\/code><\/p>\n\n\n\n<p>ou<\/p>\n\n\n\n<p><code>yarn.lock<\/code><\/p>\n\n\n\n<p>permettent de conserver une vision d\u00e9terministe des versions install\u00e9es.<\/p>\n\n\n\n<p>Il est g\u00e9n\u00e9ralement pr\u00e9f\u00e9rable qu\u2019une nouvelle version de d\u00e9pendance ne se retrouve pas en production simplement parce qu\u2019elle vient d\u2019\u00eatre publi\u00e9e quelques minutes auparavant.<\/p>\n\n\n\n<p>Les mises \u00e0 jour doivent faire partie d\u2019un processus contr\u00f4l\u00e9.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2. Scanner les d\u00e9pendances<\/h2>\n\n\n\n<p>Les outils SCA \u2014 <strong>Software Composition Analysis<\/strong> \u2014 peuvent analyser les d\u00e9pendances utilis\u00e9es par une application.<\/p>\n\n\n\n<p>Ils permettent notamment de d\u00e9tecter :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>des vuln\u00e9rabilit\u00e9s connues ;<\/li>\n\n\n\n<li>des packages probl\u00e9matiques ;<\/li>\n\n\n\n<li>certaines d\u00e9pendances malveillantes ;<\/li>\n\n\n\n<li>des versions obsol\u00e8tes ;<\/li>\n\n\n\n<li>des risques li\u00e9s \u00e0 la licence ou \u00e0 la maintenance.<\/li>\n<\/ul>\n\n\n\n<p>Mais aucun scanner n\u2019est parfait.<\/p>\n\n\n\n<p>Une attaque toute r\u00e9cente peut ex\u00e9cuter son code avant m\u00eame que les outils de s\u00e9curit\u00e9 aient identifi\u00e9 le package.<\/p>\n\n\n\n<p>Aikido soulignait pr\u00e9cis\u00e9ment ce probl\u00e8me lors des vagues Mini Shai-Hulud : dans certains cas, le payload s\u2019ex\u00e9cutait au moment de l\u2019installation, avant que la d\u00e9tection g\u00e9n\u00e9ralis\u00e9e ne soit disponible.<\/p>\n\n\n\n<p>Le scanner doit donc \u00eatre consid\u00e9r\u00e9 comme <strong>une couche de s\u00e9curit\u00e9<\/strong>, pas comme l\u2019unique protection.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. R\u00e9duire les privil\u00e8ges des environnements CI\/CD<\/h1>\n\n\n\n<p>Un pipeline CI n\u2019a pas besoin d\u2019avoir acc\u00e8s \u00e0 tous les secrets de l\u2019entreprise.<\/p>\n\n\n\n<p>C\u2019est ici que le principe du <strong>moindre privil\u00e8ge<\/strong> devient essentiel.<\/p>\n\n\n\n<p>Un pipeline destin\u00e9 uniquement \u00e0 ex\u00e9cuter des tests ne devrait pas disposer automatiquement :<\/p>\n\n\n\n<p><strong>des droits de production, des cl\u00e9s cloud administrateur et des secrets de d\u00e9ploiement.<\/strong><\/p>\n\n\n\n<p>Plus les permissions sont limit\u00e9es, plus l\u2019impact d\u2019une d\u00e9pendance compromise peut \u00eatre contenu.<\/p>\n\n\n\n<p>On retrouve ici une r\u00e8gle classique de cybers\u00e9curit\u00e9 :<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Un secret inaccessible ne peut pas \u00eatre vol\u00e9 par ce processus.<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. S\u00e9parer les diff\u00e9rentes \u00e9tapes<\/h1>\n\n\n\n<p>Il peut \u00e9galement \u00eatre pertinent de s\u00e9parer :<\/p>\n\n\n\n<p><strong>Build \u2192 Tests \u2192 Publication \u2192 D\u00e9ploiement<\/strong><\/p>\n\n\n\n<p>plut\u00f4t que d\u2019ex\u00e9cuter toutes ces \u00e9tapes dans un environnement disposant simultan\u00e9ment de tous les acc\u00e8s.<\/p>\n\n\n\n<p>Un environnement de build compromis ne devrait id\u00e9alement pas pouvoir imm\u00e9diatement devenir administrateur de l\u2019infrastructure de production.<\/p>\n\n\n\n<p>Cette segmentation r\u00e9duit le <strong>blast radius<\/strong>, c\u2019est-\u00e0-dire l\u2019ampleur potentielle d\u2019une compromission.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. Utiliser des identifiants temporaires lorsque c\u2019est possible<\/h1>\n\n\n\n<p>Les secrets permanents constituent une cible particuli\u00e8rement int\u00e9ressante.<\/p>\n\n\n\n<p>Une cl\u00e9 cloud valable pendant plusieurs ann\u00e9es peut rester exploitable longtemps apr\u00e8s son vol.<\/p>\n\n\n\n<p>Les m\u00e9canismes modernes permettant d\u2019utiliser des <strong>identifiants temporaires<\/strong>, des r\u00f4les ou de l\u2019OIDC r\u00e9duisent cette fen\u00eatre d\u2019exploitation.<\/p>\n\n\n\n<p>Mais, comme l\u2019ont montr\u00e9 certaines campagnes 2026, cela ne supprime pas la n\u00e9cessit\u00e9 de s\u00e9curiser le pipeline lui-m\u00eame.<\/p>\n\n\n\n<p>Il faut donc combiner :<\/p>\n\n\n\n<p><strong>identifiants courts + moindre privil\u00e8ge + pipeline s\u00e9curis\u00e9 + surveillance.<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. Prot\u00e9ger les comptes des mainteneurs et d\u00e9veloppeurs<\/h1>\n\n\n\n<p>Les comptes GitHub, npm ou autres outils de d\u00e9veloppement doivent \u00eatre trait\u00e9s comme des comptes sensibles.<\/p>\n\n\n\n<p>Cela implique notamment :<\/p>\n\n\n\n<p><strong>MFA<\/strong>, gestion rigoureuse des sessions, limitation des jetons, rotation des secrets et suppression des acc\u00e8s devenus inutiles.<\/p>\n\n\n\n<p>L\u2019importance de ces protections a encore \u00e9t\u00e9 illustr\u00e9e en mai 2026 lorsque npm a invalid\u00e9 des jetons granulaires disposant de droits d\u2019\u00e9criture et pouvant contourner la 2FA, dans le contexte des campagnes Mini Shai-Hulud.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. Savoir exactement quelles d\u00e9pendances sont utilis\u00e9es<\/h1>\n\n\n\n<p>Il est difficile de prot\u00e9ger une supply chain si personne ne sait r\u00e9ellement ce qu\u2019elle contient.<\/p>\n\n\n\n<p>C\u2019est ici qu\u2019un <strong>SBOM \u2014 Software Bill of Materials<\/strong> \u2014 peut \u00eatre utile.<\/p>\n\n\n\n<p>On peut le comparer \u00e0 la liste des ingr\u00e9dients d\u2019un logiciel.<\/p>\n\n\n\n<p>Il permet de conserver une vision structur\u00e9e des composants int\u00e9gr\u00e9s dans une application.<\/p>\n\n\n\n<p>Lorsqu\u2019une vuln\u00e9rabilit\u00e9 ou une compromission importante appara\u00eet, la question n\u2019est alors plus :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u00ab Est-ce qu\u2019on utilise peut-\u00eatre cette librairie quelque part ? \u00bb<\/p>\n<\/blockquote>\n\n\n\n<p>mais :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\u00ab Quels produits, quelles versions et quels environnements utilisent cette d\u00e9pendance ? \u00bb<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p>Cette capacit\u00e9 \u00e0 r\u00e9pondre rapidement peut faire une \u00e9norme diff\u00e9rence lors d\u2019un incident.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Que faire si une d\u00e9pendance compromise a d\u00e9j\u00e0 \u00e9t\u00e9 install\u00e9e ?<\/h1>\n\n\n\n<p>Supprimer le package et relancer un <code>npm install<\/code> propre n\u2019est pas n\u00e9cessairement suffisant.<\/p>\n\n\n\n<p>Si du code malveillant a d\u00e9j\u00e0 \u00e9t\u00e9 ex\u00e9cut\u00e9, il faut partir du principe qu\u2019il a potentiellement pu acc\u00e9der aux secrets disponibles dans cet environnement.<\/p>\n\n\n\n<p>Dans le cas de la r\u00e9cente campagne ChainDrop, les chercheurs ont recommand\u00e9 de consid\u00e9rer un poste de d\u00e9veloppement ou un runner CI\/CD ayant ex\u00e9cut\u00e9 une version contamin\u00e9e comme <strong>potentiellement compromis<\/strong>, m\u00eame apr\u00e8s suppression du package.<\/p>\n\n\n\n<p>La r\u00e9ponse peut alors impliquer :<\/p>\n\n\n\n<p><strong>isoler l\u2019environnement \u2192 rechercher les traces de compromission \u2192 r\u00e9voquer les sessions \u2192 renouveler les secrets \u2192 v\u00e9rifier les d\u00e9p\u00f4ts et workflows \u2192 reconstruire proprement l\u2019environnement.<\/strong><\/p>\n\n\n\n<p>C\u2019est exactement ce qu\u2019OpenAI a expliqu\u00e9 avoir fait apr\u00e8s avoir identifi\u00e9 en mai 2026 deux postes internes affect\u00e9s par la compromission TanStack : isolation, r\u00e9vocation de sessions, rotation des identifiants concern\u00e9s et restriction temporaire de certains workflows de d\u00e9ploiement. OpenAI indiquait n\u2019avoir trouv\u00e9 aucune preuve d\u2019acc\u00e8s aux donn\u00e9es utilisateurs ni de compromission de ses syst\u00e8mes de production.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Le v\u00e9ritable enseignement de Shai-Hulud<\/h1>\n\n\n\n<p>Le message principal n\u2019est pas :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u00ab N\u2019utilisez plus npm. \u00bb<\/p>\n<\/blockquote>\n\n\n\n<p>Ni m\u00eame :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u00ab N\u2019utilisez plus l\u2019open source. \u00bb<\/p>\n<\/blockquote>\n\n\n\n<p>Ce serait irr\u00e9aliste.<\/p>\n\n\n\n<p>L\u2019open source est aujourd\u2019hui un \u00e9l\u00e9ment essentiel du d\u00e9veloppement logiciel.<\/p>\n\n\n\n<p>La bonne conclusion est plut\u00f4t :<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Une d\u00e9pendance externe fait partie de votre surface d\u2019attaque.<\/h2>\n\n\n\n<p>La cybers\u00e9curit\u00e9 d\u2019une application ne commence donc plus uniquement \u00e0 la fronti\u00e8re du serveur de production.<\/p>\n\n\n\n<p>Elle commence d\u00e8s :<\/p>\n\n\n\n<p><strong>le poste d\u00e9veloppeur \u2192 le d\u00e9p\u00f4t Git \u2192 les d\u00e9pendances \u2192 le pipeline CI\/CD \u2192 le registre \u2192 l\u2019infrastructure \u2192 la production.<\/strong><\/p>\n\n\n\n<p>C\u2019est toute cette cha\u00eene qu\u2019il faut s\u00e9curiser.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">D\u00e9veloppement rapide ne doit pas signifier confiance aveugle<\/h1>\n\n\n\n<p>Les outils modernes permettent aujourd\u2019hui de cr\u00e9er une application extr\u00eamement rapidement.<\/p>\n\n\n\n<p>Frameworks, biblioth\u00e8ques open source, containers, CI\/CD et d\u00e9sormais assistants IA acc\u00e9l\u00e8rent \u00e9norm\u00e9ment le d\u00e9veloppement.<\/p>\n\n\n\n<p>Mais cette vitesse augmente \u00e9galement le nombre d\u2019\u00e9l\u00e9ments que l\u2019on int\u00e8gre.<\/p>\n\n\n\n<p>Un d\u00e9veloppeur peut ajouter une nouvelle biblioth\u00e8que en quelques secondes.<\/p>\n\n\n\n<p>Une IA de d\u00e9veloppement peut elle aussi proposer puis installer automatiquement plusieurs d\u00e9pendances.<\/p>\n\n\n\n<p>Cette facilit\u00e9 rend progressivement indispensable une politique claire :<\/p>\n\n\n\n<p><strong>quels packages pouvons-nous utiliser ?<\/strong><\/p>\n\n\n\n<p><strong>qui valide les nouvelles d\u00e9pendances ?<\/strong><\/p>\n\n\n\n<p><strong>comment sont-elles mises \u00e0 jour ?<\/strong><\/p>\n\n\n\n<p><strong>quels outils les analysent ?<\/strong><\/p>\n\n\n\n<p><strong>quels secrets sont accessibles pendant leur installation ?<\/strong><\/p>\n\n\n\n<p>Ces questions ne concernent plus uniquement les tr\u00e8s grandes entreprises.<\/p>\n\n\n\n<p>Une PME disposant d\u2019une application m\u00e9tier, d\u2019un site e-commerce ou d\u2019un logiciel SaaS peut elle aussi d\u00e9pendre d\u2019une importante cha\u00eene de composants externes.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Comment APT Informa aborde la s\u00e9curit\u00e9 de la supply chain<\/h1>\n\n\n\n<p>Chez <strong>APT Informa<\/strong>, nous consid\u00e9rons que la s\u00e9curit\u00e9 doit \u00eatre int\u00e9gr\u00e9e d\u00e8s la conception des applications et des infrastructures.<\/p>\n\n\n\n<p>Cela signifie notamment prendre en compte :<\/p>\n\n\n\n<p><strong>le code<\/strong>, mais aussi <strong>les d\u00e9pendances, les d\u00e9p\u00f4ts Git, la CI\/CD, les secrets, l\u2019infrastructure et les m\u00e9canismes de d\u00e9ploiement.<\/strong><\/p>\n\n\n\n<p>Lors de la conception ou de l\u2019\u00e9volution d\u2019une application, plusieurs mesures peuvent \u00eatre mises en place selon le contexte :<\/p>\n\n\n\n<p>contr\u00f4le et analyse des d\u00e9pendances, automatisation des mises \u00e0 jour, isolation des environnements, gestion s\u00e9curis\u00e9e des secrets, restriction des permissions CI\/CD, scans de s\u00e9curit\u00e9 et supervision des composants utilis\u00e9s.<\/p>\n\n\n\n<p>Le but n\u2019est pas d\u2019empiler vingt outils de cybers\u00e9curit\u00e9.<\/p>\n\n\n\n<p>Le but est de construire une cha\u00eene :<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>compr\u00e9hensible, ma\u00eetris\u00e9e, surveill\u00e9e et capable de r\u00e9agir lorsqu\u2019un composant externe devient dangereux.<\/strong><\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Ce qu\u2019il faut retenir<\/h1>\n\n\n\n<p>Shai-Hulud montre \u00e0 quel point une application peut \u00eatre compromise <strong>sans que l\u2019attaquant n\u2019attaque directement son code m\u00e9tier<\/strong>.<\/p>\n\n\n\n<p>Un composant l\u00e9gitime peut \u00eatre d\u00e9tourn\u00e9.<\/p>\n\n\n\n<p>Un compte de mainteneur peut \u00eatre compromis.<\/p>\n\n\n\n<p>Un pipeline peut publier une version malveillante.<\/p>\n\n\n\n<p>Et quelques minutes plus tard, cette version peut \u00eatre install\u00e9e automatiquement dans de nombreux environnements.<\/p>\n\n\n\n<p>La question ne doit donc plus \u00eatre uniquement :<\/p>\n\n\n\n<p><strong>\u00ab Notre application contient-elle des vuln\u00e9rabilit\u00e9s ? \u00bb<\/strong><\/p>\n\n\n\n<p>Mais aussi :<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>\u00ab Peut-on r\u00e9ellement faire confiance \u00e0 toute la cha\u00eene qui construit notre application ? \u00bb<\/strong><\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">APT Informa peut vous accompagner<\/h2>\n\n\n\n<p>Vous d\u00e9veloppez une application, utilisez des pipelines CI\/CD ou souhaitez renforcer la s\u00e9curit\u00e9 de votre infrastructure de d\u00e9veloppement ?<\/p>\n\n\n\n<p><strong>APT Informa peut vous accompagner dans l\u2019analyse de votre cha\u00eene logicielle, la s\u00e9curisation des d\u00e9pendances, la gestion des secrets et la mise en place d\u2019une approche DevSecOps adapt\u00e9e \u00e0 votre organisation.<\/strong><\/p>\n\n\n\n<p>L\u2019objectif : <strong>r\u00e9duire la surface d\u2019attaque sans ralentir inutilement vos \u00e9quipes de d\u00e9veloppement.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Shai-Hulud illustre les nouveaux risques li\u00e9s aux d\u00e9pendances open source et aux pipelines CI\/CD. D\u00e9couvrez comment une attaque de supply chain npm peut se propager et quelles mesures permettent de prot\u00e9ger ses applications, ses secrets et son infrastructure.<\/p>\n","protected":false},"author":1,"featured_media":53,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,4,5],"tags":[95,23,99,96,97,92,100,101,102,94,91,93],"class_list":["post-52","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cybersecurite","category-developpement-web","category-infrastructure","tag-ci-cd","tag-cybersecurite","tag-dependances","tag-devsecops","tag-github","tag-npm","tag-open-source","tag-sbom","tag-securite-des-secrets","tag-securite-logicielle","tag-shai-hulud","tag-supply-chain"],"_links":{"self":[{"href":"https:\/\/www.aptinforma.com\/blog\/wp-json\/wp\/v2\/posts\/52","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.aptinforma.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.aptinforma.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.aptinforma.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.aptinforma.com\/blog\/wp-json\/wp\/v2\/comments?post=52"}],"version-history":[{"count":1,"href":"https:\/\/www.aptinforma.com\/blog\/wp-json\/wp\/v2\/posts\/52\/revisions"}],"predecessor-version":[{"id":55,"href":"https:\/\/www.aptinforma.com\/blog\/wp-json\/wp\/v2\/posts\/52\/revisions\/55"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.aptinforma.com\/blog\/wp-json\/wp\/v2\/media\/53"}],"wp:attachment":[{"href":"https:\/\/www.aptinforma.com\/blog\/wp-json\/wp\/v2\/media?parent=52"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.aptinforma.com\/blog\/wp-json\/wp\/v2\/categories?post=52"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.aptinforma.com\/blog\/wp-json\/wp\/v2\/tags?post=52"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}