Teknologi

Megalodon gjorde GitHub Actions om til en bakdør i 5 561 repoer

Susan Hill

En automatisert kampanje pushet 5 718 commits til 5 561 GitHub-repoer på seks timer en mandag i mai. Commitene så ut som vanlig CI-vedlikehold («ci: add build optimization step», «build: improve ci performance», «chore: optimize pipeline runtime») og kom fra forfattere med uskyldige navn: build-bot, auto-ci, pipeline-bot. Da formiddagen 18. mai var slutt, hadde hver eneste av de repoene en workflow-fil med en base64-kodet bash-payload liggende inne.

Kampanjen heter Megalodon. SafeDeps forskerteam avslørte den 21. mai, etter å ha plukket fra hverandre commitene og fulgt artefaktsporet til en eneste kommando- og kontrollserver på 216.126.225.129:8443. Det interessante er ikke at GitHub ble angrepet. Det interessante er at angriperen ikke trengte å kompromittere GitHub i det hele tatt. Angriperen brukte GitHub Actions, CI/CD-systemet som er bygget nettopp for å sikre kodens integritet, som leveringskjøretøy for bakdøren.

To workflows, en massiv og en sovende

Megalodon kjørte i to moduser. Massevarianten la til en ny workflow-fil kalt SysDiag som ble utløst ved hvert push og hver pull request, og hentet inn alt som passerte. Den målrettede varianten, Optimize-Build, gjorde noe mer tålmodig: den erstattet et eksisterende workflow med en workflow_dispatch-utløser, som ligger sovende til noen kaller den manuelt. En sovende bakdør i CI-katalogen til et prosjekt er mye vanskeligere å oppdage enn et nytt workflow kalt SysDiag, fordi de fleste vedlikeholdere ikke reviderer en fil de selv en gang skrev.

Når workflow-et kjører, leser payloaden alt den kan nå i CI-miljøet. CI-miljøvariabler. AWS-tilgangsnøkler, hemmelige nøkler og sesjonstokens. GCP-tilgangstokens. Private SSH-nøkler. .npmrc-legitimasjon. Docker-konfigurasjoner. Kubernetes-konfigurasjoner. OIDC-tokens fra GitHub Actions, som lar angriperen utgi seg for selve workflow-et overfor hvilken som helst skykonto den var autorisert mot. Før den avslutter, grepper payloaden gjennom kildekoden til repoen etter mer enn tretti forskjellige hemmelighetsmønstre (API-nøkler, passord, sertifikatfragmenter) i tilfelle et menneske hadde limt inn et. Metadata-endepunkter hos AWS IMDSv2, GCP og Azure blir også spurt for å hente skymaskinidentitet.

En pipeline som sender ut sin egen bakdør

Det alvorligste offeret så langt er Tiledesk, en open source-plattform for kundeengasjement, hvis ni GitHub-repoer ble truffet. Mellom 19. og 21. mai publiserte Tiledesk sin tiledesk-server-pakke til npm med bakdøren kompilert inn. Versjonene 2.18.6 til 2.18.12 av @tiledesk/tiledesk-server bærer nå payload-kode, installert av hver utvikler som kjørte npm install i det vinduet. Det er løftestangen Megalodon ble bygget for: å bakdørre ett open source-prosjekt slik at release-pipelinen bakdører hundrevis av avhengige prosjekter.

Black-Iron-Project mistet åtte repoer. Hundrevis av mindre prosjekter (enkeltutviklerkontoer, universitetsklynger, forlatte sandkasser) fikk en eller to hver. Angriperen så ikke ut til å velge. Mønsteret var bredde framfor presisjon: engangskontoer med tilfeldige åtte-tegns brukernavn som pushet identiske commit-meldinger minutt for minutt. C2-serveren registrerte stille det som kom tilbake.

Hvorfor CI-filene overlevde revisjonen

Dette angrepet virket av samme grunn som gjør at det vil gjenta seg resten av 2026. CI/CD-pipelines bygger på tillit ved konstruksjon. En utvikler som er skeptisk til en rar binær i en nedlasting kjører uten å nøle en workflow-fil som dukket opp i repoen forrige uke, fordi workflow-filer er nettopp det: kode som plattformen skal kjøre. Auditlogger finnes, men nesten ingen team leser dem. De nye commitene kommer signert av navn som build-bot og ci-bot. Diffene er små. Base64-strengen nederst i workflow-et er ugjennomskuelig med hensikt.

Det defensive skriptet er enkelt og lite tilfredsstillende. Roter hver hemmelighet som har vært innom et repo mellom 18. mai og nå. Revider .github/workflows-mappen i hvert prosjekt under forvaltning. Inspiser commits hvis forfatter-epost ikke matcher et kjent teammedlem. Behandle enhver base64-blob inne i en Actions-fil som skyldig til den er dekodet. Organisasjoner som bruker Tiledesk bør gå tilbake til 2.18.5 eller vente på en ren utgivelse. Den som har OIDC-tillit mellom Actions og en skyleverandør bør tilbakekalle og utstede den tillitsrelasjonen på nytt.

Megalodon er den første kampanjen i denne skalaen som behandler selve CI-workflow-et som det myke målet. Det blir ikke den siste. Lærdommen angrepet etterlater er én utviklere allerede hørte, lavere: den delen av pipelinen du ikke leser er den delen angriperen skriver for deg.

Diskusjon

Det er 0 kommentarer.