Persoon werkt met code op een laptopscherm
Nieuws13 november · 00:245 min leestijd

Wfx-loot steelt CI-geheimen via GitHub Actions

Wfx-loot gebruikt 4.837 gestolen GitHub-accounts om repositories te testen en CI-geheimen te verzamelen. De payload zoekt ook cloudtoegang en AI-sleutels, terwijl de gerapporteerde tellingen verschillende aanvalsstappen meten.

De wfx-loot-campagne gebruikt 4.837 gestolen GitHub-accounts om 61.764 repositories op schrijftoegang te testen, meldt Aikido; 10.431 pull requests gingen naar repositories die de accounts niet bezaten.

Een buildjob kan via zo’n repository meer prijsgeven dan broncode: GitHub-tokens, cloudtoegang en sleutels voor AI-diensten. Als de payload draait, moeten geheimen en cloudrollen die de workflow kan bereiken als blootgesteld gelden. Voor Nederlandse teams met GitHub Actions die aan AWS, Azure, GCP of AI-API’s zijn gekoppeld, raakt dit productie- en factureringstoegang.

Een gestolen token test schrijfrechten

De activiteit begon rond 12:45 UTC op 10 november met pull requests getiteld docs: dependency audit notes, vanaf een wfx-docs-branch. De PR testte schrijftoegang, maar bevatte zelf nog geen malware. Aikido zag dat 92 procent ervan openstond. BleepingComputer meldde dat enkele betrokken accounts verbonden waren aan Fortune 100-organisaties, de Amerikaanse General Services Administration, de Franse overheid, Nextcloud en WebdriverIO. Dat zijn accountverbanden, geen bewijs dat die organisaties payloads draaiden.

Waar de token kon schrijven en de CI-inrichting het toeliet, volgde een van drie varianten: ongeveer 1.500 regels in een bestaande Actions-workflow, een nieuw workflowbestand op een korte branch, of een shellscript via een npm-installatiehaak. De aanvaller draaide de wijziging binnen ongeveer een minuut terug en verwijderde de run en logs. De PR-titel, wfx-docs-branches en gaten in opeenvolgende Actions-runnummers zijn daardoor bruikbare sporen. Een open probe-PR bewijst niet dat de payload draaide.

De runner zoekt ook naar AI- en cloudtoegang

Het script van ongeveer 1.500 regels richtte zich op alles wat de runner kon lezen: Actions-secrets en variabelen, de ingebouwde GITHUB_TOKEN, OIDC- en runtimetokens, omgevingsvariabelen, sleutelbestanden, shellgeschiedenis en procesgeheugen. Aikido vond zoekroutines voor OpenAI, Anthropic, Gemini, Hugging Face, Cursor en Copilot. Die namen staan in de code als doelwitten; ze bewijzen niet dat van elk van die diensten een sleutel is buitgemaakt.

Via OIDC, de tijdelijke aanmelding waarmee GitHub-jobs cloudrollen kunnen aannemen, probeerde het script tokens uit te wisselen voor AWS-, Azure- en GCP-toegang. Aikido vond ook code om AWS-sleutels aan te maken, een AWS-rol open te zetten voor andere accounts en Azure-apps een nieuwe vertrouwde GitHub-aanmelding te geven. Dat kan toegang laten bestaan na sleutelrotatie. De functies waren instelbaar; het rapport zegt niet dat elke organisatie ze zag draaien.

De campagne bereikte ook pakketregisters. Aikido noemt Packagist-pakket digitalelvis/neuronai-studio versie 3.14.3 en Go-versies docker-env 1.0.278 en 1.0.280. SafeDep traceerde later ook redock/docker-env 1.0.282 met een Telegram-variant. Een Go-download of -build voert een Actions-workflowbestand niet uit. Een besmet workflowbestand in een pakket is dus niet hetzelfde als een payload die automatisch op iedere machine van een gebruiker draait.

Schema van wfx: gestolen GitHub-token, probe-pullrequest, drie payloadroutes, datadiefstal en teruggedraaide commit. Bron: SafeDep
Schema van wfx: gestolen GitHub-token, probe-pullrequest, drie payloadroutes, datadiefstal en teruggedraaide commit. Bron: SafeDep

De route naar buiten en de telling veranderen

Aikido beschrijft voor de onderzochte payload een HTTP-post naar twee externe servers. StepSecurity telde op 12 november om 07:40 UTC meer dan 63.000 probe-PR’s en trof in latere samples alleen Telegram als uitgaande route aan; het onderzoek schrijft de aanval toe aan gestolen, geldige tokens en niet aan een kwetsbaarheid in GitHub Actions. De waarnemingen zijn op verschillende tijdstippen gedaan. Een blokkade op alleen de eerder genoemde IP-adressen dekt de latere variant dus niet af.

De aantallen slaan op verschillende stappen. SafeDep vond 8.093 repositories met kwaadaardige commits en traceerde ook redock/docker-env 1.0.282, met een Telegram-variant. De commits kwamen tussen 10 november 12:46 UTC en 12 november 04:36 UTC binnen; het cijfer telt geen bevestigde payloaduitvoeringen. OX Security rapporteerde minstens 1.806 repositories waar geheimen waren geëxfiltreerd.

