Coinbase initialement ciblé par une attaque de la chaîne d’approvisionnement de GitHub Actions ; les secrets CI/CD de 218 référentiels dévoilés
L’attaque de la chaîne d’approvisionnement impliquant l’action GitHub « tj-actions/changed-files » a commencé comme une attaque très ciblée contre l’un des projets open source de Coinbase, avant d’évoluer vers quelque chose de plus répandu.
« La charge utile visait à exploiter le flux CI/CD public de l’un de leurs projets open source, AgentKit, probablement dans le but de l’exploiter pour d’autres compromissions », a déclaré l’unité 42 de Palo Alto Networks dans un rapport. « Cependant, l’attaquant n’a pas pu utiliser les secrets Coinbase ni publier de packages. »
L’ incident a été révélé le 14 mars 2025, lorsqu’il a été découvert que le fichier « tj-actions/changed-files » avait été compromis pour injecter du code divulguant des secrets sensibles des dépôts exécutant le workflow. L’identifiant CVE lui a été attribué : CVE-2025-30066 (score CVSS : 8,6).
Selon Endor Labs, on estime que 218 référentiels GitHub ont exposé leurs secrets en raison de l’attaque de la chaîne d’approvisionnement, et la majorité des informations divulguées incluent « quelques dizaines » d’informations d’identification pour DockerHub, npm et Amazon Web Services (AWS), ainsi que des jetons d’accès à l’installation GitHub.
« L’ampleur initiale de l’attaque de la chaîne d’approvisionnement semblait effrayante, étant donné que des dizaines de milliers de référentiels dépendent de GitHub Action », a déclaré le chercheur en sécurité Henrik Plate .
« Cependant, une analyse approfondie des flux de travail, de leurs exécutions et des secrets divulgués montre que l’impact réel est plus faible que prévu : « Seuls » 218 référentiels ont divulgué des secrets, et la majorité d’entre eux sont des GITHUB_TOKEN de courte durée, qui expirent une fois l’exécution d’un flux de travail terminée. »
Depuis, il est apparu que la balise v1 d’une autre action GitHub appelée « reviewdog/action-setup », sur laquelle « tj-actions/changed-files » repose comme dépendance via « tj-actions/eslint-changed-files », a également été compromise à l’approche de l’incident tj-actions avec une charge utile similaire. La violation de « reviewdog/action-setup » est répertoriée sous la référence CVE-2025-30154 (score CVSS : 8,6).
L’exploitation de CVE-2025-30154 aurait permis à l’acteur de menace non identifié d’obtenir un jeton d’accès personnel (PAT) associé à « tj-actions/changed-files », lui permettant ainsi de modifier le référentiel et de pousser le code malveillant, impactant à son tour chaque référentiel GitHub qui dépendait de l’action.
« Lorsque l’action tj-actions/eslint-changed-files a été exécutée, les secrets du coureur CI tj-actions/changed-files ont été divulgués, permettant aux attaquants de voler les informations d’identification utilisées dans le coureur, y compris un jeton d’accès personnel (PAT) appartenant au compte utilisateur GitHub tj-bot-actions », ont déclaré les chercheurs de l’unité 42 Omer Gil, Aviad Hahami, Asi Greenholts et Yaron Avital.
On soupçonne actuellement que l’attaquant a réussi à accéder à un jeton disposant d’un accès en écriture à l’organisation reviewdog afin d’effectuer les modifications malveillantes. Cela dit, la manière dont ce jeton a pu être acquis reste inconnue à ce stade.
De plus, les commits malveillants sur « reviewdog/action-setup » auraient été effectués en forçant d’abord le référentiel correspondant, en y appliquant des modifications, puis en créant une demande d’extraction de fork vers le référentiel d’origine et en introduisant finalement des commits arbitraires – un scénario appelé un commit suspendu.
« L’attaquant a pris des mesures importantes pour dissimuler ses traces en utilisant diverses techniques, comme l’exploitation de commits suspendus, la création de plusieurs comptes utilisateurs GitHub temporaires et l’obscurcissement de ses activités dans les journaux de workflow (notamment lors de l’attaque initiale contre Coinbase) », a déclaré Gil, responsable de recherche senior chez Palo Alto Networks, à The Hacker News. « Ces résultats indiquent que l’attaquant est hautement qualifié et possède une connaissance approfondie des menaces de sécurité CI/CD et des tactiques d’attaque. »
L’unité 42 a émis l’hypothèse que le compte utilisateur derrière la demande d’extraction de fork, « iLrmKCu86tjwp8 », aurait pu être caché au public après que l’attaquant soit passé d’une adresse e-mail légitime fournie lors de l’inscription à une adresse e-mail jetable (ou anonyme) en violation de la politique de GitHub.
Cela aurait pu entraîner le masquage de toutes les interactions et actions effectuées par l’utilisateur. Cependant, contacté pour un commentaire, GitHub n’a ni confirmé ni infirmé cette hypothèse, mais a indiqué qu’il étudiait activement la situation et prenait les mesures nécessaires.
« Il n’existe actuellement aucune preuve suggérant une compromission de GitHub ou de ses systèmes. Les projets mis en évidence sont des projets open source gérés par les utilisateurs », a déclaré un porte-parole de GitHub à The Hacker News.

