JFrog araştırmacıları, Mayıs ayında yaklaşık iki hafta boyunca aktif olan ve 148 npm paketinden oluşan bir kampanyayı gün yüzüne çıkardı. Bu paketler, öğrenci web proxy'si görünümünde olup, ziyaretçilerin tarayıcılarını farkında olmadan dağıtık hizmet engelleme (DDoS) botnet'ine dönüştürüyordu. Saldırganlar, npm kaydını ücretsiz barındırma platformu olarak kullanarak, okul filtrelerini aşmak isteyen öğrencileri hedef aldı ve onların tarayıcılarını saldırı trafiği oluşturmak için kullandı.
Paketler, 'charlie-kirk', 'ilovefemboys' ve 'miguelphonk' gibi isimlerle yayınlandı. Her biri, 'Lucide' markalı bir proxy uygulaması taşıyor ve 'Riverbend Tutoring' veya 'Northstar Tutoring' gibi eğitim amaçlı sayfalar gibi görünüyordu. Yüzeyde proxy düzgün çalışıyor, öğrencilerin içerik filtrelerini aşarak oyunlara ve engellenen sitelere erişmesine izin veriyordu. Ancak arka planda, saldırganların istediği anda değiştirebileceği bir uzaktan kod yükleyici ve Wisp proxy protokolü üzerinden iletişim kuran bir WebSocket sel üreticisi çalışıyordu. Sayfayı açan herkes, farkında olmadan botnet'in bir parçası haline geliyordu.
Bu saldırı, geleneksel yazılım tedarik zinciri saldırılarından farklıydı. Paketler, kurulum sırasında herhangi bir kod çalıştırmıyor, yaşam döngüsü kancaları veya yerel derleme betikleri içermiyordu. Amaç, geliştiricileri hedef almak değil, npm'i ücretsiz bir barındırma platformu olarak kullanarak son kullanıcıların tarayıcılarında çalışan bir botnet oluşturmaktı. Bu, Eylül 2025'te 500'den fazla paketi etkileyen ve geliştirici sırlarını çalan Shai-Hulud solucanı gibi saldırılardan farklı bir yaklaşımdı.
Detaylar ve Etkileri
SafeDep'in Mayıs ayındaki erken uyarısı, 141 paketi reklam yazılımı ve kayıt defteri kötüye kullanımı olarak sınıflandırmıştı: popunder reklamlar, üçüncü taraf para kazanma betikleri ve Scramjet proxy'sine eklenmiş Google Analytics takibi. Ancak JFrog, daha derin bir analiz yaparak 5.4 MB'lık tek satırlık JavaScript dosyasını çözdü ve 20.600 satırdan fazla okunabilir kod elde etti. Bu kodun altında iki ana modül bulunuyordu.
İlk modül (G2), uzaktan betik yükleyiciydi ve JavaScript'i GitHub deposundan jsDelivr CDN üzerinden çekiyordu. Sabit bir commit yerine değişken ana dalı işaret ediyor, alt kaynak bütünlüğü (SRI) denetimi yapmıyor ve gelen kodu proxy sitesinin kendi kaynak ayrıcalıklarıyla çalıştırıyordu. Bu sayede saldırganlar, GitHub hesabını kontrol ederek her an tüm ziyaretçilerin tarayıcısında çalışan kodu değiştirebiliyordu. JFrog'un incelediği sırada depo 404 hatası veriyordu, ancak 30 Mayıs tarihli bir arşiv kopyası, betiğin her 500 milisaniyede bir milyon karakterlik HTTP flood'u hedefe gönderdiğini ortaya çıkardı.
İkinci modül (I2) ise daha gelişmişti. Bir 'websocket.txt' dosyasından hedef WebSocket URL'sini ve 1 ile 1024 arasında bir soket sayısını alıyor, ardından bu kadar bağlantıyı kademeli olarak açıyordu. Arşivlenen yapılandırma, her tarayıcıyı lunaron[.]top adresindeki bir Wisp sunucusuna 30 bağlantıyla yönlendiriyordu. Wisp, düşük yüküyle birden fazla TCP/UDP soketini tek bir WebSocket üzerinden tünellemeye yarayan bir protokol. Tarayıcılar her 100 milisaniyede bir geçerli Wisp CONNECT ve CLOSE çerçevesi göndererek sunucunun kontrol düzlemine saldırıyor, dosya tanımlayıcılarını tüketiyor ve log depolamayı dolduruyordu. Bu, hacimsel bir saldırıdan ziyade bir kontrol düzlemi saldırısıydı.
Saldırganların altyapısı oldukça dar bir şekilde kümelenmişti. JFrog, yapıları 'lucideproxy' adlı bir GitHub organizasyonuna kadar takip etti. Hesaplar saniyeler arayla oluşturulmuş, bir e-posta adresi ve Discord kullanıcı adıyla bağlantılıydı. 93 dağıtım ana bilgisayar adından 90'ı, G-Core Labs tarafından barındırılan tek bir IP adresine (92.38.177.17) çözümleniyordu. Kampanya, hem öğrenci proxy'lerini kullananları hem de diğer proxy'lerin bağlı olduğu Wisp sunucularını hedef alarak çift yönlü bir saldırı gerçekleştirdi.
Kaynak: thehackernews.com