Drošības uzņēmums Socket 23. jūlijā publicēja izpēti par kampaņu, kurā uzbrucējs pārņēma kāda PHP izstrādātāja GitHub kontu un tā krātuvēs ievietoja 583 ļaunas GitHub Actions plūsmas. Pašas PHP bibliotēkas palika nemainīgas. Viss triks balstās uz Packagist uzvedību: pakalpojums automātiski sinhronizē izstrādes versijas, tāpēc ļaunās plūsmas izplatījās pa desmit pakotnēm bez vienas koda rindiņas maiņas.
Kampaņa notika starp 12. un 13. jūliju. Skartais konts pieder izstrādātājam ar segvārdu dinushchathurya, kurš uztur nelielas Šrilankas un Lielbritānijas datu bibliotēkas. Vidū ir tādi projekti kā uk-post-code, srilankan-universities un websmslk. Tās ir mazas palīgbibliotēkas ar tīri labdabīgu kodu, tieši tāpēc uzbrukums ilgu laiku palika nepamanīts. Katrā no desmit krātuvēm nokļuva no 55 līdz 62 YAML failiem, kopā 583. Plašākā operācija sniedzas vēl tālāk, jo aptuveni 6100 GitHub plūsmu satur to pašu unikālo DNSHook identifikatoru.
Packagist automātiskā sinhronizācija ir šī uzbrukuma dzinējs. Kad izstrādātājs iestata krātuvi tā, lai Packagist seko izstrādes zariem, katrs jauns komits GitHub pusē uzreiz kļūst par pieejamu izstrādes versiju pakotnē. Uzbrucējs pievienoja ļaunās plūsmas tieši šiem zariem un Packagist tās izplatīja tālāk pats no sevis.
Pakotne nav izpildes vieta
Šeit slēpjas galvenais pavērsiens. Parasti ļauna npm vai PyPI pakotne izpilda kodu uz tā datora, kas to instalē. Šoreiz tā nenotiek. Instalējot Packagist bibliotēku, plūsmu faili nokļūst vendor mapē un tur paliek guļam. Kaitīgais kods sāk darboties tikai tad, kad kāds nosūta izmaiņas uz pašu pārņemto GitHub krātuvi vai palaiž plūsmu ar roku. Tad GitHub uzceļ savu Ubuntu izpildītāju un tur notiek viss pārējais. Tāpēc parastie piegādes ķēdes skeneri, kas pārbauda instalētā koda saturu, šo uzbrukumu neredz.
«PHP bibliotēkas nebija izpildes ceļš. Uzbrucēji bija pievienojuši desmitiem ļaunu GitHub Actions plūsmu pārņemtā uzturētāja pirmkoda krātuvēm,» raksta Socket.
Ko dara pati plūsma
Katra plūsma palaiž īslaicīgu GitHub Ubuntu izpildītāju, nolasa procesora arhitektūru un lejupielādē tai atbilstošu Linux slodzi no komandservera ar adresi 43.228.157.68. Atbalstītas ir četras arhitektūras: 32 un 64 bitu x86 kopā ar 32 un 64 bitu ARM. Slodze sūta serverim dzīvības signālu ik pēc 30 sekundēm un rezultātus dod atpakaļ pa gabaliem, līdz 2000 rindiņām vienā HTTP pieprasījumā. Tā kā darbs notiek uz GitHub bezmaksas izpildītājiem, uzbrucējam nav vajadzīga sava skaitļošanas jauda un pati datplūsma izskatās pēc parastas nepārtrauktās integrācijas.
Skeneris medī cPanel serverus
Lejupielādētā slodze darbojas kā interneta mēroga skeneris. Tā meklē cPanel un WHM saskarnes uz portiem 80, 443, 8080, 8443, 2082, 2083, 2086 un 2087. Atradusi tādu, tā mēģina izmantot CVE-2026-41940, autentifikācijas apiešanas caurumu cPanel un WHM vadības panelī, kas ļauj attālam uzbrucējam pārņemt paneli bez pieteikšanās. Ja tas izdodas, skeneris savāc visu vērtīgo: AWS atslēgas, GitHub un GitLab žetonus, OpenAI un Google API atslēgas, Stripe maksājumu atslēgas, SendGrid un Mailgun pasta pakalpojumu atslēgas, datubāzu paroles, SSH atslēgas un git attālinātās adreses.
Datu izvešana caur GitHub
Visa saziņa notiek caur trim komandservera galapunktiem. Slodzi izpildītājs paņem no ceļa /api/dl, kuram seko arhitektūras nosaukums, piemēram amd64 vai arm64. Dzīvības signāls aiziet uz /api/github-heartbeat, bet nozagtie dati plūst uz /api/github-results. Rezultāti tiek sadalīti pa gabaliem. Vienā HTTP pieprasījumā aiziet ne vairāk kā 2000 rindiņu. Pēdējā savākšanas reizē robeža ir 5000 rindiņu. Šāda plūsma iekļaujas GitHub parastajā tīkla darbībā un neizraisa acīmredzamu trauksmi, jo tieši tāda datplūsma no izpildītājiem uz ārējiem serveriem ir ikdiena tūkstošiem godīgu projektu.
Cik plaša ir operācija
583 faili vienā kontā ir tikai redzamā daļa. Socket atrada aptuveni 6100 GitHub plūsmu ar to pašu DNSHook identifikatoru f5b0b742-240a-4811-8a5b-b0ba6060685d. Meklējot pēc komandservera un skenera pēdām, skaitlis kāpj tuvu 16 000 failiem. Kampaņu atklāja Socket pētnieks Kirils Boičenko ar kolēģiem. Redzamākais brīdinājuma signāls uzturētājam ir liels YAML failu skaits vienā izstrādes versijā, jo īsts projekts reti tur 55 līdz 62 atsevišķas plūsmas.
Ko darīt tagad
PHP izstrādātājiem, kuru atkarību sarakstā ir kāda no desmit skartajām dinushchathurya pakotnēm, der pārbaudīt vendor koka mapi .github/workflows un izņemt jebkuru nepazīstamu YAML failu. cPanel un WHM administratoriem jāuzliek CVE-2026-41940 ielāps un jānomaina katra atslēga, kas serverī varēja būt izlasāma. GitHub krātuvju īpašniekiem vērts pārskatīt darbību žurnālu, vai kāda plūsma nav darbojusies bez skaidra iemesla. Komandservera adrese 43.228.157.68 izpētes publicēšanas brīdī vēl bija tiešsaistē un turpināja izsniegt slodzes.
Avoti
- Socket: Large-Scale GitHub Actions Abuse Powers a Distributed cPanel and WHM Exploitation Campaign
- The Hacker News: Attackers Weaponize GitHub Actions Runners to Target cPanel and WHM Servers
- Developer Tech: GitHub Actions abuse turned Packagist repositories into scanners
- Cybersecurity News: Hackers Abuse GitHub Actions to Exploit cPanel and WHM Servers
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.