Package PyPI avec 1,1M de téléchargements mensuels piraté pour propager un infostealer

Package PyPI avec 1,1M de téléchargements mensuels piraté pour propager un infostealer

Un incident de cybersécurité a récemment touché le Python Package Index (PyPI), où une version malveillante du paquet elementary-data a été mise en ligne afin de dérober des données sensibles des développeurs et des informations sur des portefeuilles de cryptomonnaies.

La version compromise, 0.23.3, a également impacté les images Docker en raison du flux de travail de création d’image spécifique au paquet, qui compile le code et le télécharge dans un registre de conteneurs.

Un membre de la communauté, identifié sous le nom de crisperik, a découvert cette anomalie et a immédiatement ouvert une issue sur le GitHub du projet, informant les mainteneurs et réduisant ainsi le temps d’exposition.

Une version corrigée, elementary-data 0.23.4, a été rapidement publiée, mais les utilisateurs ayant déjà téléchargé la version compromise restent vulnérables.

Le paquet elementary-data est un outil open-source de visibilité des données, principalement utilisé par des ingénieurs de données pour la gestion de workflows avec dbt (Data Build Tool). Sa popularité est marquée par plus de 1,1 million de téléchargements mensuels sur PyPI.

Une analyse de l’incident réalisée par des chercheurs de StepSecurity révèle que l’attaquant a exploité une faille dans le flux de travail du projet, et non pas compromis les comptes des mainteneurs, une méthode fréquente lors de mises à jour malveillantes.

L’attaquant a inséré un commentaire malveillant sur une demande de tirage, tirant profit d’une vulnérabilité d’injection dans un script GitHub Actions, ce qui a permis l’exécution de code shell contrôlé par l’attaquant.

Ce processus a exposé le GITHUB_TOKEN du workflow, lequel a été utilisé pour forger un commit signé et un tag (v0.23.3) afin de déclencher le pipeline de publication légitime du projet.

Le pipeline a ensuite construit et publié le paquet compromis sur PyPI ainsi qu’une image malveillante sur le GitHub Container Registry, donnant l’apparence d’une publication officielle.

The malicious release on PyPI
The malicious release on PyPI
Source: StepSecurity

Cette version malveillante contenait un fichier elementary.pth qui s’exécutait automatiquement au démarrage, permettant le chargement d’un voleur de secrets ciblant divers types de données, notamment :

  • Clés SSH, identifiants Git, informations d’authentification cloud (AWS/GCP/Azure)
  • Secrets Kubernetes, Docker et CI
  • Fichiers .env et tokens développeur
  • Fichiers de portefeuilles de cryptomonnaie (Bitcoin, Litecoin, Dogecoin, Zcash, Dash, Monero, Ripple)
  • Données système (/etc/passwd, journaux, historique des commandes)

Les chercheurs rappellent que le même code malveillant a atteint l’image Docker du projet en raison d’un workflow qui télécharge sur PyPI et construit également une image Docker.

D’après StepSecurity, les systèmes n’ayant pas utilisé de versions fixes ont automatiquement récupéré la version compromise.

Les utilisateurs ayant téléchargé la version malveillante, elementary-data==0.23.3, ainsi que les images avec les tags ghcr.io/elementary-data/elementary:0.23.3 et :latest, doivent procéder à une rotation de tous leurs secrets et restaurer leurs environnements à partir d’un point de sauvegarde connu comme sécurisé.