Teknologi

Megalodon forvandlede GitHub Actions til en bagdør i 5.561 repoer

Susan Hill

En automatiseret kampagne pushede 5.718 commits til 5.561 GitHub-repoer på seks timer en mandag i maj. Commitsene lignede almindelig CI-vedligeholdelse (“ci: add build optimization step”, “build: improve ci performance”, “chore: optimize pipeline runtime”) og kom fra forfattere med banale navne: build-bot, auto-ci, pipeline-bot. Da formiddagen den 18. maj var ovre, havde hver eneste af de repoer en workflow-fil med en base64-kodet bash-payload liggende indeni.

Kampagnen hedder Megalodon. SafeDeps forskerhold afslørede den den 21. maj, efter at have skilt commitsene ad og fulgt sporet af artefakter til en enkelt command-and-control-server på 216.126.225.129:8443. Det interessante er ikke, at GitHub blev angrebet. Det interessante er, at angriberen slet ikke behøvede at kompromittere GitHub. Angriberen brugte GitHub Actions, CI/CD-systemet, der netop skal sikre kodens integritet, som leveringskøretøj for bagdøren.

To workflows, ét massivt og ét sovende

Megalodon kørte i to tilstande. Masseversionen tilføjede en ny workflow-fil ved navn SysDiag, der udløstes ved hvert push og hver pull request og opfangede alt, der løb gennem den. Den målrettede version, Optimize-Build, gjorde noget mere tålmodigt: den udskiftede et eksisterende workflow med en workflow_dispatch-udløser, der ligger sovende, indtil nogen kalder den manuelt. En sovende bagdør i et projekts CI-mappe er langt sværere at få øje på end et nyt workflow ved navn SysDiag, fordi de fleste maintainere ikke gennemgår en fil, de selv en gang skrev.

Når workflow’et kører, læser payloaden alt, hvad den kan nå i CI-miljøet. CI-miljøvariabler. AWS-adgangsnøgler, hemmelige nøgler og session-tokens. GCP-adgangstokens. Private SSH-nøgler. .npmrc-loginoplysninger. Docker-konfigurationer. Kubernetes-konfigurationer. OIDC-tokens fra GitHub Actions, som lader angriberen udgive sig for selve workflow’et over for en hvilken som helst cloudkonto, det var autoriseret mod. Inden den afslutter, greppe payloaden repoens kildekode efter mere end tredive forskellige hemmelighedsmønstre (API-nøgler, kodeord, certifikatfragmenter) i tilfælde af, at et menneske havde indsat et. Metadata-endpoints hos AWS IMDSv2, GCP og Azure bliver også forespurgt for at få cloud-maskinidentitet.

En pipeline, der sender sin egen bagdør ud

Det mest alvorlige offer indtil videre er Tiledesk, en open source-platform til kundeengagement, hvis ni GitHub-repoer blev ramt. Mellem 19. og 21. maj udgav Tiledesk sin tiledesk-server-pakke til npm med bagdøren indkompileret. Versionerne 2.18.6 til 2.18.12 af @tiledesk/tiledesk-server bærer nu payload-kode, installeret af hver eneste udvikler, der kørte npm install i det vindue. Det er den løftestang, Megalodon blev bygget til: at bagdøre ét open source-projekt, så dens release-pipeline bagdører hundredvis af afhængige projekter.

Black-Iron-Project mistede otte repoer. Hundredvis af mindre projekter (enkeltudviklerkonti, universitetsklynger, forladte sandkasser) fik en eller to hver. Angriberen så ikke ud til at vælge. Mønstret var bredde frem for præcision: engangskonti med tilfældige otte-tegns brugernavne, der pushede identiske commit-beskeder minut for minut. C2-serveren registrerede stille, hvad der kom tilbage.

Hvorfor CI-filerne overlevede revisionen

Dette angreb virkede af samme grund, som gør, at det vil gentage sig resten af 2026. CI/CD-pipelines hviler på tillid i deres konstruktion. En udvikler, der er skeptisk over for en sær binær i en download, kører uden at tøve en workflow-fil, der dukkede op i deres repo i sidste uge, fordi workflow-filer er præcis det: kode, som platformen skal køre. Auditlogs findes, men de færreste teams læser dem. De nye commits ankommer signeret af navne som build-bot og ci-bot. Diffene er små. Base64-strengen nederst i workflow’et er uigennemskuelig med vilje.

Det defensive manuskript er enkelt og utilfredsstillende. Roter hver hemmelighed, der har rørt en repo mellem 18. maj og nu. Gennemgå .github/workflows-mappen i hvert projekt under forvaltning. Inspicer commits, hvis forfatter-email ikke matcher et kendt teammedlem. Behandl enhver base64-blob inde i en Actions-fil som skyldig, indtil den er afkodet. Organisationer, der bruger Tiledesk, bør gå tilbage til 2.18.5 eller vente på en ren udgave. Enhver med OIDC-tillid mellem Actions og en cloududbyder bør tilbagekalde og genudstede den tillidsrelation.

Megalodon er den første kampagne i denne størrelsesorden, der behandler selve CI-workflow’et som det bløde mål. Det bliver ikke den sidste. Lektien, som angrebet efterlader, er én, udviklere har hørt før i lavere stemme: den del af pipelinen, du ikke læser, er den del, angriberen skriver for dig.

Debat

Der er 0 kommentarer.