4.837 ele geçirilmiş GitHub hesabıyla CI secret stealer: en az 1.806 depoda çalıştı
Bir saldırgan, çalınmış kimlik bilgileriyle 4.837 GitHub hesabını kullanarak yazma yetkisi olan depolara GitHub Actions ve cloud anahtarlarını çalan bir payload yerleştirdi. Aikido Security ve SafeDep'in analizine göre zararlı en az 1.806 depoda çalıştı; AWS ve Azure'da kalıcı backdoor kuruluyor.
Salı gününden itibaren bir saldırgan, kimlik bilgilerini ele geçirdiği 4.837 GitHub hesabını kullanarak bu hesapların yazma yetkisi olduğu depolara secret çalan bir payload yerleştirdi. The Hacker News'in Aikido Security ve SafeDep analizlerine dayanan haberine göre zararlı en az 1.806 depoda çalıştı. Saldırganın hesapların kimlik bilgilerini nasıl elde ettiği henüz bilinmiyor.
Her dalga, wfx-docs adlı bir branch'ten açılan "docs: dependency audit notes" başlıklı test pull request'iyle başlıyor; amaç hesabın yazma yetkisini sınamak. Bu test PR'ları 61.764 depoda açıldı. SafeDep, yalnızca public default branch'lere bakarak 8.093 depoya zararlı commit gönderildiğini saydı: 7.309'unda stealer mevcut bir workflow'a, 771'inde ise npm postinstall hook'una eklendi. İkinci yöntem, zararlının npm install çalıştıran geliştirici bilgisayarlarında da tetiklenmesi anlamına geliyor. Saldırgan değişiklikleri çoğunlukla dakikalar içinde geri alıyor, workflow loglarını ve çoğu zaman çalıştırma kaydını da siliyor.
Neler çalınıyor?
Stealer; GitHub Actions secret ve variable'larını, workflow'un GITHUB_TOKEN'ını, OIDC ve runtime token'larını, AI servis anahtarlarını ve runner belleğindeki secret'ları topluyor. AWS, Azure, GCP, Kubernetes, npm, PyPI ve SSH kimlik dosyalarını, deponun kopyasını ve son 100 commit'i de alıyor. Self-hosted runner'larda instance metadata, Docker durumu ve systemd birimlerini okuyor.
En tehlikeli kısım kalıcılık: zararlı GitHub OIDC token'larını AWS, GCP ve Azure oturumlarına çeviriyor. AWS'de uzun ömürlü IAM access key oluşturup bir rolün trust policy'sini her hesaba açık hale getirebiliyor; Azure tarafında wfx-ci- önekli federated credential ekleyerek token yenilense bile secret'sız giriş yolu bırakıyor. Veriler HTTP POST ile birkaç IP adresine veya bir Telegram sohbetine gönderiliyor.
Paket ekosistemine etkisi
Packagist'teki digitalelvis/neuronai-studio paketinin 3.14.3 sürümü zararlı; 3.14.2 veya öncesine sabitlenmesi öneriliyor. Go'da docker-env 1.0.278 ve 1.0.280 yalnızca workflow dosyasında zararlı içeriyor. WebdriverIO'da wdio-bot hesabının commit'leriyle 28 depo etkilendi; paket sürümü etkilenmedi ama bot token'ı çalınmış sayılmalı. Etkilenen hesaplardan en az 50'si npm, Go, Packagist, PyPI veya crates.io'da paket yayımlıyor.
Kullanılan hesaplar Ekim'deki GhostAction dalgasındaki hesaplarla örtüşüyor; ancak Aikido, altyapı ve araç farklılıkları nedeniyle iki dalgayı şimdilik aynı aktöre bağlamıyor.
Ne yapılmalı?
- Depolarda
wfx-docsbranch'i, "docs: dependency audit notes" başlıklı PR'lar ve beklenmeyen workflow veyapostinstalldeğişiklikleri aranmalı; açık kalan test PR'ları kapatılmalı. - Etkilenen commit'in yazarına ait token'lar, OAuth izinleri, SSH anahtarları ve oturumlar iptal edilmeli; 2FA zorunlu tutulmalı.
- Etkilenen depoların okuyabildiği tüm secret ve variable'lar yenilenmeli; etkilenen commit üzerinde
npm installçalıştıran makineler ele geçirilmiş kabul edilmeli. - Cloud loglarında backdoor izleri aranmalı: Entra ID'de beklenmeyen
wfx-ci-*federated credential'lar, CloudTrail'dewfx-*AssumeRole oturumlarını izleyenCreateAccessKeyveyaUpdateAssumeRolePolicyçağrıları, GCP'deGenerateAccessTokenveSignJwtçağrıları. - GitHub OIDC trust policy'leri belirli depo ve branch'lerle sınırlandırılmalı; workflow'larda en az yetki ilkesi uygulanmalı.