Kampaņa bija vērsta pret desmitiem tūkstošu GitHub repozitoriju un izmantoja ļaunprātīgas darbplūsmas, lai iegūtu GitHub Actions noslēpumus un mākoņpakalpojumu piekļuves datus. Lai gan ļaunprogrammatūras slodze netika palaista visos mērķos, pētnieki apstiprinājuši, ka uzbrucēji noslēpumus nozaguši vismaz 1835 repozitorijos.

Uzbrucēji izmantoja tūkstošiem kompromitētu GitHub kontu, lai repozitorijiem, kuriem šie konti varēja piekļūt, iesniegtu izmaiņu priekšlikumus jeb pull request. Tādējādi tika pārbaudīts, vai kontiem ir pietiekamas rakstīšanas tiesības, lai repozitorijos ievietotu ļaunprātīgu kodu.

Kompromitēti arī ietekmīgu organizāciju konti

Starp kompromitētajiem kontiem bija konti, kas saistīti ar Fortune 100 uzņēmumiem, ASV Vispārējo pakalpojumu administrāciju, Francijas valdību, Nextcloud un WebdriverIO. Pēc lietojumprogrammu drošības uzņēmuma Aikido pētnieku aplēsēm aptuveni 50 no šiem kontiem, šķiet, bija publicēšanas tiesības citās atvērtā pirmkoda programmatūras ekosistēmās un pakotņu indeksos, tostarp npm, PyPI, Go, crates un Packagist.

Aikido norāda, ka kampaņa sākās 10. novembrī ap plkst. 12.45 pēc UTC. Izmantojot nozagtus akreditācijas datus no 4837 kompromitētiem GitHub kontiem, uzbrucēji pārbaudīja 61 764 repozitorijus, lai noskaidrotu, kuros no tiem iespējams veikt izmaiņas.

Pull request tika nosaukti par “docs: dependency audit notes”, radot iespaidu, ka tie saistīti ar atkarību audita piezīmēm. Aikido ziņo, ka 92% šo priekšlikumu joprojām bija atvērti, kas liecina — likumīgie repozitoriju īpašnieki ļaunprātīgo aktivitāti daudzos gadījumos nebija pamanījuši.

1,500 rindu skripts vāca piekļuves datus

Pēc piekļuves pārbaudes uzbrucēji piegādāja 1500 rindu garu čaulas skriptu, kas paredzēts akreditācijas datu zādzībai. To varēja ievietot, pārveidojot jau esošu GitHub Actions darbplūsmu, pievienojot jaunu darbplūsmu īslaicīgā atzarā vai ievietojot npm instalēšanas āķi.

Skripts atbalstīja arī mākoņvides privilēģiju paaugstināšanu. Tas izmantoja GitHub OIDC pilnvaras, lai iegūtu īslaicīgas AWS, Azure un GCP mākoņsesijas. AWS vidē skripts varēja sasaistīt repozitorijā pieejamās IAM lomas, lai izveidotu ilgtermiņa akreditācijas datus IAM lietotājiem. Savukārt savāktos pakalpojumu kontu akreditācijas datus tas varēja izmantot identitāšu uzdošanai par citām GCP vidē.

Aikido norāda, ka skripta iespējas ļāva izveidot noturīgu piekļuvi, ģenerējot ilgtermiņa akreditācijas datus vai mainot mākoņvides identitātes un uzticamības politikas, ja pieejamās atļaujas to ļāva. Savāktie dati tika saspiesti tar arhīvos un ar HTTP POST nosūtīti uz vienu no diviem uzbrucēju kontrolētiem galapunktiem.

Izmaiņas tika dzēstas mazāk nekā minūtes laikā

Kampaņas noslēguma posmā uzbrucēji ātri atjaunoja repozitoriju sākotnējo stāvokli, kā arī dzēsa darbplūsmu izpildes ierakstus un žurnālus. Pēc Aikido teiktā, viss process tika pabeigts mazāk nekā minūtes laikā.

Injected workflow step Injected workflow step Source: Aikido
Foto avots: bleepingcomputer.com · avots ↗

Automātiskās publicēšanas mehānismi tomēr nogādāja ļaunprātīgo slodzi Packagist pakotnē “digitalelvis/neuronai-studio” 3.14.3, kā arī divās Go moduļa “github.com/onuragtas/docker-env” versijās — v1.0.278 un v1.0.280. Pētnieki uzskata, ka uzbrucēju galvenais mērķis bija CI noslēpumu zādzība, bet pakotņu publicēšana, visticamāk, bija automatizētās izplatīšanas blakusiedarbība.

Pētnieki kampaņā konstatējuši arī noteiktas līdzības ar 2025. gada GhostAction kampaņu. Repozitoriju īpašniekiem ieteikts pārbaudīt, vai tajos nav atzara “wfx-docs”, izpētes pull request un pārtraukumu darbplūsmu izpildes numuru secībā.

Ja ir apstiprināts, ka ļaunprātīgā slodze tikusi palaista, visi noslēpumi un mākoņvides lomas, kas bija pieejamas ietekmētajām darbplūsmām, jāuzskata par kompromitētiem un nekavējoties jāmaina.