GitHub continue d’examiner et de prendre des mesures suite aux signalements d’utilisateurs concernant le contenu du référentiel, y compris les logiciels malveillants et autres attaques malveillantes, conformément à ses politiques d’utilisation acceptable . Les utilisateurs doivent toujours consulter GitHub Actions ou tout autre package utilisé dans leur code avant de mettre à jour leur code. Cela reste vrai ici comme dans tous les autres cas d’utilisation de code tiers.
Une recherche plus approfondie des forks GitHub de tj-actions/changed-files a permis de découvrir deux autres comptes, « 2ft2dKo28UazTZ » et « mmvojwip », tous deux supprimés de la plateforme. Ces deux comptes ont également créé des forks de dépôts liés à Coinbase, tels que onchainkit, agentkit et x402.
Un examen plus approfondi a révélé que les comptes ont modifié le fichier « changelog.yml » dans le référentiel agentkit à l’aide d’une demande d’extraction fork pour pointer vers une version malveillante de « tj-actions/changed-files » publiée précédemment à l’aide du PAT.
On pense que l’attaquant a obtenu un jeton GitHub avec des autorisations d’écriture sur le référentiel agentkit – facilitées à leur tour par l’exécution des actions GitHub tj-actions/changed-files – afin d’effectuer les modifications non autorisées.
Un autre aspect important qui mérite d’être souligné est la différence dans les charges utiles utilisées dans les deux cas, indiquant des tentatives de la part de l’attaquant de rester sous le radar.
« L’attaquant a utilisé différentes charges utiles à différentes étapes de l’attaque. Par exemple, lors de l’attaque généralisée, il a vidé la mémoire du runner et imprimé les secrets stockés sous forme de variables d’environnement dans le journal du workflow, quel que soit le workflow en cours d’exécution », a expliqué Gil.
« Cependant, en ciblant Coinbase, l’attaquant a spécifiquement récupéré le GITHUB_TOKEN et s’est assuré que la charge utile ne s’exécuterait que si le référentiel appartenait à Coinbase. »
L’objectif final de la campagne est actuellement inconnu. Il est fortement suspecté que l’objectif était un gain financier, probablement une tentative de vol de cryptomonnaies, compte tenu du ciblage très précis de Coinbase, a souligné Gil. Le 19 mars 2025, la plateforme d’échange de cryptomonnaies avait remédié à l’attaque.
On ne sait pas non plus clairement ce qui a poussé l’attaquant à changer de stratégie, transformant ce qui était initialement une attaque ciblée en une campagne à grande échelle et moins furtive.
« Une hypothèse est qu’après avoir réalisé qu’ils ne pouvaient pas utiliser leur jeton pour empoisonner le référentiel Coinbase – et après avoir appris que Coinbase avait détecté et atténué l’attaque – l’attaquant a craint de perdre l’accès à l’action tj-actions/changed-files », a déclaré Gil.
« Comme la compromission de cette action pouvait donner accès à de nombreux autres projets, ils ont peut-être décidé d’agir rapidement. Cela pourrait expliquer pourquoi ils ont lancé cette attaque à grande échelle seulement 20 minutes après que Coinbase a atténué son exposition, malgré le risque accru de détection. »