ANALYSES
GitHub Actions, 23 000 dépôts : quand la pipeline expose les clés
Les 14 et 15 mars 2025, le composant tj-actions/changed-files, utilisé par plus de 23 000 dépôts, a été modifié pour écrire les secrets CI/CD dans les journaux ; la première cible était un projet de Coinbase. L'analyse : coûts sans vol, la pipeline comme fournisseur, responsabilité, cumul et questions pour les renouvellements.
Archives : reconstitution rédigée en novembre 2026
Thème du mois de mars 2025 · par cybercoverinsurance
Les 14 et 15 mars 2025, tj-actions/changed-files, un composant de GitHub Actions utilisé par plus de 23 000 dépôts, a été modifié pour écrire dans les journaux de compilation les secrets des projets qui l'utilisaient : clés cloud, jetons d'accès, clés privées. Quelques jours plus tôt, un autre composant, reviewdog/action-setup, avait été compromis. Les analyses ultérieures ont désigné un projet open source de Coinbase comme première cible.
Pour qui porte le risque cyber, le cas est utile même s'il n'a pas produit de grands sinistres connus. Il montre comment un seul composant de la chaîne de compilation peut exposer en quelques heures les identifiants de milliers d'organisations, et pose trois questions : que se passe-t-il quand des secrets fuient sans que personne ne les utilise, qui répond si du code altéré sort de la pipeline, et comment mesurer un cumul qui passe par les outils des développeurs.
Ce que l'on sait
Le composant. tj-actions/changed-files est une GitHub Action qui détecte les fichiers modifiés dans un projet. Selon StepSecurity, plus de 23 000 dépôts l'utilisaient. Le code altéré exécutait un script qui lisait dans la mémoire du processus de compilation les secrets CI/CD (clés API, mots de passe, jetons) et les écrivait dans les journaux. Pour les projets aux journaux publics, les secrets étaient lisibles par tous. Wiz a trouvé des dizaines de dépôts publics avec des secrets exposés, dont des clés AWS valides, des jetons GitHub et npm et des clés RSA privées (The Register).
La cause. L'attaque est passée par un jeton d'accès personnel lié au compte automatisé @tj-actions-bot. GitHub a déclaré ne pas pouvoir établir comment il avait été compromis. Le composant est référencé CVE-2025-30066, avec un score de 8,6 (The Register). La CISA l'a inscrit à son catalogue des vulnérabilités exploitées, avec une alerte du 18 mars (Cybersecurity Dive).
La chaîne. Le 11 mars, reviewdog/action-setup (CVE-2025-30154) avait été compromis, pendant environ deux heures et sur environ 1 500 dépôts selon Wiz. La compromission de tj-actions a duré environ 22 heures et touché environ 14 000 dépôts. Endor Labs a compté environ 218 dépôts ayant réellement exposé des secrets, pour la plupart des jetons GitHub qui expirent à la fin de la tâche (Cybersecurity Dive).
La cible. Selon Unit 42 de Palo Alto Networks, confirmé ensuite par Wiz, l'attaquant visait d'abord le flux CI/CD public d'agentkit, un projet open source de Coinbase. Le 14 mars, il avait obtenu un jeton avec droits d'écriture sur le dépôt, mais n'a pu ni accéder aux secrets de Coinbase ni publier de paquets. Après la réaction de Coinbase, il est passé à l'attaque étendue sur toutes les versions de tj-actions (Cybersecurity Dive).
Ce que l'on ne sait pas. Aucun vol de données ni aucune fraude attribuable aux secrets exposés n'a été rendu public. Rien ne prouve que les secrets des dépôts publics aient été envoyés vers des serveurs externes (The Register). Le nombre d'organisations ayant supporté des coûts de remédiation, et leur montant, sont inconnus.
Un secret exposé est déjà un incident
Aucun vol connu, beaucoup de coûts certains. Les consignes de GitHub, Wiz et Sysdig étaient les mêmes : considérer les projets comme compromis, renouveler tous les secrets, vérifier les flux exécutés les 14 et 15 mars (The Register, Cybersecurity Dive). Pour une entreprise avec des dizaines de pipelines, cela représente des jours d'analyse des journaux, de rotation des clés et de vérification des accès cloud.
La police doit dire si elle répond. De nombreuses polices cyber couvrent les frais de réponse après un événement de sécurité, mais la définition varie : accès non autorisé, violation suspectée, compromission d'identifiants. Un secret écrit dans un journal public, sans preuve d'utilisation, se situe à la limite. Pour qui porte le risque, il vaut mieux préciser à l'avance si les frais d'analyse et de rotation sont couverts même sans accès avéré.
La valeur d'un secret dépend de ce qu'il ouvre. Un jeton GitHub qui expire à la fin de la tâche vaut peu. Une clé AWS valide ouvre l'environnement cloud de production. La gravité de l'incident, et d'un éventuel sinistre, dépend des droits du secret plus que du composant compromis.
La pipeline est un fournisseur
Le code de tiers tourne avec les clés de l'assuré. Une GitHub Action est du code d'un tiers, téléchargé à chaque exécution, qui travaille avec les secrets du projet. C'est le même schéma que Polymarket en 2026 et Bybit en 2025 : du code externe exécuté au point le plus sensible. Dans la pipeline, ce point, ce sont les clés de publication et d'accès au cloud.
La référence par version ne protège pas. L'attaquant a déplacé toutes les étiquettes de version de tj-actions vers le code malveillant. Qui appelait le composant par version a reçu le nouveau code sans s'en apercevoir. GitHub recommande de fixer chaque Action à l'identifiant complet du commit (The Register). C'est un contrôle simple, vérifiable et peu répandu.
Les comptes automatisés sont des identités privilégiées. La porte d'entrée a été le jeton d'un compte bot. Ces comptes ont souvent des droits étendus, aucune authentification multifacteur et des jetons sans expiration. Après l'incident, tj-actions a réduit les droits, ajouté des passkeys et imposé des commits signés (The Register).
Responsabilité et cumul
Le risque majeur est le code qui sort, pas celui qui entre. Ici, l'attaquant cherchait des secrets. Avec un jeton d'écriture, il aurait pu insérer du code dans les paquets publiés par un projet. Pour un éditeur de logiciels, un paquet altéré distribué aux clients est un sinistre de responsabilité envers les tiers, avec des effets possibles sur de nombreuses victimes en aval.
Le cumul passe par les outils, pas par les secteurs. Les mêmes Actions sont utilisées par des banques, des éditeurs de logiciels, des assureurs et des administrations. Un portefeuille diversifié par secteur peut être concentré sur les mêmes outils de développement. La donnée n'apparaît pas dans les questionnaires classiques.
Un événement, de nombreuses échéances. La compromission a duré quelques heures, mais les secrets exposés peuvent être utilisés des semaines plus tard si personne ne les renouvelle. Un événement à cause unique peut produire des sinistres étalés dans le temps, avec des questions d'agrégation semblables à celles de Cleo et MOVEit.
Ce qu'il faut apporter aux renouvellements
Impact pour les assureursMoyen
Un composant de GitHub Actions utilisé par plus de 23 000 dépôts a exposé des secrets CI/CD pendant environ 22 heures, sans grands sinistres connus mais avec des coûts de remédiation répandus.
Côté portefeuille, la question utile est de savoir combien d'assurés utilisent GitHub Actions ou des outils similaires avec des composants tiers non fixés. Pour les éditeurs de logiciels, l'exposition en responsabilité envers les clients pour du code altéré doit être évaluée avec leur propre exposition cyber.