Surprise : Dependabot génère du code malveillant

Par :
Jossef Harush Kadouri, Guy Nachshon, Tzachi Zornshtain, Aviad Gershon

jeu, 28/09/2023 - 17:01

En résumé :

  • En juillet 2023, les scanners de Checkmarx ont détecté des commits anormaux contenant du code malveillant pointant vers des centaines de dépôts GitHub fournis par Dependabot  
  • Ces commits ont été conçus par les acteurs de la menace comme des contributions automatisées de l’outil Dependabot dans la chronologie des projets.
  • Mode opératoire :  le token d’accès personnel GitHub des victimes a été volé et utilisé par les attaquants.
  • Le code malveillant a exfiltré les secrets définis du projet GitHub vers un serveur C2 malveillant et modifié les fichiers javascript existants avec un password stealer affectant tout utilisateur final ayant soumis son mot de passe via un formulaire Web.
  • Cette attaque a impacté les dépôts des organisations GitHub privées, auxquels certains token des victimes avaient également accès.
  • On ne sait pas encore comment les tokens d'accès personnels des victimes ont été volés, il peut s'agir d'un paquet open source malveillant installé sur leur PC.
  • L'utilisation des tokens d'accès personnels GitHub a été indétectable pour la plupart des utilisateurs. 

Dependabot est l'outil gratuit automatisé de gestion des dépendances de GitHub pour les projets logiciels. Il surveille en permanence les dépendances (comme les bibliothèques et les paquets) à la recherche de failles de sécurité et de versions obsolètes. Lorsqu'il détecte des problèmes, il génère automatiquement des pull requests pour les mises à jour des paquets, aidant ainsi les développeurs à maintenir leurs logiciels sécurisés et optimisés. 

Capture d'écran de la pull request automatique de dependabot du projet Flask

Le faux commits Dependabot 

Entre le 8 et le 11 juillet 2023, les pirates ont commencé à compromettre des centaines de dépôts GitHub publics et privés. La plupart des victimes étaient des comptes utilisateurs indonésiens. Les attaquants ont utilisé une technique pour falsifier les commits (en savoir plus ici) pour tromper les développeurs leur donnant à penser qu’ils étaient issus de l’authentique Dependabot.

Les attaquants ont ensuite créé un commit « corriger » qui semblait avoir été contribué par un compte utilisateur « dependabot[bot] »

Capture d'écran du faux commit, tirée du  référentiel highpolar-softwares/I-help-privacy-policy

Code malveillant

Dans les différents dépôts analysés (la liste complète est confidentielle mais il y en avait des centaines), Checkmarx a identifié deux groupes de modifications malveillantes et répétées du code, très probablement effectuées via un script automatisé.

Une nouvelle action GitHub pour voler des secrets

Un fichier GitHub « hook.yml » a été ajouté en tant que nouveau fichier de workflow, déclenchant un événement de distribution de code. Il a exfiltré des secrets et des variables GitHub vers l'URL hxxps://send[.] wagateway.pro/webhook. Cette action a été déclenchée à chaque événement de distribution.

Capture d'écran du commit malveillant attribué à highpolar-softwares/I-help-privacy-policy

Patching des fichiers *.js pour voler des mots de passe

En plus de l'action GitHub, les attaquants ont modifié chaque fichier de projet existant doté de l'extension « *.js » ajoutant à la fin une ligne d’obfuscation, pour créer un nouveau tag de script lorsque le code est exécuté sur un navigateur et chargeant  un script supplémentaire à partir de l’URL : hxxps://send[.] wagateway.pro/client.js?cache=ignore.

Capture d'écran du commit malveillant attribué à Juniorriau/Kejaribiak

 

Le code chargé à partir de hxxps://send[.] wagateway.pro/client.js?cache=ignore intercepte tout formulaire Web de mot de passe et envoie les informations d'identification de l'utilisateur au même endpoint d'exfiltration ; URL hxxps://send[.] wagateway.pro/webhook

