La plateforme GitHub a annoncé que la version 12 de npm, prévue le mois prochain, apportera plusieurs modifications axées sur la sécurité. Ces changements visent à contrer les attaques de la chaîne d’approvisionnement qui exploitent les comportements déclenchés par la commande ‘npm install’.
‘npm install’ est la commande que les développeurs utilisent pour télécharger et installer les dépendances d’un projet. Elle exécute aussi les scripts liés à l’installation qui sont définis par les paquets.
Les développeurs lancent cette commande après avoir cloné un projet, après une mise à jour, ou pendant les phases d’intégration et de déploiement continus. Les attaquants la ciblent car elle permet une exécution automatisée de code pendant l’installation des paquets.
L’idée principale de l’annonce est que l’exécution de code et les sources de dépendances externes au registre, qui se déclenchent automatiquement aujourd’hui avec ‘npm install’, nécessiteront désormais une approbation explicite. Elles ne seront plus exécutées par défaut.
GitHub a précisé les changements suivants :
- À partir de la version 12, la commande ‘npm install’ n’exécutera plus les scripts preinstall, install ou postinstall des dépendances, sauf si l’utilisateur les a explicitement approuvés. Cette règle s’applique aussi à la compilation des modules natifs déclenchée par node-gyp, et aux scripts prepare des dépendances provenant de Git, de fichiers locaux ou de liens symboliques.
- ‘npm install’ ne récupérera plus les dépendances depuis des dépôts Git, qu’ils soient directs ou transitifs, sans autorisation explicite. GitHub explique que cela supprime une voie d’exécution de code : un fichier .npmrc dans une dépendance Git pouvait modifier l’exécutable Git utilisé, même quand les scripts d’installation étaient désactivés.
- Les dépendances installées depuis des URL distantes, comme des archives HTTPS, ne seront plus résolues automatiquement sans permission explicite. Cela vaut pour les dépendances directes et transitives.
Ces ajustements peuvent réduire fortement les attaques de la chaîne d’approvisionnement. Ils suppriment 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 depuis des URL distantes.
Les nouveaux paramètres par défaut auraient pu bloquer plusieurs techniques utilisées dans des attaques récentes. Cela inclut les campagnes de scripts preinstall/postinstall malveillantes qui visaient le paquet eslint-config-prettier, les paquets Picasso de Toptal, et des dizaines de paquets npm conçus pour voler des données. Cela inclut aussi l’exploitation des dépendances Git, documentée dans les attaques Shai-Hulud.
Les projets qui dépendent légitimement de l’un de ces comportements pour leurs flux de travail devront donner leur accord explicite avant de passer à npm v12.
GitHub recommande aux développeurs de se préparer en mettant à jour vers npm 11.16.0 ou une version plus récente. Cette version affiche des avertissements pour toutes les actions qui cesseront de fonctionner sous la version 12. Cela permet aux développeurs de passer en revue ces alertes lors de leurs installations habituelles et d’identifier les dépendances ou processus qui nécessiteront une autorisation avant la mise à niveau.
Après l’installation de la version 12, seuls les scripts et les sources de dépendances explicitement approuvés continueront à fonctionner automatiquement.
Une discussion communautaire est ouverte pour que les développeurs puissent partager leurs suggestions sur ces changements à venir.
