Teknik

Megalodon förvandlade GitHub Actions till en bakdörr i 5 561 repon

Susan Hill

En automatiserad kampanj pushade 5 718 commits till 5 561 GitHub-repon på sex timmar en måndag i maj. Commitsen såg ut som vanligt CI-underhåll (”ci: add build optimization step”, ”build: improve ci performance”, ”chore: optimize pipeline runtime”) och kom från författare med ofarliga namn: build-bot, auto-ci, pipeline-bot. När morgonen den 18 maj var slut hade vart och ett av dessa repon en workflow-fil med en base64-kodad bash-payload i sig.

Kampanjen heter Megalodon. SafeDeps forskarteam avslöjade den den 21 maj, efter att ha plockat isär commitsen och följt artefaktspåret till en enda command-and-control-server på 216.126.225.129:8443. Det intressanta är inte att GitHub blev attackerat. Det intressanta är att angriparen inte behövde kompromettera GitHub alls. Angriparen använde GitHub Actions, CI/CD-systemet som är byggt just för att garantera kodens integritet, som leveransfordon för bakdörren.

Två workflows, ett massivt och ett sovande

Megalodon körde i två lägen. Massvarianten lade till en ny workflow-fil vid namn SysDiag som triggades vid varje push och varje pull request och skrapade ihop allt som passerade. Den riktade varianten, Optimize-Build, gjorde något mer tålmodigt: den ersatte en befintlig workflow med en workflow_dispatch-trigger som ligger sovande tills någon manuellt anropar den. En sovande bakdörr i ett projekts CI-katalog är mycket svårare att märka än en ny workflow som heter SysDiag, eftersom de flesta maintainers inte granskar en fil de själva en gång skrev.

När workflow-en körs läser payloaden allt den når i CI-miljön. CI-miljövariabler. AWS-åtkomstnycklar, hemliga nycklar och sessionstoken. GCP-åtkomsttoken. Privata SSH-nycklar. .npmrc-uppgifter. Docker-konfigurationer. Kubernetes-konfigurationer. OIDC-token från GitHub Actions, som låter angriparen utge sig för själva workflow-en inför vilket molnkonto den än var auktoriserad mot. Innan den avslutas greppar payloaden repokällkoden efter mer än trettio olika hemlighetsmönster (API-nycklar, lösenord, certifikatfragment) ifall någon människa råkat klistra in en. Metadata-endpoints för AWS IMDSv2, GCP och Azure frågas också för att hämta molnmaskinidentitet.

En pipeline som skickar ut sin egen bakdörr

Det allvarligaste offret hittills är Tiledesk, en open source-plattform för kundengagemang vars nio GitHub-repon träffades. Mellan 19 och 21 maj skickade Tiledesk ut sitt tiledesk-server-paket till npm med bakdörren inkompilerad. Versionerna 2.18.6 till 2.18.12 av @tiledesk/tiledesk-server bär nu payload-kod, installerad av varje utvecklare som körde npm install under det fönstret. Det är hävstången Megalodon byggdes för: att backdoor:a ett open source-projekt så att dess release-pipeline backdoor:ar hundratals beroende projekt.

Black-Iron-Project förlorade åtta repon. Hundratals mindre projekt (enskilda utvecklarkonton, universitetskluster, övergivna sandboxar) fick ett eller två vardera. Angriparen verkade inte välja. Mönstret var bredd före precision: engångskonton med slumpade åttatecksnamn pushade identiska commit-meddelanden minut för minut. C2-servern registrerade tyst det som kom tillbaka.

Varför CI-filerna överlevde granskningen

Den här attacken fungerade av samma skäl som gör att den kommer återupprepas under resten av 2026. CI/CD-pipelines bygger på tillit i sin design. En utvecklare som är misstänksam mot en konstig binär i en nedladdning kör utan att tveka en workflow-fil som dök upp i deras repo förra veckan, eftersom det är precis vad workflow-filer är: kod som plattformen ska köra. Granskningsloggar finns, men få team läser dem. De nya commitsen kommer signerade av namn som build-bot och ci-bot. Diffarna är små. Base64-strängen i botten av workflow-en är ogenomtränglig med flit.

Den defensiva spelplanen är enkel och föga tillfredsställande. Rotera varje hemlighet som rört vid ett repo mellan 18 maj och nu. Granska .github/workflows-katalogen i varje projekt under förvaltning. Kontrollera commits där författarens e-postadress inte matchar någon känd teammedlem. Behandla varje base64-blob inuti en Actions-fil som skyldig tills den är avkodad. Organisationer som använder Tiledesk bör gå tillbaka till 2.18.5 eller vänta på en ren release. Den som har OIDC-tillit mellan Actions och en molnleverantör bör återkalla och ge ut den tillitsrelationen på nytt.

Megalodon är den första kampanjen i den här skalan som behandlar själva CI-workflow-en som det mjuka målet. Det blir inte den sista. Lärdomen attacken lämnar är en utvecklare redan hört, fast lägre: den del av pipelinen du inte läser är den del angriparen skriver åt dig.

Diskussion

Det finns 0 kommentarer.