Capture d'écran du code malveillant conçu pour dérober les informations d'identification du formulaire utilisateur.

Mode opératoire

Au début, l’équipe n’avait pas identifié comment l'attaquant avait accès à ces comptes, d’autant plus que GitHub a renforcé sa sécurité en annonçant plus tôt cette année l’authentification à double facteur obligatoire.  

Pour améliorer sa compréhension, Checkmarx s’est rapproché d’un certain nombre de victimes en les informant de cette violation. Certaines ont révélé que les attaquants avaient accédé aux comptes à l'aide d'un PAT compromis (Personal Access Token), probablement exfiltré furtivement de leur environnement de développement.

Étape 1 – Initialisation de l'espace de travail

La victime configure son environnement de développement avec un token d'accès personnel (ou clé SSH/GPG) identifiant son compte chaque fois qu'elle effectue des opérations git. Ce token est stocké localement sur sa machine et peut en être extrait facilement. Il ne nécessite pas de double authentification et peut être utilisé pour accéder au compte utilisateur depuis n'importe quel ordinateur ayant accès à Internet.

Étape 2 – Vol des informations d'identification du développeur

Si Checkmarx ne peut que deviner la façon dont les pirates ont obtenu les informations d'identification des développeurs, la présence de nombreux packages malveillants visant à effectuer cette tâche suggère que c’est le moyen potentiel privilégié pour obtenir les tokens GitHub. Les victimes ont ainsi pu été infectées par un paquet malveillant, qui a ensuite exfiltré le token sur le serveur C2 de l'attaquant.

Étape 3 – Empoisonnement des code des projets de la victime

Dans cette étape, les attaquants ont utilisé les tokens d'accès personnels volés pour s'authentifier sur GitHub et apporter les modifications de code décrites ci-dessus. L'ampleur de l'attaque révèle qu'elle a dû être automatisée.

 

Conclusion

Il est ainsi nécessaire de redoubler de vigilance sur la provenance du code même s’il est issu de plateformes de confiance telles que GitHub. C'est ici le premier incident de sécurité identifié par les équipes de recherche de Checkmarx au cour duquel un acteur de la menace a utilisé de faux commits git pour déguiser son activité, sachant que de nombreux développeurs ne vérifient pas les modifications envoyées par Dependabot lorsqu’ils les voient.

Pour renforcer la sécurité, il est préconisé d’utiliser les tokens d'accès personnel granulaires de GitHub .

Malheureusement, l’activité de logs du token étant uniquement visible pour les comptes entreprise, il est donc difficile d’identifier une compromission des utilisateurs individuels, cette information n’étant pas visible sur leurs journaux d’audit.

Impliquant l'utilisation de faux commits, le vol d’informations d'identification de l'utilisateur et le spoofing de Dependabot, les tactiques, techniques et procédures (TTP) de l'attaquant démontrent une sophistication de plus en plus grande des attaques ciblant la supply chain.

IOC :

-        Wagateway[.] pro

-        hxxps://send[.] Wagateway[.] pro/webhook

-        hxxps://send[.] Wagateway[.] pro/client.js

Chronologie

  • En 2023 - Le pirate a ciblé les victimes et dérobé des token d'accès personnels (nous ne connaissons pas le mode opératoire mais deviné l’implication de paquets malveillants) 
  • 08-07-2023 – Il a utilisé un token GitHub volé au cours d’une attaque automatisée, infectant plusieurs dépôts
  • 24-07-2023 – Identification de l’anomalie et début de l’investigation de Checkmarx
  • 24-07-2023 – Contact des comptes GitHub infectés par cette attaque + signalement à GitHub
  • 20-09-2023 – Rencontre avec l'une des victimes, examen de ses journaux d'accès, pour comprendre le flux d'attaque.

A propos de l'auteur

Jossef Harush Kadouri, Guy Nachshon, Tzachi Zornshtain, Aviad Gershon
CHECKMARX