L'équipe de sécurité a déterminé que 4500 comptes avaient pu voir leur tokens d'accès ("access token" en anglais, cf. oAuth2) compromis par le pirate.
Par prudence, npm a révoqué tous les tokens créés avant le 12 juillet à 14h30 UTC, c'est à dire pour les Français métropolitains avant le 12 juillet à 16h30 (heure d'été).
En conséquence, tous les utilisateurs connectés sur leur CLI avant cette date doivent se reconnecter, l'exécution de la commande npm publish retournant désormais :
Code : | Sélectionner tout |
1 2 3 4 5 | npm WARN notice Due to a recent security incident, all user tokens have been invalidated. Please see https://status.npmjs.org/incidents/dn7c1fgrr7ng for more details. To generate a new token, visit https://www.npmjs.com/settings/~/tokens or run "npm login". npm ERR! publish Failed PUT 401 npm ERR! code E401 npm ERR! You must be logged in to publish packages. : <package-name> |
L'attaque détectée en moins d'une heure et réglée dans la journée
ESLint a également publié un billet de blog détaillant précisément l'attaque et s'excuse pour le vecteur fourni par un de ses mainteneurs.
Le billet précise que l'attaque a été détectée et signalée publiquement par un utilisateur du paquet eslint-scope moins d'une heure après que le paquet malicieux a été uploadé sur le registre.
Le problème a été soldé moins de 10 heures plus tard par la révocation des tokens d'accès comme expliqué ci-dessus.
En conséquence de cet incident, npm a décidé de permettre aux responsables de paquets de les protéger via l'authentification à deux facteurs.
L'authentification à 2 facteurs pour les paquets rendue obligatoire
Le lendemain de la publication du rapport d'incident, l'équipe npm a publié un court billet de blog pour promouvoir
la 2FA sur les paquets.
À l'heure actuelle cette fonctionnalité n'est activable que via le CLI en version canary qui correspond à la version taguée @next.
En revanche son exécution est très bien supportée par le CLI actuel et elle peut donc d’ores et déjà être utilisée.
Il est simplement nécessaire d'activer son usage via la version canary via cette commande : npx npmc access 2fa-required <package>
L'usage de la 2FA est documenté largement, mais il est à noter que son usage nécessite l'installation d'une application tierce permettant de recevoir le mot de passe à usage unique.
Finalement, toute action via le CLI entrainant la publication d'une nouvelle version de paquet sur un paquet marqué comme protégé par la 2FA nécessite la saisie d'un mot de passe à usage unique, même si l'utilisateur n'a pas activé la 2FA sur son compte.
Sources : Rapport d'incident du 12 juillet 2018, Protection 2FA pour les paquets sur le blog npm officiel, Billet "postmortem" sur le blog ESLint officiel .
Et vous ?
Que pensez-vous de cet incident ?
Avez-vous activé l'authentification à deux facteurs ?
Êtes-vous inquiets des éventuels problèmes de sécurité posés par l'usage de npm ?
Voir aussi :
Un paquet npm, gestionnaire de paquets pour la bibliothèque populaire JavaScript Node.js, a été infecté par un hacker
Un développeur JavaScript estime que l'écosystème Node.js est « chaotique et peu sûr »