Categories Cybersécurité

npm v12 : fini les scripts automatiques à l’installation

&NewLine;<p class&equals;"wp-block-paragraph">Le 9 juin 2026&comma; GitHub a publié une annonce discrète dans son historique des modifications qui a fait l&rsquo&semi;effet d&rsquo&semi;une petite bombe dans la communauté JavaScript mondiale&period; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">npm v12&comma; la prochaine version majeure du plus grand gestionnaire de paquets du monde&comma; va désactiver par défaut les scripts automatiques lors de l&rsquo&semi;installation&period; Ce changement semble technique et anodin&period; Il ne l&rsquo&semi;est pas&period; C&rsquo&semi;est l&rsquo&semi;une des transformations de sécurité les plus significatives dans l&rsquo&semi;histoire de l&rsquo&semi;écosystème JavaScript&comma; une décision qui répond à une décennie d&rsquo&semi;attaques supply chain qui ont coûté des milliards de dollars à des entreprises dans le monde entier&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Dans cet article&comma; on explique ce changement de fond en comble&period; Pas seulement pour les développeurs&comma; mais pour toute personne qui utilise ou finance un produit logiciel construit avec du JavaScript&comma; c&rsquo&semi;est-à-dire potentiellement tout le monde&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">npm et les scripts d&rsquo&semi;installation<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Avant d&rsquo&semi;entrer dans le vif du sujet&comma; posons les bases pour que tout le monde soit à bord&period; Qu&rsquo&semi;est-ce que npm et qu&rsquo&semi;est-ce qu&rsquo&semi;un script d&rsquo&semi;installation &quest;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">npm &colon; le supermarché des briques logicielles<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">npm &lpar;Node Package Manager&rpar; est une plateforme en ligne qui héberge des millions de petits morceaux de code JavaScript&comma; appelés packages ou paquets&period; Quand un développeur construit une application web &lpar;un site e-commerce&comma; une application mobile&comma; un outil interne d&rsquo&semi;entreprise&rpar; il n&rsquo&semi;écrit pas tout le code depuis zéro&period; Il installe des packages préexistants qui font des choses précises &colon; envoyer des emails&comma; gérer des images&comma; compresser des vidéos&comma; authentifier des utilisateurs&comma; etc&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">La commande magique pour tout ça est npm install&period; Vous tapez ces deux mots dans votre terminal&comma; et npm va sur internet&comma; télécharge tous les packages dont votre projet a besoin&comma; et les installe automatiquement&period; Des centaines&comma; parfois des milliers de packages&comma; en quelques secondes&period; C&rsquo&semi;est incroyablement pratique&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">📦 Imaginez que vous construisez une maison&period; Plutôt que de fabriquer vous-même chaque brique&comma; chaque tuyau et chaque interrupteur&comma; vous les commandez au supermarché du bâtiment&period; npm&comma; c&rsquo&semi;est ce supermarché mais pour le code JavaScript&period; Et npm install&comma; c&rsquo&semi;est votre commande de livraison express&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">Les scripts d&rsquo&semi;installation &colon; du code qui s&rsquo&semi;exécute sans vous demander<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Là où ça devient intéressant et problématique&comma; c&rsquo&semi;est avec les scripts d&rsquo&semi;installation&period; De nombreux packages ont besoin d&rsquo&semi;effectuer des actions pendant leur installation &colon; compiler du code natif&comma; télécharger des fichiers supplémentaires&comma; configurer des variables d&rsquo&semi;environnement&comma; créer des dossiers&period; Pour ça&comma; npm leur permet d&rsquo&semi;inclure des scripts qui s&rsquo&semi;exécutent automatiquement à différents moments du processus d&rsquo&semi;installation&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list">&NewLine;<li>preinstall &colon; s&rsquo&semi;exécute AVANT l&rsquo&semi;installation du package&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>install &colon; s&rsquo&semi;exécute PENDANT l&rsquo&semi;installation&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>postinstall &colon; s&rsquo&semi;exécute APRÈS l&rsquo&semi;installation&comma; le plus utilisé et le plus abusé<&sol;li>&NewLine;<&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Ces scripts peuvent faire pratiquement n&rsquo&semi;importe quoi sur votre machine&period; Écrire des fichiers&period; Se connecter à internet&period; Lire vos variables d&rsquo&semi;environnement &lpar;qui contiennent souvent des mots de passe et des clés API&rpar;&period; Exécuter des commandes système&period; Jusqu&rsquo&semi;à npm v12&comma; tout ça se passait automatiquement&comma; sans vous demander la permission&comma; dès que vous tapiez npm install&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">🚨 Jusqu&rsquo&semi;à présent&comma; installer un package npm revenait à donner les clés de votre appartement à un inconnu en lui disant &lsquo&semi;installez ce truc dans le salon&comma; fais attention&rsquo&semi;&period; Il pouvait se servir dans le frigo&comma; copier des documents sur la table&comma; ou laisser une porte dérobée&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">Le problème de sécurité que npm v12 résout enfin<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Les scripts d&rsquo&semi;installation automatiques sont le vecteur d&rsquo&semi;attaque le plus utilisé dans les attaques supply chain JavaScript depuis des années&period; L&rsquo&semi;échelle du problème en 2025 et 2026 est véritablement alarmante&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<figure class&equals;"wp-block-table"><table class&equals;"has-fixed-layout"><thead><tr><td><strong>Statistique<&sol;strong><&sol;td><td><strong>Valeur<&sol;strong><&sol;td><td><strong>Source<&sol;strong><&sol;td><&sol;tr><&sol;thead><tbody><tr><td>Packages malveillants publiés sur npm en 2025<&sol;td><td>~455 000<&sol;td><td>Étude sécurité 2026<&sol;td><&sol;tr><tr><td>Attaque Miasma &lpar;juin 2026&rpar; &colon; packages Red Hat infectés<&sol;td><td>32 puis &plus;57<&sol;td><td>Wiz Research&comma; Snyk<&sol;td><&sol;tr><tr><td>Attaque Phantom Gyp &lpar;3 juin 2026&rpar; &colon; repos Azure touchés<&sol;td><td>73 repositories<&sol;td><td>ByteIOTA<&sol;td><&sol;tr><tr><td>Heure nécessaire pour les 73 repos Azure<&sol;td><td>105 secondes<&sol;td><td>ByteIOTA<&sol;td><&sol;tr><tr><td>Coût moyen d&rsquo&semi;une attaque supply chain réussie<&sol;td><td>&dollar;1&comma;1 million USD<&sol;td><td>IBM Security 2025<&sol;td><&sol;tr><&sol;tbody><&sol;table><&sol;figure>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Le raisonnement est simple &colon; si vous pouvez publier un package avec un script postinstall malveillant&comma; et que npm exécute ce script automatiquement sur la machine de tout développeur qui installe votre package&comma; vous avez accès à ses identifiants AWS&comma; ses tokens GitHub&comma; ses clés SSH et potentiellement à tous les systèmes auxquels sa machine a accès&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Ce qui est particulièrement pernicieux dans cette attaque&comma; c&rsquo&semi;est sa propagation en cascade&period; Un package infecté peut&comma; dans son script postinstall&comma; chercher d&rsquo&semi;autres packages que le développeur maintient et y publier des versions infectées à leur tour&period; Un seul développeur compromis peut infecter des centaines de packages&period; Les victimes de ces packages infectés contaminent à leur tour d&rsquo&semi;autres projets&period; C&rsquo&semi;est la définition d&rsquo&semi;un ver informatique et c&rsquo&semi;est exactement ce que faisait Miasma&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">Le rôle de l&rsquo&semi;attaque Miasma et du Phantom Gyp dans le timing de npm v12<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Pourquoi npm v12 arrive-t-il en juillet 2026 et pas avant &quest; Parce que la pression des événements récents a rendu l&rsquo&semi;inaction politiquement impossible&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">Miasma &colon; Le ver qui a touché Red Hat en temps réel<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Le 1er juin 2026&comma; l&rsquo&semi;attaque Miasma a infecté 32 packages officiels de Red Hat sous le namespace &commat;redhat-cloud-services sur npm&period; Le malware utilisait précisément les scripts preinstall pour s&rsquo&semi;exécuter et voler des identifiants AWS&comma; tokens GitHub&comma; clés SSH&comma; et accès Kubernetes dès qu&rsquo&semi;un développeur faisait npm install&period; On a décrit cet incident en détail dans notre <a href&equals;"https&colon;&sol;&sol;www&period;tech-connect&period;info&sol;securite&sol;miasma-attaque-supply-chain-npm-red-hat-2026&sol;" data-type&equals;"post" data-id&equals;"6826">article dédié sur Miasma<&sol;a>&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Deux jours plus tard&comma; une deuxième vague plus sournoise est arrivée &colon; le Phantom Gyp&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">Phantom Gyp &colon; L&rsquo&semi;attaque que &&num;8211&semi;ignore-scripts ne bloquait pas<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">C&rsquo&semi;est là que ça devient diabolique&period; <strong>Le Phantom Gyp est une technique qui exploite une faille dans npm lui-même<&sol;strong>&comma; pas dans le code d&rsquo&semi;un package malveillant&period; Voici comment ça fonctionne&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">npm a une fonctionnalité pour compiler du code natif &lpar;C&sol;C&plus;&plus;&rpar; &colon; si un package contient un fichier appelé binding&period;gyp&comma; npm déclenche automatiquement un rebuild en C&plus;&plus; via l&rsquo&semi;outil node-gyp&period; Ce comportement est conçu pour les packages légitimes qui ont besoin de performance native &lpar;chiffrement&comma; traitement d&rsquo&semi;images&comma; etc&period;&rpar;&period; Et c&rsquo&semi;est automatique&comma; même si vous utilisez &&num;8211&semi;ignore-scripts&comma; qui était la protection habituelle contre les scripts malveillants&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">L&rsquo&semi;attaque Phantom Gyp place simplement un minuscule fichier binding&period;gyp &lpar;157 octets&rpar; dans un package compromis&period; npm voit le fichier&comma; exécute automatiquement node-gyp rebuild&comma; et le code malveillant s&rsquo&semi;exécute&period; Résultat &colon; le 3 juin 2026&comma; cette technique a compromis 73 dépôts Microsoft Azure en 105 secondes&period; &&num;8211&semi;ignore-scripts n&rsquo&semi;a rien vu passer&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">🎯&nbsp&semi; C&rsquo&semi;est cette attaque qui a forcé la main de GitHub&period; Quand &&num;8211&semi;ignore-scripts&comma; la protection que tout le monde recommandait&comma; ne protège plus&comma; il faut changer l&rsquo&semi;architecture de fond&period; npm v12 bloque le Phantom Gyp directement&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">Les 3 changements précis de npm v12<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">npm v12 introduit trois changements majeurs&comma; tous dans la même direction &colon; passer d&rsquo&semi;un modèle de confiance implicite &lpar;tout s&rsquo&semi;exécute par défaut&rpar; à un modèle de confiance explicite &lpar;rien ne s&rsquo&semi;exécute sauf ce que vous approuvez&rpar;&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">Changement &num;1 &colon; allowScripts passe à off &lpar;le plus impactant&rpar;<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">C&rsquo&semi;est le changement principal&period; À partir de npm v12&comma; npm install ne lancera plus les scripts preinstall&comma; install ou postinstall d&rsquo&semi;aucune dépendance&comma; sauf si vous les avez explicitement autorisés&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">&num; Avant npm v12 &lpar;comportement actuel&rpar; &colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">npm install&nbsp&semi;&nbsp&semi; &num; &srarr; exécute TOUS les scripts de TOUTES les dépendances<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">&num; Avec npm v12 &lpar;nouveau comportement par défaut&rpar; &colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">npm install&nbsp&semi;&nbsp&semi; &num; &srarr; n&rsquo&semi;exécute AUCUN script&comma; sauf ceux de votre allowlist<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Pour autoriser un script spécifique&comma; vous avez deux options&period; Soit la commande interactive &colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>npm approve-scripts esbuild&commat;0&period;21&period;5<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Soit directement dans votre package&period;json en ajoutant un champ allowScripts &colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>&lbrace;&NewLine;&NewLine; "allowScripts"&colon; &lbrace;&NewLine;&NewLine; "esbuild&commat;0&period;21&period;5"&colon; true&comma;&NewLine;&NewLine; "sharp&commat;0&period;33&period;5"&colon; true&comma;&NewLine;&NewLine; "node-gyp"&colon; true&NewLine;&NewLine; &rcub;&NewLine;&NewLine;&rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">⚠️ Point crucial sur la version utilisée &colon; autoriser esbuild&commat;0&period;21&period;5 n&rsquo&semi;autorise PAS esbuild&commat;0&period;22&period;0&period; Chaque mise à jour de version nécessite une nouvelle approbation manuelle&period; C&rsquo&semi;est intentionnel&comma; un attaquant qui publie une version vérolée d&rsquo&semi;un package ne peut plus se glisser sous la protection de votre allowlist existante&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">Changement &num;2 &colon; Git dependencies bloquées par défaut<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Vous avez peut-être l&rsquo&semi;habitude d&rsquo&semi;installer des packages directement depuis GitHub&comma; comme ça &colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">npm install github&colon;owner&sol;repo<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">À partir de npm v12&comma; ces dépendances Git sont bloquées par défaut&period; La raison &colon; un dépôt GitHub peut être compromis &lpar;comme l&rsquo&semi;ont montré les attaques via OIDC sur les GitHub Actions&rpar;&comma; et y installer directement un package bypass toutes les vérifications habituelles du registre npm&period; Pour les autoriser&comma; il faudra explicitement déclarer allowGit dans votre configuration&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">Changement &num;3 &colon; Remote URL dependencies bloquées<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">De même&comma; les installations directement depuis une URL distante &lpar;type npm install https&colon;&sol;&sol;example&period;com&sol;package&period;tgz&rpar; seront bloquées par défaut&period; Même logique &colon; une URL distante peut pointer vers n&rsquo&semi;importe quoi&comma; sans les garanties de provenance et d&rsquo&semi;intégrité du registre npm officiel&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<figure class&equals;"wp-block-table"><table class&equals;"has-fixed-layout"><thead><tr><td><strong>Comportement<&sol;strong><&sol;td><td><strong>Avant npm v12<&sol;strong><&sol;td><td><strong>Après npm v12<&sol;strong><&sol;td><td><strong>Pour l&rsquo&semi;activer<&sol;strong><&sol;td><&sol;tr><&sol;thead><tbody><tr><td>Scripts preinstall&sol;install&sol;postinstall<&sol;td><td>✠Auto<&sol;td><td>❌ Bloqué<&sol;td><td>allowScripts&colon; true dans package&period;json<&sol;td><&sol;tr><tr><td>node-gyp rebuild automatique<&sol;td><td>✠Auto<&sol;td><td>❌ Bloqué<&sol;td><td>allowScripts&colon; true pour le package<&sol;td><&sol;tr><tr><td>prepare scripts &lpar;git&sol;file deps&rpar;<&sol;td><td>✠Auto<&sol;td><td>❌ Bloqué<&sol;td><td>allowScripts dans la config<&sol;td><&sol;tr><tr><td>Dépendances GitHub &lpar;git&colon;&rpar;<&sol;td><td>✠Auto<&sol;td><td>❌ Bloqué<&sol;td><td>allowGit&colon; true dans la config<&sol;td><&sol;tr><tr><td>Dépendances URL distantes<&sol;td><td>✠Auto<&sol;td><td>❌ Bloqué<&sol;td><td>allowRemote&colon; true dans la config<&sol;td><&sol;tr><&sol;tbody><&sol;table><&sol;figure>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">Ce qui va concrètement casser dans votre projet<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">C&rsquo&semi;est la question que tous les développeurs se posent&period; La réponse honnête &colon; probablement plus de choses que vous ne le pensez&comma; parce que beaucoup de packages utilisent des scripts d&rsquo&semi;installation de façon invisible&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">Packages qui utilisent des scripts légitimes<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">De nombreux packages populaires et tout à fait légitimes ont besoin de leurs scripts d&rsquo&semi;installation pour fonctionner correctement&period; Parmi les plus courants &colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list">&NewLine;<li>esbuild &&num;8211&semi; le bundler JavaScript ultra-rapide &colon; son binaire natif est compilé via postinstall&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>sharp &&num;8211&semi; traitement d&rsquo&semi;images &colon; compile des liaisons libvips en C&plus;&plus; au moment de l&rsquo&semi;installation&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>canvas &&num;8211&semi; rendu canvas Node&period;js &colon; compile des liaisons Cairo&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>bcrypt &&num;8211&semi; hachage de mots de passe sécurisé &colon; compile des liaisons en C&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>node-sass &sol; sass &&num;8211&semi; compilation SCSS vers CSS &colon; compile des liaisons C&plus;&plus;&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Prisma &&num;8211&semi; ORM populaire &colon; génère le client typé en postinstall&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Husky &&num;8211&semi; git hooks &colon; configure les hooks via prepare&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Tout package avec un fichier binding&period;gyp déclenche node-gyp automatiquement&period;<&sol;li>&NewLine;<&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Ces packages continueront de fonctionner avec npm v12&comma; mais vous devrez les ajouter explicitement à votre allowlist&period; Ce qu&rsquo&semi;il ne se passera plus&comma; c&rsquo&semi;est que leur script s&rsquo&semi;exécute en silence sans votre accord&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">Comment détecter maintenant ce qui va casser<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">La bonne nouvelle &colon; npm 11&period;16&period;0 &lpar;déjà disponible&rpar; intègre tous les changements de v12 en mode avertissement&period; Ça signifie que vous pouvez tester dès aujourd&rsquo&semi;hui sans attendre juillet&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">&num; Mettez à jour npm vers 11&period;16&period;0 ou supérieur &colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>npm install -g npm&commat;latest<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">&num; Dans votre projet&comma; lancez npm install &colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>npm install<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">&num; &srarr; npm affichera des avertissements pour chaque script qui sera bloqué en v12<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Faites ça sur votre projet principal et notez tout ce qui apparaît en avertissement&period; Chaque avertissements est un script qui cassera quand npm v12 arrivera&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">Guide de migration &colon; Ce que vous devez faire avant juillet 2026<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">Étape 1 &&num;8211&semi; Inventaire &colon; que s&rsquo&semi;exécute-t-il dans mon npm install &quest;<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<ol class&equals;"wp-block-list">&NewLine;<li>Mettez à jour npm &colon; npm install -g npm&commat;latest<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Dans votre projet&comma; lancez &colon; npm install &&num;8211&semi;foreground-scripts 2&gt&semi;&amp&semi;1 &vert; grep warn<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Listez tous les packages qui déclenchent des avertissements<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Pour chaque package&comma; vérifiez &colon; son script est-il légitime &quest; Que fait-il exactement &quest;<&sol;li>&NewLine;<&sol;ol>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">Étape 2 &&num;8211&semi; Construire votre allowlist &lpar;liste autorisée&rpar;<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Une fois votre inventaire fait&comma; ajoutez les packages légitimes à votre allowlist dans package&period;json &colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>&lbrace;&NewLine;&NewLine; "name"&colon; "mon-projet"&comma;&NewLine;&NewLine; "allowScripts"&colon; &lbrace;&NewLine;&NewLine; "esbuild&commat;0&period;25&period;1"&colon; true&comma;&NewLine;&NewLine; "sharp&commat;0&period;33&period;5"&colon; true&comma;&NewLine;&NewLine; "prisma&commat;6&period;0&period;0"&colon; true&comma;&NewLine;&NewLine; "husky&commat;9&period;1&period;0"&colon; true&comma;&NewLine;&NewLine; "&commat;prisma&sol;client&commat;6&period;0&period;0"&colon; true&NewLine;&NewLine; &rcub;&NewLine;&NewLine;&rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">Étape 3 &&num;8211&semi; Approuver interactivement avec npm approve-scripts<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Pour une première migration&comma; la commande approve-scripts vous guide de façon interactive &colon;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code><em>npm approve-scripts --allow-scripts-pending<&sol;em><&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">&num; &srarr; npm liste chaque script en attente et vous demande &colon; Allow&quest; &lpar;y&sol;N&rpar;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">&num; &srarr; Pour chaque package&comma; npm affiche le code du script pour que vous puissiez l&rsquo&semi;inspecter<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h3 class&equals;"wp-block-heading">Étape 4 &colon; Mettre à jour votre pipeline CI&sol;CD<&sol;h3>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Dans votre fichier de pipeline &lpar;GitHub Actions&comma; GitLab CI&comma; Jenkins&&num;8230&semi;&rpar;&comma; si vous avez des étapes npm install&comma; elles continueront de fonctionner si votre allowlist est bien définie dans package&period;json&period; Mais si vous avez des scripts qui s&rsquo&semi;exécutent implicitement sans être dans l&rsquo&semi;allowlist&comma; votre build va casser&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">⏰ Échéance &colon; npm v12 est prévu pour juillet 2026&period; Vous avez environ 2-4 semaines pour auditer et mettre à jour vos projets&period; <&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">Packages les plus touchés &colon; Guide de référence rapide<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<figure class&equals;"wp-block-table"><table class&equals;"has-fixed-layout"><thead><tr><td><strong>Package<&sol;strong><&sol;td><td><strong>Usage<&sol;strong><&sol;td><td><strong>Impact v12<&sol;strong><&sol;td><td><strong>Action nécessaire<&sol;strong><&sol;td><&sol;tr><&sol;thead><tbody><tr><td>esbuild<&sol;td><td>Bundler JavaScript rapide<&sol;td><td>Binaire natif ne compile plus<&sol;td><td>allowScripts&colon; &lbrace; &lsquo&semi;esbuild&commat;x&period;x&period;x&rsquo&semi;&colon; true &rcub;<&sol;td><&sol;tr><tr><td>sharp<&sol;td><td>Traitement d&rsquo&semi;images<&sol;td><td>Liaisons libvips cassées<&sol;td><td>allowScripts&colon; &lbrace; &lsquo&semi;sharp&commat;x&period;x&period;x&rsquo&semi;&colon; true &rcub;<&sol;td><&sol;tr><tr><td>canvas<&sol;td><td>Rendu canvas<&sol;td><td>Liaisons Cairo cassées<&sol;td><td>allowScripts&colon; &lbrace; &lsquo&semi;canvas&commat;x&period;x&period;x&rsquo&semi;&colon; true &rcub;<&sol;td><&sol;tr><tr><td>bcrypt<&sol;td><td>Hash mots de passe<&sol;td><td>Liaisons C&plus;&plus; cassées<&sol;td><td>allowScripts&colon; &lbrace; &lsquo&semi;bcrypt&commat;x&period;x&period;x&rsquo&semi;&colon; true &rcub;<&sol;td><&sol;tr><tr><td>Prisma<&sol;td><td>ORM base de données<&sol;td><td>postinstall generate cassé<&sol;td><td>allowScripts&colon; &lbrace; &lsquo&semi;&commat;prisma&sol;client&rsquo&semi;&colon; true &rcub;<&sol;td><&sol;tr><tr><td>Husky<&sol;td><td>Git hooks pre-commit<&sol;td><td>prepare cassé<&sol;td><td>allowScripts&colon; &lbrace; &lsquo&semi;husky&commat;x&rsquo&semi;&colon; true &rcub;<&sol;td><&sol;tr><tr><td>node-sass<&sol;td><td>Compilation SCSS<&sol;td><td>Liaisons C&plus;&plus; cassées<&sol;td><td>allowScripts ou migrer vers sass<&sol;td><&sol;tr><tr><td>Tout package binding&period;gyp<&sol;td><td>Code natif C&sol;C&plus;&plus;<&sol;td><td>node-gyp rebuild bloqué<&sol;td><td>allowScripts avec le nom exact &plus; version<&sol;td><&sol;tr><&sol;tbody><&sol;table><&sol;figure>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">pnpm et Yarn l&rsquo&semi;avaient déjà<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Une question revient constamment dans les commentaires des développeurs depuis l&rsquo&semi;annonce &colon; pourquoi npm a-t-il mis si longtemps &quest; pnpm&comma; l&rsquo&semi;alternative de plus en plus populaire au npm classique&comma; a introduit le blocage des scripts par défaut il y a plus de 18 mois&period; Yarn 4 a une approche similaire depuis 2023&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">La réponse est dans la taille de l&rsquo&semi;écosystème&period; npm héberge plus de 2&comma;5 millions de packages et est utilisé par des centaines de millions de développeurs&period; Changer le comportement par défaut dans npm&comma; c&rsquo&semi;est risquer de casser des pipelines CI&sol;CD dans des milliers d&rsquo&semi;entreprises simultanément&period; C&rsquo&semi;est un changement à fort impact potentiel&comma; ce qui explique la prudence historique&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Ce qui a changé la donne en 2026&comma; c&rsquo&semi;est la pression accumulée des incidents &colon; Miasma&comma; Phantom Gyp&comma; le bilan de 455 000 packages malveillants en 2025&period; À un moment&comma; continuer à protéger la commodité au détriment de la sécurité devient intenable surtout quand les alternatives &lpar;pnpm&comma; Yarn 4&rpar; démontrent que le modèle restrictif est viable&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">💡&nbsp&semi; Si vous cherchez à anticiper ces changements encore plus vite &colon; pnpm &lpar;pnpm&period;io&rpar; a déjà ce comportement par défaut depuis 2025&period; Migrer de npm à pnpm est moins compliqué que ça n&rsquo&semi;y paraît&comma; et vous met déjà en sécurité sans attendre juillet&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<h2 class&equals;"wp-block-heading">Ce que npm v12 ne résout PAS<&sol;h2>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">La communauté de sécurité accueille npm v12 positivement&period; Mais certains experts soulèvent une critique légitime &colon; ces changements sont nécessaires mais insuffisants&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list">&NewLine;<li>Le registre npm n&rsquo&semi;analyse toujours pas les packages avant publication &colon; n&rsquo&semi;importe qui peut publier un package malveillant en quelques secondes&comma; sans aucune vérification de contenu&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Les typosquatters &lpar;packages avec des noms similaires aux vrais&rpar; restent une menace&comma; npm v12 ne les bloque pas&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Les packages déjà installés dans votre node&lowbar;modules ne sont pas re-vérifiés&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Les scripts dans vos propres package&period;json &lpar;vos scripts à vous&comma; pas les dépendances&rpar; restent inchangés&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Un attaquant qui réussit à compromettre le registre npm lui-même &lpar;et pas juste un package&rpar; peut toujours distribuer du code malveillant&period;<&sol;li>&NewLine;<&sol;ul>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">La plateforme OpenSource Malware l&rsquo&semi;a bien résumé &colon; npm v12 résout un problème spécifique qui représentait 80&percnt; des vecteurs d&rsquo&semi;attaque&period; C&rsquo&semi;est une victoire majeure&period; Mais ce n&rsquo&semi;est pas la fin de la supply chain security&comma; c&rsquo&semi;est le début d&rsquo&semi;une nouvelle ère où d&rsquo&semi;autres vecteurs prendront le relais&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<ul class&equals;"wp-block-list">&NewLine;<li>Recommandation complémentaire &colon; activez aussi min-release-age dans npm 11&period;10&period;0&plus; &lpar;ne pas installer une version publiée il y a moins de X jours&rpar;&comma; c&rsquo&semi;est l&rsquo&semi;une des protections les plus efficaces contre les attaques opportunistes&period;<&sol;li>&NewLine;<&sol;ul>&NewLine;

Partager
Kamleu Noumi Emeric

Je suis un ingénieur en télécommunications et je suis le créateur du site tech-connect.info. J'ai une grande passion pour l'art, les hautes technologies, les jeux, les vidéos et le design. Aimant partager mes connaissances, Je suis également blogueur pendant mon temps libre. Vous pouvez me suivre sur ma page sociale Facebook.

Articles récents

Miasma : une nouvelle vague d’attaques supply chain npm frappe Red Hat

Lundi 1er juin 2026. Il est 10h54 UTC. Dans l'obscurité des dépôts GitHub, quelqu'un vient…

19 juin 2026

5G en Afrique subsaharienne en 2026 : qui déploie quoi, dans quels pays, à quel prix ?

En Afrique subsaharienne, une révolution numérique est en train de se jouer discrètement, loin des…

18 juin 2026

Le gouvernement américain veut surveiller les IA avant leur sortie : bonne ou mauvaise idée ?

Le 2 juin 2026, le président Trump a signé un décret qui demande aux entreprises…

18 juin 2026