wfx-loot : une campagne vole les secrets CI de 61 000 dépôts GitHub et vise les clés d'IA

Aikido Security a révélé le 12 novembre une campagne de vol de secrets à grande échelle sur GitHub, baptisée wfx-loot. À partir du 10 novembre, vers 12 h 45 UTC, un attaquant a commencé à utiliser des identifiants GitHub volés pour ouvrir des pull requests de sondage dans 61 764 dépôts et y injecter une charge utile qui vole les secrets d'intégration continue (CI) et les identifiants cloud — y compris les clés de services d'IA comme OpenAI, Anthropic, Gemini, Cursor et Copilot.

Selon Aikido, 4 837 comptes compromis ont ouvert 61 839 pull requests de sondage, toutes intitulées « docs: dependency audit notes », depuis des branches nommées « wfx-docs ». Au moins 1 806 dépôts ont exécuté la charge utile — et l'entreprise estime que le chiffre réel est plus élevé, car l'attaquant efface les journaux d'exécution. Environ 92 % des sondages étaient encore ouverts au moment de la publication du rapport, ce qui laisse penser que la plupart des responsables ne s'en étaient pas aperçus.

Comment fonctionne l'attaque

L'attaque comporte trois étapes. D'abord, l'attaquant ouvre la pull request de sondage, qui confirme l'accès en écriture au dépôt. Ensuite, il injecte la charge utile de trois façons : en ajoutant environ 1 500 lignes à un workflow existant, avec des commits comme « ci: refresh build cache » ; en créant un script et un hook « postinstall » dans package.json, qui s'exécute à chaque « npm install » ; ou en créant un nouveau workflow sur une branche jetable. Enfin, l'attaquant annule les modifications en moins d'une minute et supprime l'exécution du workflow et ses journaux — un numéro d'exécution manquant dans l'historique est souvent la seule trace.

Ce que vole la charge utile — et les clés d'IA visées

La charge utile est un unique script shell d'environ 1 500 lignes. Elle collecte les secrets GitHub Actions, les jetons OIDC, les fichiers d'identifiants AWS, Azure et GCP, les clés SSH et GPG, les fichiers .env et .pem, les historiques de shell et même la mémoire des processus du runner. Parmi ses cibles figurent les identifiants de fournisseurs et d'outils d'IA : OpenAI, Anthropic/Claude, Gemini, Hugging Face, Cursor, Copilot, Codex, Continue, Codeium, Aider, Weights & Biases et Ollama.

Après la collecte, le script tente d'élever ses privilèges : il échange des jetons OIDC contre des sessions cloud, crée des clés d'accès durables dans AWS et usurpe des comptes de service dans GCP. Pour survivre à la rotation des identifiants, il falsifie des contrôles de statut pour contourner la protection des branches, réécrit les politiques de confiance des rôles AWS pour ouvrir l'accès à n'importe quel compte, et injecte des identifiants fédérés préfixés « wfx-ci- » dans des applications Azure. Dans cette campagne, les données n'ont été envoyées que par HTTP POST vers deux serveurs contrôlés par l'attaquant.

Paquets contaminés et lien avec GhostAction

La campagne a aussi atteint des paquets publiés via des déclencheurs automatiques : la version 3.14.3 du paquet Packagist « digitalelvis/neuronai-studio » contenait la charge utile — toute machine ayant installé ou ouvert cette version doit être considérée comme compromise — et deux tags du module Go « github.com/onuragtas/docker-env » portaient la charge utile dans un fichier de workflow. SafeDep a compté 8 093 dépôts publics avec des commits malveillants, un chiffre qui mesure les commits et non les exécutions, d'où l'écart avec le comptage d'Aikido.

Il y a un chevauchement avec la vague GhostAction d'octobre, qui utilisait des workflows d'« audit de sécurité » pour voler des secrets dans plus de 30 000 dépôts : les comptes touchés en octobre avaient une probabilité nettement plus élevée d'être touchés à nouveau, et dans plus de 100 dépôts, wfx-loot a été injecté dans les propres fichiers de GhostAction. Malgré cela, Aikido estime qu'il s'agit de campagnes distinctes, probablement menées par des acteurs différents, car leurs infrastructures, outils et techniques diffèrent.

Que faire

Les mainteneurs de dépôts doivent rechercher les pull requests intitulées « docs: dependency audit notes », les branches « wfx-docs » ou les commits comme « ci: refresh build cache » et « chore: add ci helper » depuis le 10 novembre, ainsi que les trous dans la numérotation des exécutions de workflows. Si la charge utile s'est exécutée, Aikido recommande de supposer que tous les secrets et rôles cloud accessibles aux workflows sont compromis : faire tourner les identifiants, revoir les rôles AWS et les identifiants fédérés Azure, et retirer les versions contaminées des paquets.

Crédit image : image officielle du blog d'Aikido Security sur la campagne wfx-loot. Crédit : Aikido Security.

Sources : Aikido Security — wfx-loot campaign pushes CI secret stealer to tens of thousands of repositories ; GBHackers — GhostAction Attack Hits Tens of Thousands of GitHub Repositories ; OSSprey — WFX and GhostAction: Tracing the Links Between Two GitHub Attacks ; Corgea — WFX Phantom (wfx-loot) GitHub Actions secret stealer.

Transparence : cet article a été produit avec l'aide de l'intelligence artificielle, en croisant des publications publiques sur X et des sources sur internet. Nous recommandons de consulter les sources originales pour plus de détails.

Par Muse