Le code malveillant a été inséré en deux étapes dans event-stream, une bibliothèque qui comptabilise plus de deux millions de téléchargements et est utilisée aussi bien par des entreprises figurant dans le Fortune 500 que par des startups. Dans la première étape, la version 3.3.6, publiée le 8 septembre, incluait un module bénin appelé flatmap-stream. La deuxième étape a été mise en œuvre le 5 octobre, date à laquelle flatmap-steam a été mis à jour afin d'inclure un code malveillant tentant de voler des portefeuilles bitcoin et de transférer leurs soldes à un serveur situé à Kuala Lumpur. Ce n’est que mardi dernier que la porte dérobée a été exposée au grand jour suite à un rapport d’un utilisateur de Github répondant au pseudonyme FallingSnow (Ayrton Sparling). Les responsables du paquet NPM Copay Wallet, l'un des projets open source qui a hébergé event-stream, n’ont émis un avis que lundi, soit quelques jours plus tard :
Envoyé par responsables Copay Wallet
En clair, les responsables du paquet NPM ont déclaré que le code malveillant avait été conçu pour cibler les personnes utilisant un portefeuille bitcoin développé par Copay, une société qui avait intégré event-stream à son application. Cette version de ce mois-ci montre que Copay met à jour son code pour faire référence à flatmap-stream, mais un responsable de Copay a déclaré lors d'une discussion sur Github que le code malveillant n'avait jamais été déployé sur aucune plateforme. Après la publication de ce message, les responsables de Copay ont mis à jour leur commentaire et indiqué qu'ils avaient en fait publié des plateformes contenant la porte dérobée.
La société continue d'enquêter sur l'attaque. Elle a également contacté Copay-dash, un autre développeur qui utilise le même code open source dans son application portefeuille.
« Cette compromission ne visait pas les développeurs de modules en général, ni même les développeurs », a expliqué un responsable de Copay Wallet. « Elle visait quelques développeurs sélectionnés dans une entreprise, Copay, dotée d’un environnement de développement très spécifique. Même dans ce cas, la charge utile elle-même ne s’exécutait pas sur les ordinateurs de ces développeurs; elle serait plutôt intégrée dans une application destinée aux consommateurs lorsque les développeurs créeraient une version. L’objectif était de voler des bitcoins aux utilisateurs finaux de cette application ».
Les attaques lancées contre les chaînes logistiques se multiplient
Selon la discussion sur Github qui a exposé la porte dérobée, le développeur de event-stream n'avait plus le temps de fournir des mises à jour. Donc, il y a plusieurs mois, il a accepté l'aide d'un développeur inconnu. Le nouveau développeur a pris soin de cacher la porte dérobée. En plus de l’implémenter progressivement, il ne ciblait également que l'application de portefeuille Copay. Le code malveillant était également difficile à détecter, car le module flatmap-stream était chiffré.
L’attaque est la dernière en date à exploiter les faiblesses d’une chaîne logistique largement utilisée pour cibler les utilisateurs finaux en aval. Le mois dernier, deux attaques du côté de l'offre ont été révélées en une seule semaine. La première visait VestaCP, une interface de panneau de commande utilisée par les administrateurs système pour gérer les serveurs. Les attaquants ont ensuite modifié un programme d’installation disponible sur le site Web de VestaCP. La seconde attaque a glissé un paquet malveillant dans PyPI, le référentiel officiel du langage de programmation Python largement utilisé.
Les attaques de la chaîne logistique montrent l’une des faiblesses de l’open source. En raison de son ouverture et du manque de fonds de nombreux développeurs et utilisateurs amateurs, le code open source peut être sujet à des modifications malveillantes qui se faufilent sous le radar de la surveillance..
Sources : blog BitPay, GitHub
Voir aussi :
Un projet Node.js sur deux audité par les outils de npm aurait au moins une vulnérabilité, une sur dix d'entre elles sont critiques
npm : l'authentification à deux facteurs rendue obligatoire en bêta pour les mainteneurs sur les paquets indiqués comme protégés
npm : la version 6.2.0 du gestionnaire de paquets officiel de Node.js passe en @latest, avec quatre nouveautés d'importance autour
Node.js : eslint-scope, un paquet npm, a été infecté par un hacker pour lui permettre de voler des identifiants npm
npm : un bogue avec le code d'erreur « 418 I'm a teapot » a affecté le registre, empêchant l'utilisation du client npm derrière un proxy