RubyGems’te SleeperGem, geliştirici makinelerini vurdu

Anasayfa » RubyGems’te SleeperGem, geliştirici makinelerini vurdu
RubyGems’te SleeperGem, geliştirici makinelerini vurdu

RubyGems deposuna yüklenen üç kötü amaçlı paket, geliştirici makinelerini hedef alan yeni bir tedarik zinciri saldırısının merkezine yerleşti. Araştırmacılar, paketlerin kurulduktan sonra ikinci aşama yük indirdiğini ve kalıcılık sağladığını, ancak sürekli entegrasyon sistemlerinde çalışmayı bıraktığını ortaya koydu.

İncelemeye göre hedef alınan paketler git_credential_manager (2.8.0, 2.8.1, 2.8.2 ve 2.8.3 sürümleri; 18 Temmuz 2026’da yayımlandı), Dendreo (1.1.3 ve 1.1.4; 14 Ekim 2017’de yayımlandı) ve fastlane-plugin-run_tests_firebase_testlab (0.3.2; 6 Şubat 2018’de yayımlandı) oldu. StepSecurity’nin analizine göre her kötü amaçlı sürüm bir yükleyici gibi çalışıyor; saldırganın kontrolündeki bir Forgejo sunucusundan ikinci aşamayı çekiyor, bunun bir build sisteminde çalışıp çalışmadığını kontrol ediyor, geliştirici makinesiyse yerel bir daemon bırakıp kalıcılık kuruyor.

En belirgin ayrıntılardan biri, git_credential_manager paketinin Microsoft’un resmi Git Credential Manager aracını taklit etmesi. Diğer iki paket ise kötü amaçlı güncellemelerden önce yıllarca sessiz kaldı. Dendreo’nun son güncellemesi 24 Ekim 2020’de, fastlane-plugin-run_tests_firebase_testlab’ın son faal dönemi ise 9 Mart 2019’da görüldü.

Yayımlanan sürümlerin kaynak projelerde karşılık gelen bir commit ya da tag olmadan doğrudan kayıt defterine yüklenmiş olması da zincirin bir başka işareti oldu. Bu yöntem, kod deposunda görünmeyen ama paket yöneticisinde dağıtıma çıkan sürümler üretilmesi anlamına geliyor.

İlişkilendirme tarafında da zincir genişliyor. git_credential_manager paketi beş farklı pakete bağımlılık olarak eklenmiş durumda ve bu sayede zararlı içerik mevcut kullanıcılara da taşabiliyor. Bu paketler arasında Dendreo, fastlane-plugin-run_tests_firebase_testlab, slackHtmlToMarkdown, seo_optimizer ve array_fast_methods yer alıyor. Bunların tamamı, fastlane-plugin-run_tests_firebase_testlab hariç, LR-DEV adlı aynı hesap tarafından yönetiliyor. Buna karşın git_credential_manager’ın başka bir bakımcıya, pinkroom hesabına ait olması, RubyGems’e sahte sürümleri yüklemek için birden fazla hesabın ele geçirilmiş olabileceğini düşündürüyor.

Kurumsal sistemleri eleyip geliştirici cihazına iniyor

Paketler yüklendiğinde çalışan kötü amaçlı kod, yaklaşık 30 çevre değişkenini tarıyor. GitHub Actions, GitLab, CircleCI, Travis, Jenkins ve Vercel ile ilişkili değişkenler görülürse işlem hemen sonlandırılıyor. Araştırmacılar bunun, saldırının geçici CI çalıştırıcılarında değil, kalıcı bir geliştirici makinesinde yürütülmesini sağlamak için yapılmış kasıtlı bir kontrol olduğunu belirtiyor.

git_credential_manager özelinde zararlı kod, kütüphane çağrıldığı anda tetikleniyor. Ardından saldırganın kontrolündeki halka açık Forgejo örneği git.disroot[.]org/git-ecosystem üzerinden iki yük indiriliyor: deploy.sh adlı bir kabuk betiği ve paket adıyla aynı ismi taşıyan yerel bir ikili dosya. Windows tarafında indirilen içerik PowerShell üzerinden çalıştırılıyor.

