wfx-loot oli tunnistetietojen varastamiseen tähtäävä kampanja, jossa hyökkääjät käyttivät kaapattuja GitHub-tilejä koodivarastojen testaamiseen. Jos tilillä oli kirjoitusoikeus, hyökkääjät saattoivat lisätä CI-ympäristöön (jatkuvan integraation ympäristöön) koodia, jonka tarkoitus oli varastaa siellä saatavilla olevia salaisuuksia. Aikidon mukaan kampanja käytti 4 837 vaarantunutta tiliä ja kohdistui 61 764 koodivarastoon. Yhtiön julkaisemassa laskennassa haittaohjelma suoritettiin ja tunnistetietoja vietiin vähintään 1 835 koodivarastosta.
4
9
Milloin kampanja tapahtui?
Toiminta alkoi arviolta 10. marraskuuta 2026 kello 12.45 UTC. Erään raportin mukaan tunnustelevia pull request -pyyntöjä tehtiin 11. marraskuuta kello 15.00 UTC:hen asti – yhteensä noin 26 tuntia ja 15 minuuttia.
6
7 Tämä kuvaa havaittua tunnustelujaksoa, eikä vahvista, että kaikki haittaohjelman toiminta tai varastettujen tunnusten myöhempi käyttö olisi päättynyt tuolloin.
Kampanjasta raportoidut luvut koskevat sen eri vaiheita:
- 4 837 tiliä ilmoitettiin vaarantuneiksi.
- 61 764 koodivarastoon lähetettiin tunnusteleva pull request. Luku kertoo testatuista kohteista, ei siitä, että haittaohjelma olisi suoritettu jokaisessa.
- Aikidon julkaisemassa laskennassa haittaohjelma suoritettiin ja tunnistetietoja vietiin vähintään 1 835 koodivarastosta.
9
Osa samaan aikaan julkaistuista raporteista mainitsi pienemmän luvun, 1 806.
6
10 Käytettävissä olevat raportit eivät selitä lukujen eroa, joten niitä on syytä käsitellä erillisinä arvioina eikä yhdistää. Toimitettu aineisto ei myöskään vahvista myöhempää väitettä noin 1 970 vahvistetusta julkisesta tapauksesta yli 66 000 kohteessa.
Näin hyökkääjät testasivat pääsyä
Hyökkääjät avasivat pull request -pyyntöjä otsikolla docs: dependency audit notes ja käyttivät haaran nimeä wfx-docs. Pyynnöt toimivat tunnusteluna: niiden avulla testattiin, pystyikö vaarantuneella tilillä tekemään muutoksia kyseiseen koodivarastoon.
3
4
9
Kun oikeudet riittivät, hyökkääjät lisäsivät CI-ympäristöön tunnistetietoja varastavaa koodia. Kampanja nojasi varastettuihin, toimiviin tunnuksiin eikä GitHub Actionsin haavoittuvuuteen.
4
9 OX Security kuvasi haittaohjelmaa noin 1 500 rivin mittaiseksi shell-skriptiksi.
31
Raporttien mukaan haitallisia muutoksia ja työnkulkujen lokitietoja poistettiin joissakin tapauksissa, mikä vaikeutti jälkiselvitystä.
1
6 Käytettävissä oleva näyttö tukee yleistä toimintamallia – tunnustelua, haittaohjelman suorittamista ja jälkien siivoamista – mutta ei osoita, että jokainen raportoitu asennustapa tai commit-viesti olisi kuulunut jokaiseen tartuntaan.
Mitä haittaohjelma tavoitteli?
Raportoidun tavoitteen keskiössä oli CI-työnkulkujen käytettävissä olevien tunnistetietojen kerääminen. Niihin kuuluivat GitHub Actionsin salaisuudet ja pilvipalveluiden tunnukset. Raporteissa mainitaan myös yritykset saada tekoälypalveluiden käyttöön tarkoitettuja tunnuksia.
3
9 OX Securityn analyysin mukaan kohteisiin kuuluivat AWS:n, Azuren ja Google Cloudin tunnistetiedot.
31 Erillisissä raporteissa kerrotaan haittaohjelman voineen etsiä salaisuuksia suorittimen prosessimuistista, mutta toimitetut lähteet eivät kerro, kuinka usein tämä onnistui.
17
29
Yhteenvedossa kuvataan myös yrityksiä laajentaa pääsyä AWS:n luottamuskäytäntöjä muuttamalla ja Azureen liitetyillä federatiivisilla tunnistetiedoilla.
5 Nämä ovat raportoituja toimintatapoja, eivät todiste siitä, että jokaista uhrikoodivarastoa tai pilvitiliä olisi muutettu. Näyttö keskittyy tunnistetietojen varastamiseen; se ei osoita, että lähdekoodia tai asiakastietokantoja olisi varastettu.
9
15
Mitä havainnot kertovat – ja mitä eivät?
Yhden raportin mukaan 92 prosenttia niistä 10 431 tunnustelevasta pull request -pyynnöstä, jotka tehtiin yhteiskäyttäjän tai organisaation käyttöoikeuksilla, oli yhä avoinna tarkistushetkellä.
10
19 Tämä viittaa siihen, ettei moniin pyyntöihin ollut vielä reagoitu. Se ei kuitenkaan todista, etteivät omistajat tai tietoturvatiimit olisi havainneet niitä. Prosenttilukua ei pidä yleistää kaikkiin pull request -pyyntöihin.
Tutkintaohjeessa kerrottiin myös 173 tunnustelevasta pull request -pyynnöstä, jotka tehtiin 19 tililtä Fly.io GitHub Appin kautta. Havainto ei yksin osoita, että Fly.ion infrastruktuuri olisi murrettu tai että haittaohjelma olisi suoritettu jokaisessa kyseisten tunnusten kautta tavoitetussa koodivarastossa.
37
Mitä organisaatioiden kannattaa tarkistaa?
Jos organisaatiosi on saattanut altistua kampanjalle, erottele tutkinnassa tunnusteltu kohde, haitallinen koodi lisätty, haittaohjelma suoritettu ja tunnistetietoja viety. Nämä eivät tarkoita samaa asiaa.
- Etsi kampanjan tuntomerkkejä. Tarkista koodivarastot, joihin tileilläsi on kirjoitusoikeus, ja etsi pull request -pyyntöjä otsikolla
docs: dependency audit notes sekä wfx-docs-nimisiä haaroja.
9
- Tarkista CI- ja auditointitiedot. Käy läpi työnkulkujen suoritukset, commitit, haaratoiminta ja saatavilla olevat pilvipalvelulokit. Puuttuvat työnkulkujen suoritusnumerot voivat olla tutkintavihje, sillä raporteissa kerrotaan poistetuista suorituksista ja lokeista. Pelkkä aukko ei kuitenkaan todista vaarantumista.
1
24
- Sulje epäilty pääsy. Mitätöi vaarantuneiksi epäillyt GitHub-tunnukset ja tarkista tilien, yhteiskäyttäjien sekä GitHub Appien käyttöoikeudet.
- Vaihda altistuneet salaisuudet laajasti. Jos haittaohjelma suoritettiin, käsittele kyseisen työnkulun käytettävissä olleita salaisuuksia ja pilvirooleja mahdollisesti vaarantuneina – älä ainoastaan sellaisia tunnuksia, jotka näkyvät säilyneissä lokeissa.
3
9
- Etsi pilvipalveluihin tehtyjä muutoksia. Selvitä, onko AWS:n luottamuskäytäntöihin tai Azuren sovelluksiin ja federatiivisiin tunnistetietoihin tehty odottamattomia muutoksia. Tarkista myös luvattomat avaimet ja muut käyttöoikeusmuutokset.
5
- Säilytä todisteet. Tallenna jäljellä olevat auditointitiedot ja lokit ennen siivousta ja kirjaa, mitä hyökkäyksen vaiheita näyttö tukee.