- Le comportement par défaut de
npm installdevient axé sur la sécurité : des fonctionnalités jusqu’ici exécutées automatiquement ne fonctionneront désormais que si l’utilisateur les autorise explicitement (opt-in) allowScriptsdésactivé par défaut — les scriptspreinstall,installetpostinstallinclus dans les paquets externes installés sont bloqués par défaut, et seuls les paquets autorisés par le projet peuvent les exécuter- Ce changement bloque les scripts qui s’exécutaient automatiquement au simple moment de l’installation d’un paquet, afin de réduire les possibilités d’injection de code malveillant
- Les builds natifs
node-gypsont aussi concernés : les paquets qui n’ont qu’unbinding.gypsans script d’installation séparé ne pourront plus être compilés non plus, car npm exécute en internenode-gyp rebuild - Les scripts
preparedes paquets récupérés via git, file ou link sont eux aussi bloqués de la même manière - Utilisation : vérifier quels paquets contiennent des scripts avec
npm approve-scripts --allow-scripts-pending→ autoriser uniquement ceux de confiance avecnpm approve-scripts, bloquer les autres avecnpm deny-scripts→ la liste des autorisations est enregistrée danspackage.json, il faut donc la committer
--allow-gitvaut désormaisnonepar défaut — les paquets récupérés directement depuis des dépôts Git, y compris leurs dépendances transitives, sont bloqués par défaut et ne pourront être installés qu’en les autorisant avec--allow-git- Cela bloque la voie par laquelle le
.npmrcd’un paquet Git pouvait remplacer l’exécutable Git lui-même (un problème exploitable même avec--ignore-scripts) (npm 11.10.0+)
- Cela bloque la voie par laquelle le
--allow-remotevaut désormaisnonepar défaut — les paquets récupérés depuis des URL distantes comme des tarballs HTTPS, y compris de manière transitive, sont bloqués par défaut et ne pourront être installés qu’en les autorisant avec--allow-remote(npm 11.15.0+)- En revanche, les valeurs par défaut de
--allow-fileet--allow-directoryne changent pas dans cette v12
- En revanche, les valeurs par défaut de
- Tous ces changements sont d’abord proposés sous forme d’avertissements à partir de npm 11.16.0, afin de permettre une vérification et une adaptation en amont avant la sortie officielle
- La sortie de v12 est prévue pour juillet 2026
1 commentaires
Commentaires sur Hacker News
Je ne sais pas comment j’ai pu rater le fait que npm a été racheté par GitHub, mais soudain beaucoup de choses commencent à s’expliquer
J’ai du mal à imaginer pire foyer pour un composant aussi important de l’écosystème Node
https://github.blog/news-insights/company-news/npm-is-joinin...
« embrace, extend, extinguish »
https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguis...
Les scripts
postinstallauraient dû être supprimés depuis longtemps, c’est un cancer des paquets NPMIl y a bien trop de
postinstallprofondément imbriqués, non contrôlés, qui s’exécutent aléatoirement quand on récupère quelque choseJe ne sais pas qui a pu trouver que c’était une bonne idée à l’époque
En général, le code des dépendances packagées finit de toute façon par être exécuté à un moment donné, souvent avec les mêmes privilèges que le processus d’installation
Du coup, ces scripts de configuration peuvent, pour le meilleur ou pour le pire, simplement déplacer leur point d’entrée de npm vers l’endroit où se produit un
importou unrequireÀ moins que tout l’écosystème ne migre vers un environnement sandboxé façon Deno, au mieux ça ressemble à une petite friction. C’est peut-être le plan, cela dit
L’exemple qui me vient tout de suite est https://www.npmjs.com/package/patch-package
J’espère que l’hystérie actuelle ne débouchera pas sur ce genre de décision absurde
J’ai l’impression que ce sujet a dû être discuté des centaines de fois en interne chez NPM depuis sa publication il y a 10 ans
À cause de Shai Halud, c’est désormais trop gros pour être ignoré
« je corrigerai ça plus tard » finit presque toujours en « merde, il faut qu’on corrige ça maintenant »
Je me demande si les versions Node LTS actuelles, de mémoire 22, 24, 26, vont recevoir npm v12 dans leur bundle pour bénéficier de ce correctif de sécurité
Pour l’instant elles incluent toutes npm v11
npm est passé de 9 à 10 dans v18.19.0[1] et v20.10.0[2]
[1]: https://nodejs.org/en/blog/release/v18.19.0#npm-updated-to-v...
[2]: https://nodejs.org/en/blog/release/v20.10.0
Comme l’indique l’article, il suffit de définir les bons paramètres par défaut
Le meilleur aspect de ce changement, c’est qu’avec ce nouveau défaut, les paquets pénibles qui supposent que ces options sont activées dès qu’un nouveau développeur lance simplement install vont casser immédiatement
Ça peut par exemple forcer l’arrêt de la pratique consistant à présumer que les scripts peuvent s’exécuter
Ce n’est pas totalement clair à la lecture de l’article, mais la liste d’autorisation des scripts semble prendre en charge une autorisation par paquet plutôt qu’un réglage global
Ça devrait faciliter le maintien de règles à l’échelle d’une organisation pour n’autoriser les scripts que sur certains paquets
Je me demande s’il existe un linter capable d’empêcher ce type de valeurs par défaut non sûres dans la configuration du gestionnaire de paquets
grep, ça ne suffirait pas ?Je me demande s’il y a encore une raison d’utiliser Yarn
Je ne sais pas si Yarn a aussi mis en place des protections contre les attaques de supply chain
Jusqu’ici je ne connaissais que pnpm, donc c’est bien de voir npm s’aligner aussi
La dernière release majeure de Yarn, la 4.x, garantit un comportement déterministe presque à l’excès, et on peut s’attendre à un comportement cohérent dans toute l’équipe
Côté fonctionnalités, il y a plein de petits détails qui, une fois qu’on s’y habitue, finissent par faire une vraie différence
La prochaine release majeure va continuer dans la même direction avec de meilleures performances, ainsi que des fonctionnalités qui n’ont pas pu être implémentées jusqu’ici précisément parce qu’elles dépendaient de ces gains de performance
Pour référence, je suis le mainteneur principal de Yarn
Il y a aussi des fonctionnalités de protection de la supply chain
J’ai fini par ne plus le supporter et je suis passé à pnpm, ce qui a rendu les installations bien plus rapides à la fois en CI et sur les machines de dev locales
La migration m’a pris environ une journée avec l’aide d’un LLM
node_moduleshttps://yarnpkg.com/features/pnp
C’est assez proche de l’usage de
.jaren Java plutôt qu’une arborescence de répertoires de fichiers.classCela dit, c’est un peu bricolé, et le support des éditeurs et outils est inégal
Comme il y a beaucoup moins de petits fichiers, ça peut être particulièrement plus rapide si vous êtes contraint de travailler sous Windows
On peut aussi mettre les archives dans le dépôt git, ce qui supprime la dépendance à Internet et au registre de paquets
Je ne connais vraiment pas la réponse
Je ne savais pas que npm appartenait à GitHub
Ça explique pas mal de choses
Certaines réactions sont intéressantes à relire avec le recul
Le commentaire le plus haut disait en gros : « Microsoft ne réussit pas tout, mais honnêtement le rachat de GitHub s’est bien mieux passé que prévu. Au lieu d’imposer à GitHub des politiques centrées sur Microsoft, Microsoft a davantage adopté des éléments de GitHub du point de vue produit. GitHub continue de fonctionner comme une entreprise distincte »
Elle avait levé du capital-risque, mais n’avait pas réussi à trouver un modèle économique viable
GitHub l’a rachetée pour sauver l’écosystème, et cette acquisition n’a quasiment pas apporté de gros bénéfices à GitHub
Et Microsoft a migré GitHub sur Azure
Je me demande si la liste d’autorisation dans
package.jsonest figée jusqu’à la version du paquet, ou si elle ne verrouille que le nom du paquetC’est bien que
allowScriptssoit désactivé par défaut[regarde sa montre] npm ne fait que rattraper pnpm avec 18 mois de retard ?
À quoi ça sert exactement côté JavaScript ?