Teknoloji

Megalodon, GitHub Actions’ı 5.561 deponun arka kapısına çevirdi

Susan Hill

Otomatik bir kampanya, mayısın bir pazartesi günü altı saat içinde 5.561 GitHub deposuna 5.718 commit gönderdi. Commitler sıradan CI bakım işleri gibi görünüyordu (“ci: add build optimization step”, “build: improve ci performance”, “chore: optimize pipeline runtime”) ve sıradan adlara sahip yazarlardan geliyordu: build-bot, auto-ci, pipeline-bot. 18 mayıs sabahı sona erdiğinde, bu depoların her birinin içinde base64 ile kodlanmış bir bash yüküne sahip bir workflow dosyası vardı.

Kampanyanın adı Megalodon. SafeDep’in araştırma ekibi 21 mayısta açıkladı; önce commitleri parçaladılar, sonra artefakt izini 216.126.225.129:8443 adresindeki tek bir komuta ve kontrol sunucusuna kadar sürdüler. İlgi çekici olan GitHub’ın saldırıya uğraması değil. İlgi çekici olan saldırganın GitHub’ı hiç ele geçirmek zorunda kalmamış olması. Saldırgan, kodun bütünlüğünü garanti etmek için tasarlanmış CI/CD sistemi olan GitHub Actions’ı arka kapı teslim aracı olarak kullandı.

İki workflow: biri kitlesel, biri uykuda

Megalodon iki kipte çalıştı. Kitlesel varyant, her push ve her pull request’te tetiklenen ve içinden geçen her şeyi toplayan SysDiag adlı yeni bir workflow dosyası ekledi. Hedefli varyant, Optimize-Build, daha sabırlı bir şey yaptı: mevcut bir workflow’u, birisi manuel olarak çağırana kadar uykuda kalan workflow_dispatch tetikleyicisiyle değiştirdi. Bir projenin CI dizininde uyuyan bir arka kapıyı fark etmek, SysDiag adlı yeni bir workflow’u fark etmekten çok daha zordur, çünkü çoğu maintainer kendi yazdığı bir dosyayı denetlemez.

Workflow çalıştığında, yük CI ortamında ulaşabildiği her şeyi okur. CI ortam değişkenleri. AWS erişim anahtarları, gizli anahtarlar ve oturum tokenleri. GCP erişim tokenleri. Özel SSH anahtarları. .npmrc kimlik bilgileri. Docker yapılandırmaları. Kubernetes yapılandırmaları. GitHub Actions OIDC tokenleri — bunlar saldırgana, yetkili olduğu herhangi bir bulut hesabına karşı workflow’un kendisi gibi davranma olanağı verir. Çıkmadan önce yük, deponun kaynak kodunda otuzdan fazla farklı sır şablonu (API anahtarları, parolalar, sertifika parçaları) için grep çalıştırır; bir insan yapıştırmış olabilir diye. AWS IMDSv2, GCP ve Azure metadata uç noktaları da bulut makine kimliği için sorgulanır.

Kendi arka kapısını gönderen bir pipeline

Şimdiye kadarki en ağır kurban Tiledesk: dokuz GitHub deposu vurulan açık kaynaklı bir müşteri etkileşim platformu. 19 ile 21 mayıs arasında Tiledesk, tiledesk-server paketini arka kapı derlenmiş hâliyle npm’e yolladı. @tiledesk/tiledesk-server’ın 2.18.6’dan 2.18.12’ye kadar olan sürümleri şu anda yük kodunu taşıyor; bu pencerede npm install çalıştıran her geliştirici tarafından kuruldu. Megalodon’un üzerine kurulduğu kaldıraç tam olarak bu: bir açık kaynak projesini arka kapılayıp, onun release pipeline’ının yüzlerce bağımlı projeyi arka kapılamasını sağlamak.

Black-Iron-Project sekiz depo kaybetti. Daha küçük yüzlerce proje (bireysel geliştirici hesapları, üniversite kümeleri, terk edilmiş sandbox’lar) bir ya da iki tane aldı. Saldırgan seçim yapıyor gibi durmuyordu. Örüntü hassasiyetten önce kapsamaydı: rastgele sekiz karakterlik kullanıcı adlarına sahip tek kullanımlık hesaplar, dakika dakika aynı commit mesajlarını gönderdiler. C2 sunucusu geri dönenleri sessizce kaydetti.

CI dosyaları denetimi neden atlattı

Bu saldırının işe yaramasının nedeni, 2026’nın geri kalanında tekrarlanmasının da nedeni. CI/CD pipeline’ları tasarım gereği güven üzerine kurulu. Bir indirmedeki tuhaf bir binary’den şüphelenen geliştirici, geçen hafta deposuna gelen workflow dosyasını hiç tereddütsüz çalıştırır, çünkü workflow dosyaları tam olarak şudur: platformun çalıştırması gereken kod. Denetim logları var, ama nadir ekip okur. Yeni commitler build-bot ve ci-bot gibi adlarla geliyor. Diff’ler küçük. Workflow’un dibindeki base64 dizesi bilerek anlaşılmaz.

Savunma reçetesi basit ve tatmin edici değil. 18 mayıstan bugüne kadar bir depoya değmiş her sırrı yenile. Yönetimindeki her projenin .github/workflows dizinini denetle. Yazar e-postası tanıdık bir ekip üyesine ait olmayan commitleri incele. Bir Actions dosyasının içindeki herhangi bir base64 blob’u çözülene kadar suçlu say. Tiledesk kullanan kuruluşların 2.18.5’e dönmesi ya da temiz bir sürümü beklemesi gerek. Actions ile bir bulut sağlayıcısı arasında OIDC güveni olan herkes bu güven ilişkisini iptal edip yeniden vermeli.

Megalodon, CI workflow’unun kendisini yumuşak hedef olarak gören bu ölçekteki ilk kampanya. Sonuncusu olmayacak. Saldırının bıraktığı ders, geliştiricilerin daha alçak sesle daha önce duyduğu bir ders: pipeline’ın okumadığın kısmı, saldırganın senin için yazdığı kısımdır.

Tartışma

S kadar yorum var.