NIS2 50+ salariés ou €10M+ CA : reporting d’incident en 72h obligatoire. Reporting d’incident en 72h obligatoire. Êtes-vous prêt ? →
Skip to main contentSkip to footer

NPM 12 : exécution sécurisée des scripts pour PME-ETI

Avec NPM 12, le gestionnaire de paquets le plus utilisé au monde change radicalement le comportement par défaut de l’exécution des scripts d’installation. Cette évolution répond directement à la vague d’attaques supply chain qui a frappé l’écosystème Node.js ces derniers mois : Shai-Hulud, IronWorm, Famous Chollima sur Packagist, et désormais le compromis massif de plus de 1 500 paquets AUR. Pour les PME-ETI dont les pipelines de build dépendent de centaines de paquets NPM, l’enjeu est concret : préparer ses projets avant la bascule, sans casser les déploiements.

Ce que change NPM 12 sur l’exécution des scripts

Aujourd’hui, lorsqu’un développeur lance npm install sur un projet, les paquets installés peuvent exécuter automatiquement des scripts preinstall, install et postinstall. C’est précisément ce vecteur que les attaquants exploitent pour exfiltrer des secrets CI/CD, déposer des backdoors ou pivoter vers d’autres dépôts. La quasi-totalité des compromis supply chain récents — Shai-Hulud, Mini Shai-Hulud, IronWorm — s’appuie sur ce comportement par défaut.

À partir de la version 12, NPM bascule vers un modèle opt-in pour ces scripts. Le principe est inspiré du flag historique --ignore-scripts mais inversé : les scripts ne s’exécuteront plus, sauf déclaration explicite de l’utilisateur ou inscription du paquet dans une allowlist du projet.

Trois conséquences concrètes pour vos projets

  • Builds plus lents en cas de manque de préparation : certains paquets légitimes (esbuild, sharp, node-gyp natifs) ont besoin de leurs scripts install pour compiler des binaires natifs. Sans allowlist, vos builds échoueront silencieusement ou exécuteront du code JavaScript fallback plus lent.
  • Réduction drastique de la surface d’attaque supply chain : un paquet malveillant ne pourra plus exécuter de code à l’install, sauf si vous l’avez explicitement autorisé.
  • Refonte des pipelines CI/CD : vos jobs GitHub Actions, GitLab CI ou Jenkins doivent intégrer la nouvelle déclaration d’allowlist pour rester fonctionnels.

Guide pratique : préparer votre projet à NPM 12

Étape 1 : auditer les scripts d’installation existants

Avant toute migration, identifiez quels paquets de votre arbre de dépendances exécutent des scripts. Lancez la commande suivante à la racine de votre projet :

npm ls --all --json | jq '.dependencies | .. | select(.scripts?) | .scripts'

Cette inspection révèle souvent une vingtaine à une centaine de paquets concernés sur un projet TypeScript moyen. Documentez la liste pour la suite.

Étape 2 : tester immédiatement le mode strict

Sans attendre la sortie de NPM 12, simulez le futur comportement dans vos pipelines actuels avec NPM 10 ou 11 :

npm install --ignore-scripts

Si votre build casse, vous tenez la liste exacte des paquets dont vous dépendez vraiment au niveau scripts. C’est votre allowlist minimale.

Étape 3 : déclarer l’allowlist dans package.json

NPM 12 introduit un champ trustedDependencies dans package.json. Déclarez uniquement les paquets nécessaires :

{ "trustedDependencies": ["esbuild", "sharp", "@swc/core"] }

Évitez la tentation d’y mettre des dépendances transitives que vous n’auditez pas. Chaque entrée dans cette liste est une porte ouverte ; chaque porte doit être justifiée.

Étape 4 : verrouiller avec un lockfile audit

Combinez l’allowlist avec un audit régulier du lockfile via npm audit signatures et npm audit --omit=dev. La règle d’or pour les PME-ETI : ne jamais installer un nouveau paquet sans avoir vérifié sa réputation (popularité, mainteneurs, dernière publication, signatures Sigstore). Notre article sur la sécurisation des runners CI/CD détaille les contrôles complémentaires à activer.

Étape 5 : durcir le runner CI/CD

Pendant la phase de transition, ajoutez systématiquement --ignore-scripts dans vos jobs CI, sauf sur les étapes de build où l’allowlist est nécessaire. Isolez chaque job dans un conteneur éphémère sans accès aux secrets de production. Cette double barrière neutralise l’essentiel des techniques observées dans l’attaque Famous Chollima sur Packagist.

Pourquoi cette bascule est une opportunité défensive pour les PME-ETI

L’écosystème NPM représente plus de 3 millions de paquets et plus de 200 milliards de téléchargements par semaine. C’est aussi la surface d’attaque supply chain la plus exploitée par les groupes APT et les opérations cybercriminelles en 2026. Les attaques Shai-Hulud, IronWorm, TanStack Mini Shai-Hulud ont toutes utilisé le même vecteur : un script d’installation malveillant injecté dans un paquet populaire.

Le passage de NPM 12 à un modèle opt-in supprime ce vecteur par défaut. Pour une PME-ETI dont l’équipe sécurité est limitée, c’est une couche de défense supplémentaire qui ne coûte rien à activer, à condition d’anticiper la migration. Préparer l’allowlist aujourd’hui, c’est éviter à la fois les ruptures de build le jour J et l’inflation silencieuse d’entrées dans trustedDependencies qui annulerait le gain défensif.

Checklist PME-ETI : préparer NPM 12 en cinq points

  • Auditer les paquets exécutant des scripts d’installation dans chaque projet.
  • Tester immédiatement npm install --ignore-scripts pour valider la portabilité.
  • Déclarer une trustedDependencies minimale et la versionner avec le code source.
  • Auditer régulièrement le lockfile et les signatures Sigstore.
  • Isoler les jobs CI/CD avec runners éphémères et sans secrets de production.

La sécurité NPM n’est plus une affaire de patch isolé : c’est un modèle de confiance à construire dépendance par dépendance. NPM 12 vous donne enfin l’outillage par défaut pour le faire — encore faut-il s’y préparer dès maintenant.

Sources

Renforcez dès maintenant la cybersécurité de votre PME ou ETI avec ucyber.ai.
Évaluez votre niveau de sécurité ou
contactez-nous pour en savoir plus.
Suivez-nous sur LinkedIn.

Réserver 15 min — diagnostic