veilletech.fr
14 oct. Feed du jour
#02 SÉCURITÉ Faille

npm : le nom du dépôt valait clé de publication

Un nom de dépôt n'est pas une identité : seul son identifiant permanent l'est.

Bloom Security a montré que la publication de confiance npm se fiait à l'adresse du dépôt GitHub, et non à son identifiant permanent, tant qu'aucune version n'avait été publiée : qui récupérait une adresse libérée pouvait publier sous le nom du paquet. GitHub fait désormais expirer au bout de 48 heures les configurations jamais validées. Plus de 1 500 paquets étaient vulnérables.

3 min de lectureintermédiairevidéo 1:20
Partager
Sommaire6 sections
  1. Ce qui se passe
  2. Le mécanisme
  3. Ce que ça permet
  4. Le correctif et son calendrier
  5. Comment s'y prendre
  6. À retenir

Ce qui se passe

Bloom Security a publié « SlugFest », un défaut de la publication de confiance (trusted publishing) de npm. Tant qu'aucune version n'avait été publiée depuis un dépôt GitHub, le registre retenait son adresse (propriétaire/dépôt, le slug) et non son identifiant numérique permanent. Qui récupérait une adresse libérée pouvait publier sous le nom du paquet, sans voler le moindre identifiant.

GitHub a répondu le 2 octobre : une configuration de publication de confiance jamais validée expire 48 heures après sa création.

Le mécanisme

La publication de confiance remplace le jeton npm durable par un jeton OIDC de quelques minutes, émis par le workflow GitHub Actions. Quand on lie un paquet à un dépôt, la CLI n'envoie que trois champs : repository (le texte propriétaire/dépôt), workflow_ref.file (le nom du fichier de workflow) et environment (facultatif). Les identifiants repository_id et repository_owner_id, présents dans chaque jeton OIDC, ne sont enregistrés qu'après la première publication réussie.

Conditions de l'attaque : le dépôt lié a été renommé, transféré ou supprimé (ou son propriétaire renommé ou supprimé), et il n'a jamais servi à publier.

npmGitHubAttaquantnpmGitHubAttaquantRéclame l'adresse libre1Nouvel identifiant2Lance le workflow3Jeton OIDC4Présente le jeton5Adresse reconnue, jeton émis6
L'attaque en trois échanges : npm compare l'adresse, jamais l'identifiant numérique

Ce que ça permet

Un scan du registre a trouvé plus de 1 500 paquets vulnérables, plus de 10 millions de téléchargements cumulés (plus d'un million par mois). La liste n'est pas publiée.

Le correctif et son calendrier

Limite : le correctif borne la fenêtre, il ne lie pas l'identifiant dès la création. PyPI le fait depuis son lancement ; l'implémentation GitLab de npm était touchée aussi. Les sources ne disent pas ce qu'il advient des liaisons anciennes jamais utilisées.

Comment s'y prendre

  1. Lister les liaisons de chaque paquet et vérifier que l'adresse désigne toujours un dépôt que vous contrôlez :

    Terminal
    npm trust list
  2. Dépôt renommé ou transféré : supprimer la liaison, la recréer avec l'adresse courante.

  3. Avant de supprimer, renommer ou transférer un dépôt lié : retirer d'abord la liaison.

  4. Après la création d'une liaison, publier une version tout de suite pour la valider.

  5. Surveiller les publications que vous n'avez pas lancées depuis le dépôt attendu.

Sources : SlugFest, Bloom Security ; Unvalidated npm trusted publishing configurations now expire, GitHub, 2 octobre 2026 ; relayé par The Hacker News le 13 octobre 2026.