npm v12 Renforce la Chaîne d'Approvisionnement Contre les Attaques 'npm install'
GitHub déploie des améliorations de sécurité significatives avec npm v12 le mois prochain, s'attaquant directement à la menace croissante des attaques de la chaîne d'approvisionnement. La mise à jour modifiera fondamentalement le fonctionnement de la commande 'npm install', exigeant une approbation explicite pour l'exécution de code et les sources de dépendances non-registre qui étaient auparavant approuvées par défaut. Cette mesure vise à réduire considérablement les vecteurs d'attaque couramment exploités par les acteurs malveillants.

**GitHub** a annoncé une refonte majeure de la sécurité pour **npm v12**, dont la sortie est prévue le mois prochain. Ces changements sont spécifiquement conçus pour contrer les attaques de la chaîne d'approvisionnement qui exploitent les comportements déclenchés par la commande omniprésente `'npm install'`.
`'npm install'` est la commande responsable du téléchargement et de l'installation des dépendances d'un projet et de l'exécution des scripts d'installation associés. Les développeurs l'utilisent fréquemment après avoir cloné des projets, récupéré des mises à jour ou lors des processus de build CI/CD. Les attaquants ciblent depuis longtemps cette commande en raison de son potentiel d'exécution de code automatisée lors de l'installation des packages.
Le principe fondamental derrière cette mise à jour est un passage de la confiance implicite à l'approbation explicite pour l'exécution de code et les sources de dépendances non-registre lors des opérations `npm install`.
**GitHub** a détaillé les changements clés suivants dans son annonce :
1. **Restrictions d'exécution de scripts** : À partir de **npm v12**, les scripts `preinstall`, `install` et `postinstall` des dépendances ne s'exécuteront plus automatiquement sauf approbation explicite. Cette restriction s'étend également aux builds de modules natifs initiés via **node-gyp** et aux scripts `prepare` des dépendances Git, locales et liées.
2. **Résolution des dépendances Git** : `npm install` cessera de récupérer automatiquement les dépendances des dépôts Git, qu'elles soient directes ou transitives, sans permission explicite. **GitHub** note que cela ferme un chemin d'exécution de code critique où le fichier `.npmrc` d'une dépendance Git pouvait être manipulé pour modifier l'exécutable Git utilisé, même si les scripts d'installation étaient désactivés.
3. **Résolution des dépendances par URL distante** : Les dépendances installées à partir d'URL distantes, telles que les tarballs HTTPS, ne seront plus résolues automatiquement. Cela s'applique aux dépendances directes et transitives.
Ces modifications devraient atténuer considérablement les risques liés à la chaîne d'approvisionnement en éliminant l'exécution automatique des scripts d'installation des dépendances, la résolution automatique des dépendances basées sur Git et la résolution automatique des dépendances par URL distante.
Ces nouvelles valeurs par défaut auraient empêché plusieurs attaques récentes de la chaîne d'approvisionnement, notamment des campagnes malveillantes de scripts `preinstall`/`postinstall` ciblant **eslint-config-prettier**, les **packages Picasso de Toptal**, et de nombreux packages **npm** de vol de données. Elles auraient également contré l'abus des dépendances Git tel que documenté dans les attaques **Shai-Hulud**.
Les projets qui dépendent légitimement de l'un de ces comportements devront explicitement opter pour leur activation avant de passer à **npm v12**.
**GitHub** conseille aux développeurs de se préparer en passant à **npm 11.16.0** ou une version plus récente. Cette version affichera des avertissements pour toutes les actions qui seront impactées par **v12**, permettant aux développeurs d'identifier et de résoudre les dépendances ou les flux de travail nécessitant une approbation explicite avant de procéder à la mise à niveau complète.
Une fois mis à niveau vers **npm v12**, seuls les scripts et les sources de dépendances explicitement approuvés fonctionneront automatiquement.
Une [discussion communautaire](https://github.com/orgs/community/discussions/198547) a été lancée pour que les développeurs puissent fournir leurs commentaires et suggestions sur ces changements à venir.