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 staged publishing : activer la 2FA et durcir vos publications

Le npm staged publishing devient un levier défensif majeur pour les PME-ETI après les compromissions Laravel Lang (700+ versions backdoorées) et Packagist (8 packages infectés) révélées le 23 mai 2026. npm a activé une nouvelle fonctionnalité de 2FA obligatoire avec workflow staged publishing qui bloque mécaniquement la majorité des attaques supply chain observées ces dernières semaines. Voici le tutoriel pratique pour activer et configurer cette protection sur vos pipelines de publication.

Pourquoi le npm staged publishing change la donne pour la supply chain

Les attaques supply chain via npm — Mini Shai-Hulud, TanStack, Laravel Lang, Packagist — exploitent toutes le même point faible : la publication directe d’un package depuis un token CI/CD compromis ou un compte mainteneur piraté. Sans validation humaine au moment de la publication, un attaquant ayant volé un token granulaire peut pousser une version backdoorée en quelques secondes.

Le npm staged publishing introduit un état intermédiaire staged entre la création de la version et sa publication effective sur le registre public. Une version stagée n’est jamais téléchargeable par les consommateurs. Elle exige une approbation 2FA explicite par un humain pour passer en published. Concrètement, un token CI/CD volé ne peut plus publier — il peut au mieux créer une version stagée qui restera invisible jusqu’à validation manuelle.

Cette protection est désormais obligatoire pour les packages marqués comme critiques par npm, et fortement recommandée pour tout package interne diffusé via le registre privé ou le registre public.

Prérequis techniques pour activer le npm staged publishing

Avant d’activer cette fonctionnalité sur vos pipelines, vérifiez que votre environnement respecte les prérequis suivants :

  • npm CLI 11.15.0 ou supérieur sur tous les runners CI/CD et postes mainteneurs (npm --version)
  • 2FA activée sur le compte mainteneur (auth-and-publish ou auth-only) — voir npm profile get
  • Un second canal de validation distinct du token CI (smartphone, hardware key, application TOTP)
  • Un workflow GitHub Actions ou GitLab CI à jour utilisant npm publish --provenance pour l’attestation cryptographique de l’origine
  • Les granular access tokens avec scope publish doivent être régénérés (les anciens tokens classiques sont rejetés en mode staged)

Si l’une de ces conditions n’est pas remplie, npm refusera silencieusement le passage en mode staged et reviendra à une publication classique — créant une fausse impression de sécurité. Vérifiez systématiquement chaque prérequis avant de croire votre pipeline durci.

Activer le npm staged publishing étape par étape

Voici la procédure complète pour activer la publication staged avec 2FA sur un package npm depuis votre environnement de développement.

1. Mettre à jour npm et vérifier la version

Sur tous les postes et runners qui publient :

npm install -g npm@latest
npm --version  # doit afficher >= 11.15.0

Mettez à jour vos runners GitHub Actions en ajoutant npm install -g npm@latest au début de votre job de publication, sans quoi le runner utilisera une version pré-installée souvent obsolète.

2. Activer la 2FA obligatoire sur le package

Activez le mode auth-and-publish pour exiger une validation 2FA à chaque publication :

npm profile enable-2fa auth-and-publish
npm access set 2fa=automation-and-publish <votre-package>

Le mode automation-and-publish autorise les tokens automation pour les opérations de lecture mais exige un humain pour publier.

3. Configurer le workflow staged dans votre CI/CD

Dans votre fichier .github/workflows/publish.yml (ou équivalent GitLab), modifiez l’étape de publication :

- name: Publish to npm (staged)
  run: |
    npm publish --provenance --access public --stage
  env:
    NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

Le flag --stage place la version en staged au lieu de la publier directement. Le flag --provenance ajoute une attestation cryptographique signée par GitHub liant le package au commit et au workflow d’origine.

4. Approuver la publication manuellement

Une fois la version stagée, un mainteneur doit l’approuver depuis npmjs.com ou en CLI :

npm publish-staged <votre-package>@<version> --otp=<code-2fa>

Cette étape exige le code 2FA généré par votre application TOTP ou hardware key. Aucun token CI ne peut effectuer cette validation, ce qui ferme la brèche exploitée par les attaques récentes.

5. Configurer la rotation et l’audit des tokens

Activez la rotation automatique des granular tokens à 90 jours maximum et configurez les webhooks d’audit :

npm token create --read-only --cidr=<range-CI> --expiry=2026-08-21
npm hook create <votre-org> https://votre-siem/npm-events <secret>

Les événements de création, publication et approbation seront poussés vers votre SIEM (Wazuh, Splunk, Sentinel) pour détection en temps réel d’activités anormales.

Bonnes pratiques complémentaires pour une supply chain npm durcie

Le npm staged publishing est une fondation, pas une solution complète. Complétez votre durcissement avec ces mesures :

  • Bloquer les postinstall scripts non signés : utilisez npm config set ignore-scripts true par défaut et auditez chaque exception
  • Verrouiller les versions avec lockfile : commitez package-lock.json et exécutez npm ci au lieu de npm install en CI
  • Activer l’audit continu : intégrez npm audit signatures dans chaque build pour vérifier les attestations de provenance
  • Surveiller les packages compromis : abonnez-vous aux flux Socket, GitHub Security Advisory et CERT-FR pour les alertes supply chain
  • Isoler les builds : exécutez vos publications dans des conteneurs éphémères sans accès aux secrets cloud ni Kubernetes

Ces mesures combinées au staged publishing rendent économiquement non viable la plupart des attaques observées ces six derniers mois sur l’écosystème npm.

Vérifier l’efficacité de votre configuration npm staged publishing

Pour valider que votre configuration npm staged publishing est opérationnelle, testez le scénario d’attaque suivant dans un environnement isolé :

  1. Créez un token automation avec scope publish
  2. Tentez une publication directe : npm publish doit échouer avec un message exigeant le mode staged
  3. Tentez une publication staged : npm publish --stage doit créer une version invisible aux consommateurs
  4. Vérifiez l’invisibilité : npm view <package> versions ne doit pas lister la version stagée
  5. Approuvez avec 2FA : la version devient disponible publiquement

Si l’étape 2 réussit, votre configuration n’est pas effective et un attaquant peut encore publier directement. Auditez vos paramètres npm access ls-packages et npm profile get jusqu’à blocage complet.

L’adoption du npm staged publishing par les équipes de développement PME-ETI est désormais un prérequis défensif au même titre que le chiffrement TLS ou la rotation des secrets. Les compromissions Laravel Lang et Packagist du 23 mai démontrent qu’attendre n’est plus une option : un mainteneur compromis peut empoisonner des milliers de consommateurs en quelques minutes. Le coût d’implémentation est marginal — l’inaction, elle, peut coûter votre intégrité logicielle entière.

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