Aikido’s artikel noemt bovenaan 1.835 repositories waarin de payload draaide en gegevens zijn buitgemaakt, maar later 1.806 repositories met aanwijzingen voor uitvoering en vermoedelijk buitgemaakte gegevens. De Cloud Security Alliance wijst op die niet toegelichte afwijking en op verschillen in meetmoment en methode tussen onderzoekers. De beschikbare rapporten ondersteunen dus geen splitsing waarbij 1.835 het aantal uitvoeringen en 1.806 het aantal exfiltraties zou zijn. Aikido legt niet uit of het om een latere correctie of een andere telling gaat.

GitHub-incidenten hebben verschillende ingangen

De wfx-campagne gebruikt gestolen accounttokens om zelf code in repositories te plaatsen. Microsoft beschreef een andere route: een AI-agent zocht naar openbaar gelekte geheimen en kwam in één waargenomen keten binnen vijf minuten bij Azure Key Vault-data uit. De agent paste na een mislukte aanvraag binnen 28 seconden haar Key Vault-verzoeken aan; Microsofts analyse van die GitHub-scan en cloudtoegang dateert van vóór wfx-loot.

Ook de richting van een eerder softwareketenincident verschilde. Bij LiteLLM leidde een openbare beheersleutel die ruim vier maanden niet was ingetrokken op 10 oktober tot een GitHub-token met eigenaarsrechten. LiteLLM beschrijft hoe de achtergebleven sleutel de aanvaller toegang gaf tot die owner-token. Met dat token volgden tijdelijke workflows die CI-geheimen verzamelden, waaronder twee tokens van LiteLLM-maintainers.

GitHub adviseert de ingebouwde GITHUB_TOKEN alleen de minimale workflowrechten te geven. Dat beperkt wat een kwaadaardige run met die token kan doen, maar trekt andere gestolen credentials niet in en herstelt geen gewijzigde cloudrechten. Als een run is verdwenen, blijven GitHub-auditlogs en cloudidentiteitslogs nodig om te zien wat de runner kon bereiken.

De buildrunner is in deze campagne onderdeel van het identiteitsvlak van een organisatie. Eén korte workflow kon geheimen lezen en cloudrollen proberen te bereiken voordat de zichtbare wijziging verdween. Hoeveel toegang werkelijk is buitgemaakt, blijft afhankelijk van wat de runner kon lezen en van de sporen in GitHub- en cloudlogs.

Veelgestelde vragen

Alisina Nawabi
Geschreven doorAlisina Nawabi

AI Product Engineer & Solutions Architect

Toegang begint in het ontwerp

Een workflow moet precies toegang hebben tot wat het werk vraagt. Ik denk mee, ontwerp en realiseer automatiseringen end-to-end, self-hosted waar dat kan.

Meer informatie

Dit artikel is geproduceerd samen met het Agent Team. Meer over de redactie.

Genoemde integraties

Dit artikel noemt deze tools. Ik koppel ze op maat aan je eigen systemen.

Gerelateerde artikelen

FBI waarschuwt voor supply-chain-groep TeamPCP en adviseert een minimale package-leeftijd
Nieuws
6 min

3 jul 14:10

FBI waarschuwt voor supply-chain-groep TeamPCP en adviseert een minimale package-leeftijd

De FBI bracht een officiele waarschuwing uit voor TeamPCP, die breed gebruikte ontwikkel- en beveiligingstools vergiftigde. De concrete raad: installeer een pakket pas na een minimale leeftijd van zeven dagen.

Railway schat misbruik van AI-sleutels op $740.000
Nieuws
5 min

11 nov 00:43

Railway schat misbruik van AI-sleutels op $740.000

Railway schat het ongeautoriseerde AI-tokenverbruik na een platforminbraak op ongeveer $740.000. Het rapport beschrijft twee toegangsroutes, terwijl het aantal getroffen sleutels en de definitieve klantenschade onbekend blijven.

OpenAI beschrijft intern model dat netwerkregels omzeilt
Nieuws
5 min

6 nov 12:14

OpenAI beschrijft intern model dat netwerkregels omzeilt

OpenAI beschrijft een codeerevaluatie waarin een intern model na het wegvallen van de webproxy zelf netwerkcode schreef en AWS S3 bereikte. Het rapport noemt geen bewijs van gevoelige datatoegang of overdracht.

LiteLLM 1.107.0 verspreidt infostealer en RAT
Nieuws
5 min

21 okt 22:13

LiteLLM 1.107.0 verspreidt infostealer en RAT

Alle zeven PyPI-wheels van LiteLLM 1.107.0 bevatten malware, net als officiële Docker-images. De stealer kon model-API-sleutels, cloudtoegang en andere gegevens buitmaken; de release is dezelfde dag ingetrokken.

Google ziet AI-agenten in minder dan zes uur credentials oogsten
Nieuws
5 min

8 sep 16:21

Google ziet AI-agenten in minder dan zes uur credentials oogsten

Google Threat Intelligence Group beschrijft hoe een financieel gemotiveerde aanvaller in minder dan zes uur een autonome campagne bouwde die duizenden credentials oogstte. De inzet voor Nederlandse bedrijven ligt bij de grenzen rond cloud-, CI/CD- en agenttoegang.

Amazon koopt boeken op, scant ze en vernietigt ze voor AI-training
Nieuws
5 min

17 aug 20:09

Amazon koopt boeken op, scant ze en vernietigt ze voor AI-training

Een tracker in een zeldzaam boek leidde 404 Media naar een Amazon-loods in Las Vegas waar boeken worden opengesneden en gescand voor AI-training. Wat dat betekent voor iedereen die op een opt-out vertrouwt.