Ethersphere’in npm’deki @ethersphere/bee-js paketi ile Swarm Desktop uygulamasının kötü amaçlı sürümleri, kullanıcıların cüzdan anahtarlarını ve parola dosyalarını hedef alan bir yazılım yükledi. Aynı zararlı kod, Windows, macOS ve Linux sistemlere arka kapı kurdu; saldırıda Ethersphere’in kendi yayın altyapısı istismar edildi.
Olay, 9 Kasım 2026 günü ortaya çıktı. Kötü amaçlı bee-js 13.3.0 paketi npm’de yaklaşık 75 dakika kaldı, Swarm Desktop 0.56.2 ise GitHub’da yaklaşık 8,5 saat boyunca erişilebilir oldu. Her iki sürüm de kaldırıldı ve proje bakımcıları gün içinde temiz bir Swarm Desktop güncellemesi yayımladı; ancak daha önce yüklenen arka kapıyı ya da dışarı gönderilmiş bir anahtarı bu adımlar tek başına ortadan kaldırmıyor.
Yayın zincirine sızıp otomatik güncellemelere kadar yayıldı
İncelemeye göre saldırgan, Ethersphere’in yayın otomasyonunu ele geçirerek hem npm paketini hem de masaüstü uygulamasını değiştirdi. bee-js, Swarm Desktop’ın ve swarm-cli komut satırı aracının arkasındaki JavaScript kütüphanesi. Swarm Desktop, kullanıcının kendi bilgisayarında bir Swarm düğümü çalıştırıyor ve bu düğüme ait özel anahtarları yerel olarak saklıyor.
Swarm Desktop 0.56.2, 9 Kasım’da yaklaşık 00:36 UTC’de GitHub’a kondu ve yaklaşık 8,5 saat sonra geri çekildi. Socket’in olay analizine göre uygulamanın yerleşik güncelleyicisi, bu sürümü yaklaşık 10 dakika içinde Windows x64 bilgisayarlara ve Apple Silicon Mac’lere sunabildi. Intel Mac’lere hiç önerilmedi; Linux kurulumları ise otomatik güncellenmedi.
bee-js sürüm 13.3.0 ise bugün erken saatlerde npm’de yaklaşık 00:09 ile 01:25 UTC arasında en yeni sürüm olarak göründü. Paketteki kod, npm’in kurulum sırasında otomatik çalıştırdığı bir postinstall betiği olarak tasarlandı. Kurulum betikleri devre dışı bırakılmadıysa, projeye bu kütüphaneyi doğrudan içe aktarmak bile gerekmiyordu; kod kurulum anında çalışıyordu.
Projenin kendi swarm-cli ve bee-dashboard paketleri ile Swarm Desktop kaynak kodu, 13.3.0’ı kapsayan sürüm aralıklarını kabul ediyordu. Bu aralıkta yapılan temiz bir kurulum, zararlı sürümü otomatik olarak çekmiş olabilirdi.
Yayımlanan raporlarda enfekte makine sayısı verilmedi. Socket’in kaba tahminine göre bee-js 13.3.0 yaklaşık 10 kez indirildi; bu sayıya güvenlik tarayıcıları ve yansılar da dahil. Swarm Desktop 0.56.2’nin indirme sayısı ise 08:27 UTC itibarıyla, araştırmacılar da sayıldığında, 65’e ulaştı.
Ethersphere bakımcıları 0.56.2’yi geri çekip yerine bugün 0.56.3 sürümünü yayımladı. Yeni sürümü hazırlayan değişiklik kaydında, bakımcılardan biri 0.56.2’nin “çalınmış CI kimlik bilgileri kullanan bir saldırgan tarafından yayımlandığını ve geri çekildiğini” yazdı.
Bakımcı notuna göre 0.56.3, önceki 0.56.1 koduyla aynı ve yeni verilmiş bir Developer ID sertifikasıyla imzalı. Notta, uygulamanın otomatik güncelleyicisinin 0.56.2 kurulumlarını yeni sürüme taşıyacağı, ancak Linux paketlerinin elle değiştirilmesi gerektiği belirtildi. The Hacker News tarafından yapılan kaynak kod karşılaştırmasında sürüm numarası ve sürüm notları dışında değişiklik görülmedi.
npm tarafında ise gün içinde 13.2.0 yeniden en güncel bee-js sürümü haline geldi ve 13.3.0 kayıt defterinden indirilemez oldu.
Arka kapı anahtar dosyasını, parolayı ve fonları hedef aldı
GitHub Advisory Database’de yer alan uyarıda, @ethersphere/bee-js 13.3.0 yüklü ya da çalışır durumda olan her bilgisayarın tamamen ele geçirilmiş sayılması gerektiği yazıyor. SafeDep de Swarm Desktop 0.56.2’nin kurulduğu makineler için aynı yaklaşımı öneriyor.
Kullanıcılar bee-js kullanan bir proje ya da CI işi işletiyorsa, @ethersphere/bee-js@13.3.0 izlerini kilit dosyalarında, paket önbelleklerinde, kurum içi kayıtlarlarda ve CI kurulum günlüklerinde araması gerekiyor. Paketle birlikte gelen kopyalar da buna dahil. Güvenli sürüm olarak 13.2.0’a sabitleme yapılması ve 13.3.0’ın önbelleğe alınmış kopyalarının, npm yansıları dahil, temizlenmesi isteniyor.
13.3.0 kurulum betikleri açıkken kurulmuşsa, günlüklerde hata görünmese bile makine ya da CI çalıştırıcısı ele geçirilmiş kabul ediliyor. Kodun kendi ağ hatalarını gizlediği aktarılıyor. Temiz bir bilgisayardan, kuran kullanıcı veya CI işinin görebildiği tüm parola, belirteç ve anahtarların yenilenmesi gerekiyor.
Swarm Desktop kullananlarda ilk kontrol noktası, bee-desktop.log dosyasındaki Bee Desktop version: 0.56.2 (production) satırı. Bu satır her açılışta yazılıyor ve zararlı kod çalışmadan hemen önce oluşuyor. Kayıt klasörleri macOS’ta ~/Library/Logs/Swarm Desktop/, Windows’ta %LOCALAPPDATA%\Swarm Desktop\Log\, Linux’ta ise ~/.local/state/Swarm Desktop/ altında tutuluyor.
0.56.3 sürümünün kurulması isteniyor; Linux tarafında paket elle değiştirilmek zorunda. 0.56.2 bir kez bile çalıştıysa, düğüm anahtarı ve parolanın sızmış kabul edilmesi gerekiyor. Temiz bir bilgisayardan düğümün fonları, chequebook’u ve stake’i yeni bir anahtara taşınmalı.
Kodun çalıştığı herhangi bir makinede ~/.solidity/ klasörü, Linux’ta solidity-langsupport-runner.service kullanıcı servisi, macOS’ta com.solidity.langsupport.runner LaunchAgent’i ve Windows’ta ScreenConnect Client (5cbe79c9c25524df) servisi kaldırılmalı. Uygulamayı ya da paketi güncellemek, yeniden kurmak veya silmek bunları ortadan kaldırmıyor. Mümkünse makineyi güvenilir bir imajdan yeniden kurmak öneriliyor.
Teknik incelemeye göre her iki zararlı sürüm de aynı yükleyiciyi taşıyor. Birkaç satırlık bu kod, api.frameworkmetrics[.]xyz adresinden ek kod indirip kullanıcının izinleriyle çalıştırıyor. bee-js içinde bu yükleyici postinstall betiği, Swarm Desktop’ta ise uygulama her açıldığında devreye giriyor.
İndirilen ikinci aşama kod, Swarm Desktop’ın veri klasöründe iki dosya arıyor: config.yaml ve data-dir/keys/swarm.key. İkisi de bulunursa saldırganların sunucusuna gönderiliyor. Anahtar dosyası şifreli bir Ethereum keystore olsa da Swarm Desktop parolayı config.yaml içinde düz metin olarak tutuyor. Bu iki dosya birlikte ele geçirildiğinde saldırganlar düğüm cüzdanındaki xDAI ve xBZZ token’larını, chequebook bakiyesini ve stake’i alabiliyor.
Aynı kod bir arka kapı da kuruyor. Linux ve macOS’ta bu, evjawbreaker adlı Go tabanlı bir uzak kabuk. Gizli ~/.solidity klasörüne kaydediliyor; Linux’ta kullanıcı servisi, macOS’ta LaunchAgent olarak arka planda çalışıyor.
Uzaktan kabuk, kontrol sunucusunun adresini bir Ethereum akıllı sözleşmesinden okuyor. Böylece saldırganlar adresi istedikleri an değiştirebiliyor. Araştırmacılar, zararlı bee-js kodu eklenmeden 29 dakika önce bu adresin güncellendiğini aktardı.
Windows tarafında ise indirilen kod, ConnectWise tarafından imzalanmış gerçek bir ScreenConnect uzak erişim istemcisi kuruyor. İstemci sistem servisi olarak çalışıyor ve saldırganların aktarma noktasına bağlanıyor.
Kullanıcı yönetici ise kod, User Account Control istemini aşmanın bilinen bir yöntemiyle yönetici yetkisi alıyor. Yönetici değilse, kullanıcı iptal ettikçe istemi yeniden gösteriyor. Bu yetkilerle Microsoft Defender’a bir istisna ekleniyor ve istemci sessizce kuruluyor.
Her iki zararlı sürüm de Ethersphere’in yayınları otomatikleştirmek için kullandığı bee-worker hesabından çıktı. Değişikliklerin hiçbiri imzalı değildi ve hiçbiri pull request olarak gönderilmedi.
bee-js tarafında saldırganlar, yeni sürüm için bir GitHub release yayımladı ve bu işlem projenin npm yayın akışını başlattı. Bu akış onay gerektirmedi ve paket 73 saniyede npm’e gönderildi. Paket, projenin gerçek iş akışı tarafından üretildiği için geçerli provenance kaydı taşıyordu. Bu kayıt paketin hangi depo ve iş akışıyla üretildiğini gösteriyor; kodun içeriğinin incelenip incelenmediğini göstermiyor.
Swarm Desktop için saldırganlar, projenin Apple ve Windows imzalama sertifikalarına erişimi olan bir build iş akışını manuel olarak başlattı. Akış onay istemiyordu. macOS uygulaması projenin Developer ID sertifikasıyla imzalanıp Apple tarafından notarize edildiği için, sistem ilk açılışta yalnızca normal uyarıyı gösterdi.
Bakımcılar daha sonra uygulamanın imzalama işlerini, projenin DevOps ekibinden onay gelene kadar bekleyecek ve yalnızca ana daldan çalışacak şekilde değiştirdi.
Saldırganın erişimi nasıl elde ettiği ise haber hazırlanırken netleşmemişti. Bakımcının olay notu, CI kimlik bilgilerinin ve sırların çalındığını belirtiyor. Analizde iki GitHub hesabının kullanıldığı görülüyor: bee-worker ve uzun süredir proje üzerinde çalışan bir bakımcı hesabı. Kimlik bilgilerinin nasıl ele geçirildiğine dair ayrıntı paylaşılmadı.
Yükler, geçen eylülde Open VSX pazarında görülen ve Solidity geliştiricilerini hedefleyen sahte uzantılarla aynı Ethereum sözleşmesini, aynı ScreenConnect aktarma noktasını ve aynı dosya adlarını paylaşıyor. Pluto Security, 1 Ekim’de yayımladığı EtherDuck analizinde bu uzantıları ele almıştı. Pluto, bunların 2025’te sunucu adresini farklı bir Ethereum sözleşmesinden alan orijinal SleepyDuck uzantısını geliştiren grupla yüksek güvenle bağlantılı olduğunu aktarmıştı. Socket de bee-js ve Swarm Desktop sürümlerinin arkasında aynı grubun bulunduğunu bildiriyor.
Yayımlanan göstergeler arasında api.frameworkmetrics[.]xyz alan adı, /v1/analytics ve /v1/electron yolları, /v1/assets/ altındaki ek yükler ve çalınan cüzdan dosyalarını alan /v1/swarm/report yolu yer alıyor. Ayrıca X-Ethersphere: 1 HTTP başlığı, 193[.]57[.]9[.]155:4912 numaralı evjawbreaker kontrol sunucusu, 185[.]232[.]84[.]169:8041 numaralı ScreenConnect aktarma noktası ve 0xf8a900Db50b3331be6B768bA460BB59f3E40C344 Ethereum sözleşmesi de listelendi.
Linux, macOS ve Windows için yayımlanan paketlerin SHA-256 özetleri de paylaşıldı: 9b73e7cd4e1425e770392549d8df46c706139ef476f4f7b9ac405165dc8d9696 (linux_amd64), b601776817363b96295119f7221338a122d5247a35a77a64b04f286e1bbcc565 (linux_arm64), 80d2672e2599732d3c0ae2a4cd0d1e3fe4d555a60273ce33feb99db3f34d250f (darwin_amd64), fae61f31f00988fdc5cc9e7272b51e08af2e245d81003237875415930fd27358 (darwin_arm64), 37d14bff30762ca701e9c1f8bc6c57c065bb20ae3a2208cb7411a6530610f08e (invoke.ps1) ve 7527e86d70e7c9493db4356f1c3775380431b310000f2602c1e993cf435d01da (app.msi).
Kaynaklar
- Malicious bee-js npm Release and Swarm Desktop Releases Deliver SleepyDuck Ethereum C2 Backdoor | Socket (socket.dev)
- Release v0.56.3 · ethersphere/swarm-desktop · GitHub (github.com)
- fix: replace compromised 0.56.2 release by darkobas2 · Pull Request #582 · ethersphere/swarm-desktop · GitHub (github.com)
- Malware in @ethersphere/bee-js · GHSA-hh7j-5m3j-23pf · GitHub Advisory Database · GitHub (github.com)
