En bref
Que s'est-il passé ?
event-stream, paquet npm très populaire (plus de 1,5 M de téléchargements/semaine, 1600+ paquets dépendants), passe sous le contrôle d'un nouveau contributeur, « right9ctrl », à qui la propriété est transférée après des contributions gagnant la confiance.
Le 4 septembre 2018, une nouvelle version ajoute la dépendance flatmap-stream, conçue pour l'attaque : la version minifiée publiée sur npm diffère du dépôt git et contient une charge chiffrée en AES déchiffrée avec la description du package.json comme clé.
La charge cible les utilisateurs du portefeuille crypto copay (BitPay) : elle cherche les « hot wallets », mappe les clés publiques et exfiltre les clés privées des comptes à solde significatif vers un serveur distant. La version piégée est restée près de 2 mois.
Vérifier l'équivalence code publié vs source (provenance), surveiller les transferts de propriété, épingler et revoir les dépendances transitives, et alerter sur toute dépendance nouvellement ajoutée.
Chronologie de l'attaque
right9ctrl publie une version ajoutant la dépendance malveillante flatmap-stream.
Un avertissement de dépréciation trahit la charge ; le paquet recevait alors plus de 1,5 M de téléchargements hebdomadaires.
Comment l'attaquant a procédé
Cet incident met en jeu les vecteurs d'attaque suivants du catalogue SOCLE ; chacun renvoie à sa fiche, où l'on trouve les exigences qui le neutralisent :
La leçon à en tirer
Surveiller les changements de mainteneur ; quarantaine des nouvelles versions ; revue des dépendances transitives.
Les exigences SOCLE qui auraient limité cet incident
Cet incident se rattache à 60 exigences du référentiel, par domaine. Les satisfaire n'aurait pas forcément tout empêché, mais aurait réduit la probabilité de l'attaque, limité son impact ou accéléré sa détection :