2.8.2 sürümü yalnızca yükleri sahneye çıkarırken, 2.8.3 ile saldırı bir sonraki aşamaya taşınıyor. Bu sürümde kurulum betiği ikili dosyayı arka plan daemon’u olarak başlatıyor, ardından cron girdisi ve systemd kullanıcı servisiyle kalıcılık kuruyor. Aynı zamanda sudo ve wheel gruplarını sorguluyor.

StepSecurity, kullanıcının parolasız sudo çalıştırabildiği durumda betiğin kendisini root yetkisiyle yeniden başlattığını aktardı. Betik root olarak çalıştığında ise sistem kabuğunun setuid root kopyasını, ağ aracını taklit edecek bir yola yerleştiriyor. Bu kopyanın /usr/local/sbin/ping6 yolunda arandığı bildirildi.

Güvenlik araştırmacıları, bu paketlerden herhangi birini kurmuş olan kullanıcıların makinelerini ve bağlı sırlarını ele geçirilmiş kabul etmesi gerektiğini söylüyor. Tavsiye edilen adımlar arasında ~/.local/share/gcm/ altındaki bırakılan daemon’un silinmesi, kalıcılık mekanizmalarının temizlenmesi, /usr/local/sbin/ping6 konumunda setuid shell olup olmadığının kontrol edilmesi ve tüm kimlik bilgilerinin yenilenmesi yer alıyor.

Aikido Security araştırmacısı Charlie Eriksen, altı ya da yedi yıldır sessiz kalan bir RubyGems hesabının ilk bakışta riskli görünmediğini söyledi. Eriksen’e göre tam da bu nedenle bu hesaplar cazip hedef haline geliyor; SleeperGem adı da buradan geliyor. Ortada uzun vadeli yerleştirilmiş bir operatör hesabı değil, bir süredir uyuyan ve bu yüzden şüphe uyandırmadan ele geçirilebilen sıradan bir hesap var.

RubyGems tarafındaki bu olay, kayıt defterinin daha önce de kötüye kullanıldığını gösteren başka kampanyaların ardından geldi. Platform, toplu spam-yayın saldırılarının parçası olarak onlarca kötü amaçlı paket yüklenince kısa süreliğine yeni hesap açılışlarını durdurmuştu. Aynı dönemde Socket araştırmacıları da kayıt defterini veri sızdırma kanalı gibi kullanan 150 gem’lik ayrı bir kampanyayı işaret etmişti.

Mend.io’nun bu ay başında açıkladığı bir başka vakada ise belgelenmemiş bir yazılım tedarik zinciri saldırısında 14 farklı RubyGems paketi çalınan kimlik bilgilerini saklamak için kullanılmıştı. Araştırmada, kötü amaçlı bir tarayıcı eklentisinin yerel erişilebilir bir API üzerinden kimlik bilgilerini topladığı, bunları JavaScript ve standart Web API’leriyle tarayıcı içinde geçerli .gem dosyalarına dönüştürdüğü ve sabit kodlanmış bir RubyGems API anahtarıyla doğrudan RubyGems.org’a yüklediği belirtildi.

Maciej Mensfeld, bu işlemde düz metin parolalar, SSH özel anahtarları, AWS kimlik bilgileri, kripto cüzdanı seed ifadeleri, Sosyal Güvenlik numaraları, kredi kartı numaraları ve banka hesabı ayrıntıları da dahil olmak üzere 63 kasa öğesi bulunduğunu aktardı. Mensfeld’e göre RubyGems burada dağıtım mekanizması değil, hırsızlığın ardından verinin bırakıldığı güvenilir bir dead drop işlevi gördü; saldırgan daha sonra geri dönüp normal geliştirici yüklemeleri arasına gizlenmiş veriyi aldı.