La campagne reposait sur l’automatisation et sur des techniques destinées à faire passer les commits malveillants pour de simples opérations de maintenance CI.
Les attaquants ont créé des comptes GitHub temporaires avec des noms aléatoires et ont usurpé l’identité d’outils d’automatisation avec des pseudonymes comme :
Ces identités donnaient l’impression que les commits provenaient d’un système automatisé légitime plutôt que d’un attaquant humain.
Les informations d’auteur et les messages de commit étaient soigneusement fabriqués pour ressembler à des mises à jour normales de configuration CI. Cette mise en scène a permis aux modifications malveillantes de se fondre dans l’activité habituelle de développement et de retarder les soupçons.
La campagne ciblait principalement des dépôts où les règles de protection de branche étaient inexistantes ou insuffisantes. Sans obligation de passer par une pull request ou par une revue de code, les attaquants pouvaient pousser directement des modifications vers la branche principale.
Chaque commit malveillant ajoutait un workflow GitHub Actions contenant un script Bash encodé en Base64. Lorsque le pipeline CI se déclenchait, ce script s’exécutait sur l’environnement du runner et lançait la collecte d’identifiants.
Dans de nombreux cas, l’attaque restait invisible jusqu’au prochain lancement du pipeline.
Le script encodé en Base64 intégré dans les workflows était conçu pour collecter des informations sensibles depuis l’environnement CI avant de les envoyer vers une infrastructure contrôlée par les attaquants.
Les cibles incluaient notamment :
Le malware collectait les variables d’environnement, des informations système et tous les secrets accessibles au runner CI avant de les exfiltrer vers un serveur de commande et contrôle.
Comme les pipelines CI contiennent souvent des identifiants de déploiement, compromettre l’environnement de build peut ouvrir l’accès à l’infrastructure cloud, aux registres de packages ou aux systèmes de production.
L’un des objectifs majeurs du payload Megalodon était de récupérer les jetons OIDC (OpenID Connect) utilisés par GitHub Actions.
Dans les architectures CI/CD modernes, les pipelines utilisent souvent la fédération d’identité OIDC pour s’authentifier auprès des fournisseurs cloud sans stocker de clés permanentes. Un workflow obtient alors un jeton d’identité temporaire que le fournisseur cloud échange contre des identifiants d’accès à durée limitée.
Cette approche améliore la sécurité en supprimant les clés API statiques. Mais elle crée un nouveau risque : si un attaquant parvient à voler ce jeton pendant l’exécution du pipeline, il peut temporairement se faire passer pour l’identité du job CI.
Comme ces jetons sont reconnus par les systèmes d’identité cloud, ils peuvent être échangés contre un accès temporaire aux ressources cloud avec les mêmes permissions que le pipeline de déploiement.
Concrètement, cela peut permettre :
Même si les jetons expirent rapidement, les permissions associées peuvent suffire à provoquer une compromission importante pendant cette courte fenêtre.
À la même période, GitHub a révélé un incident distinct impliquant une extension Visual Studio Code compromise installée sur l’ordinateur d’un employé. Cette extension malveillante a permis aux attaquants d’accéder à environ 3 800 dépôts internes de GitHub avant que l’incident ne soit contenu.
Cette intrusion a été attribuée à un environnement de développement compromis et reposait sur une extension trojanisée distribuée via le marketplace VS Code, capable de récupérer des identifiants et des jetons sur la machine de la victime.
Certains analystes ont noté des similitudes de calendrier et de méthodes avec d’autres attaques visant les outils de développement. Toutefois, aucune preuve publique ne confirme que ce piratage interne ait directement permis l’attaque Megalodon.
Pour l’instant, ces événements sont considérés comme deux incidents distincts mais contemporains affectant l’écosystème des développeurs.
La campagne Megalodon illustre une évolution des attaques supply‑chain : plutôt que d’altérer le code applicatif, les attaquants ciblent désormais l’infrastructure d’automatisation.
En compromettant les workflows CI, ils peuvent :
Comme des milliers de projets s’appuient sur des pipelines CI/CD disposant d’identifiants puissants, une simple modification de workflow peut exposer des secrets à grande échelle dans des systèmes en aval.
L’incident rappelle plusieurs bonnes pratiques essentielles pour les équipes de développement :
À mesure que les pipelines CI/CD contrôlent l’accès aux déploiements et à l’infrastructure cloud, leur sécurité devient un élément central de la défense de la chaîne d’approvisionnement logicielle.