En bref / Points clés
- Pendant des années, une simple commande `npm install` pouvait déclencher des attaques sur la chaîne d'approvisionnement de votre machine.
- NPM 12 ferme enfin cette porte en désactivant l'exécution automatique des scripts par défaut.
La fin de l'exécution de code sans restriction
`npm 12` met enfin un terme au far-west de l'installation de paquets, clôturant une ère dangereuse où `npm install` servait également de terrain de jeu silencieux pour l'exécution de code. Pendant des années, les scripts `pre-install` et `post-install`, ainsi que leurs homologues `install`, s'exécutaient automatiquement pour chaque dépendance, transformant une tâche de routine en vecteur principal d'attaques insidieuses sur la chaîne d'approvisionnement. Ce comportement par défaut transformait une simple récupération de paquet en un pari risqué.
Un modèle de confiance implicite sous-tendait l'ensemble de l'écosystème JavaScript, permettant à tout paquet d'exécuter du code arbitraire lors de l'installation sans le consentement explicite de l'utilisateur. Les attaquants ont exploité avec brio cette faille. Le ver auto-propageant Shai-Hulud, par exemple, a compromis des centaines de paquets pour exfiltrer des identifiants et se propager de manière autonome, tandis que sa variante "Mini Shai-Hulud" de mai 2026 a ciblé des projets importants comme `TanStack` en exploitant les GitHub Actions.
La communauté a débattu de cette vulnérabilité critique pendant des années, prise entre des besoins de sécurité urgents et le défi immense de maintenir la rétrocompatibilité au sein d'un vaste écosystème dépendant des scripts. Désormais, `npm 12` tranche ce nœud gordien. Il désactive l'exécution automatique des scripts par défaut, imposant un flux d'approbation explicite via `npm approve-scripts`. Ce passage attendu depuis longtemps de la confiance implicite à la liste blanche explicite priorise enfin la sécurité, inaugurant un avenir plus sûr, bien que légèrement moins pratique.
Votre nouveau gardien : `npm approve-scripts`
`npm install` dans la version 12 n'exécute plus aveuglément de code arbitraire provenant de vos dépendances. L'époque où les scripts `pre-install`, `install` et `post-install` s'exécutaient par défaut est définitivement révolue, mettant fin à un vecteur critique pour les attaques sur la chaîne d'approvisionnement comme Shai-Hulud et les récentes compromissions de TanStack. Ce blocage général s'étend même aux builds natifs essentiels de `node-gyp` et aux scripts `prepare` provenant de dépendances Git, de fichiers ou de liens, neutralisant efficacement toute exécution de code inattendue avant qu'elle ne commence.
Voici `npm approve-scripts`, votre nouveau gardien. Cette commande introduit un flux de travail explicite et auditable, permettant aux développeurs d'examiner chaque script et de n'activer sélectivement que ceux en lesquels ils ont réellement confiance. Une fois approuvées, `npm` stocke ces autorisations directement dans votre fichier `package.json`, créant un enregistrement transparent et versionné du code autorisé qui s'exécute lors de l'installation. Cela remplace l'automatisation dangereuse précédente par un consentement délibéré et éclairé.
Ce n'est pas seulement une nouvelle commande ; c'est un profond changement philosophique pour l'ensemble de l'écosystème JavaScript. `npm` passe résolument d'un modèle de confiance implicite – où toute dépendance pouvait exécuter n'importe quoi – à un modèle de liste blanche explicite. Les développeurs retrouvent un contrôle absolu et granulaire sur le code précis qui s'exécute sur leurs machines, transformant `npm install` d'une responsabilité potentielle en une opération délibérée et sécurisée. La scriptpocalypse ne se termine pas par un gémissement, mais par un « Non » ferme et auditable.
Verrouiller davantage de vecteurs d'attaque
Alors que les scripts `pre-install` et `post-install` étaient les vecteurs les plus voyants pour les attaques de la chaîne d'approvisionnement, les adversaires astucieux ne mettaient jamais tous leurs œufs dans le même panier. Ils ont également exploité des voies moins évidentes, comme les Git dependencies directes et les tarballs d'URL distantes, pour introduire du code malveillant dans des projets sans méfiance. Les attaquants ont notoirement exploité ces méthodes lors d'incidents tels que la variante Mini Shai-Hulud qui ciblait les paquets sous l'espace de noms TanStack, injectant souvent des fichiers `.npmrc` malveillants via ces routes indirectes.
npm 12 ferme ces portes secondaires avec un mandat simple et explicite. Les développeurs doivent désormais utiliser `--allow-git` pour résoudre les dépendances basées sur Git et `--allow-remote` lors de l'installation de paquets à partir de tarballs basés sur des URL. Ce n'est pas seulement un inconvénient ; c'est un point de friction critique conçu pour forcer des décisions conscientes, éliminant la confiance implicite envers les sources externes et réduisant considérablement la surface d'attaque.
Personne ne pourra plaider l'ignorance lorsque npm 12 sera déployé en juillet ; les avertissements concernant ces breaking changes sont actifs depuis npm v11.16.0+. Cette période de grâce offre aux équipes une excellente occasion d'auditer leurs pipelines de build et de mettre à jour leurs déclarations de dépendances, évitant ainsi des perturbations soudaines. Pour plus de détails sur les changements à venir, consultez le Upcoming breaking changes for npm v12 - GitHub Changelog.
Une étape nécessaire, mais est-ce suffisant ?
Enfin, npm reconnaît la réalité. La liberté d'exécution des scripts, un vecteur principal des attaques de la chaîne d'approvisionnement, prend fin avec npm 12 après des années d'exploitation généralisée. Ce passage attendu depuis longtemps à l'approbation explicite des scripts, rattrapant enfin les alternatives plus soucieuses de la sécurité, transforme `npm install` d'un exercice de confiance naïf en une opération surveillée. C'est une évolution nécessaire, bien qu'elle arrive en juillet 2026, des années après que les premières alertes aient retenti.
Même avec ces changements bienvenus, la bataille pour l'intégrité de la chaîne d'approvisionnement continue. De nombreux experts en sécurité, moi y compris, préconisent simplement pnpm, qui offre des valeurs par défaut supérieures comme le blocage des sous-dépendances exotiques et le report de l'adoption de nouveaux paquets. La position proactive de pnpm, qui a longtemps défendu une posture plus restrictive et sécurisée prête à l'emploi, offre une alternative convaincante pour les projets exigeant une protection immédiate et robuste.
Ces mises à jour réduisent considérablement la surface d'attaque, limitant les vecteurs de scripts `pre-install` et `post-install` qui ont alimenté des incidents comme Shai-Hulud et la compromission de TanStack. Le blocage explicite des Git dependencies et des tarballs distants ferme davantage les chemins d'attaque bien connus. Cependant, les attaquants sont implacablement adaptatifs. Attendez-vous à un pivot vers d'autres vulnérabilités, exploitant peut-être des fichiers `.npmrc` malveillants, des erreurs de configuration CI/CD, ou de l'ingénierie sociale sophistiquée. La vigilance des développeurs, qui scrutent chaque dépendance et processus de build, reste le pare-feu ultime et indispensable dans ce paysage de menaces en évolution.
Questions Fréquemment Posées
Quel est le plus grand changement dans NPM 12 ?
Le changement le plus significatif est que `npm install` n'exécutera plus automatiquement les scripts pre-install, install ou post-install pour les dépendances. Les utilisateurs doivent désormais les approuver explicitement.
Comment exécuter des scripts pour des dépendances de confiance dans NPM 12 ?
Vous devez utiliser la nouvelle commande `npm approve-scripts`. Celle-ci vous invitera à approuver les scripts de vos dépendances, et vos sélections seront enregistrées dans votre package.json.
Pourquoi NPM effectue-t-il ces changements de sécurité maintenant ?
Ces changements sont une réponse directe à une vague d'attaques sophistiquées sur la chaîne d'approvisionnement, comme le ver Shai-Hulud, qui ont exploité l'exécution automatique de scripts pour voler des identifiants et propager des malwares.
D'autres gestionnaires de paquets comme PNPM ou Yarn sont-ils déjà aussi sécurisés ?
Oui, d'autres gestionnaires de paquets comme PNPM et Yarn ont déjà mis en œuvre des comportements de sécurité par défaut similaires, tels que le blocage des scripts d'installation automatiques, depuis un certain temps.
