Checkmarx araştırmacıları, gerçek bir B-tree yardımcı paketi gibi görünen indexed-btree adlı kötü amaçlı npm paketinin yükleme aşamasını atlayıp saldırıyı doğrudan çalışma zamanındaki uygulama koduna taşıdığını açıkladı. Paket, npm v12’nin lifecycle script’leri kısıtlamasına uyum sağlayan yeni bir tedarik zinciri taktiğini ortaya koydu.
Şirket, bu paketin sıradan bir saldırı kalıbını kullanmadığını vurguladı. Checkmarx’a göre indexed-btree, preinstall ya da postinstall gibi kurulum script’lerine hiç dayanmadı; zararlı kod tamamen uygulama kodunun içinde ve çalışma anında çalıştı.
Paket ve buna bağlı GitHub deposu artık npm’den indirilemiyor. Ancak kayıt istatistikleri, charlessadler25 adlı bir npm kullanıcısının paketi 18 Haziran 2026 tarihinde kayda eklediğini ve kısa sürede milyonlarca indirme sayısına ulaşıldığını gösteriyor.
İncelemeye göre kampanya saldırganlara maddi kazanç da sağlamış olabilir. Hesaplamalar, elde edilen kripto para gelirinin yaklaşık 230.933,57 euro, yani 109 ETH düzeyine çıktığını ortaya koyuyor.
npm’in 12. sürümü ile birlikte preinstall ve postinstall gibi lifecycle script’lerinin otomatik çalıştırılması engellendi. Bu değişiklik, paketler üzerinden kötü amaçlı kod çalıştırmak için en yaygın kullanılan yöntemlerden birine doğrudan darbe vurdu. Normal şartlarda bu script’ler derleme, veri yükleme ya da temel yapılandırma için kullanılıyor. Ancak saldırganlar bunları, kullanıcıdan açık onay almadan zararlı kod çalıştırmak için uzun süredir istismar ediyordu.
Checkmarx, meşru tarafta bu script’lerin genellikle gerekli kodu derlemek, veri tohumlamak ya da temel yapılandırmaları kurmak için kullanıldığını anlattı. Buna karşın tehdit aktörleri, bu mekanizmayı kötü amaçlı kodu kurulum sırasında otomatik yürütmek için kullanmayı sürdürdü. Şirketin son bulguları, kötü aktörlerin bu değişikliğe karşı taktik değiştirdiğini ve kurulum kancaları yerine zararlı kodu doğrudan kütüphanenin içine yerleştirdiğini gösteriyor.
indexed-btree örneğinde yükleyici, BTree.prototype.set() metodunun içine gizlendi. Bu metod, ardından sharedLoad.min.js dosyasını tetikliyor; bu JavaScript yükü de zararlı yazılımın bulanıklaştırılmış ilk aşamasını taşıyor.
Yükün çalışma biçimi yalnızca kodun saklanmasıyla sınırlı kalmıyor. Zararlı yazılım önce hedef sistemi parmak izi çıkaracak şekilde inceliyor, ardından ayrıntıları sabitlenmiş bir Slack kanalına ve bir Telegram botuna iletiyor. Sonraki aşamada EtherHiding tekniği devreye giriyor; zararlı yazılım, Sepolia testnet üzerinde dağıtılmış bir akıllı sözleşmeden şifreli blob’lar çekiyor ve bunları birleştirerek ikinci aşama yükü oluşturuyor.
Son adımda saldırı izleri temizleniyor. Zararlı öğeler siliniyor ve paketteki tetik mekanizması kaldırılıyor. Böylece hem inceleme süreci zorlaşıyor hem de kampanyanın geriye dönük takibi güçleşiyor.
Checkmarx, indexed-btree’nin aynı operasyonla bağlantılı çok sayıdaki npm paketinden yalnızca biri olduğunu belirtti. Soruşturmaya konu olan diğer paketlerin de tamamı npm’den kaldırıldı. Listede ordered-kv-index, btree-leaderboard, priority-slot-queue, btree-range-store, btree-core, btree-time-index, btree-lru-cache, neighbor-key-map, sliding-score-window ve mutex-forge yer alıyor.
SOCRadar CISO’su Ensar Seker, paylaşılan açıklamada, bu kampanyanın saldırganların yazılım tedarik zinciri savunmalarına çok hızlı uyum sağladığını gösterdiğini söyledi. Ona göre npm, bağımlılık yaşam döngüsü script’lerini sınırlandırarak kurulum anındaki güvenliği artırdı; ancak saldırganlar zararlı yürütmeyi bu kez güvenilir görünen çalışma zamanı işlevlerinin içine taşıdı.
Seker ayrıca savunmanın yalnızca kurulum sırasında yapılan taramaya ya da lifecycle script bloklamasına yaslanmaması gerektiğini, katmanlı kontrollerin gerektiğini ifade etti. Bu yaklaşımın, yükleme öncesi, çalışma anı ve dağıtım sonrasında zararlı davranışı yakalayacak araçları birlikte kullanmayı gerektirdiğini aktardı.
Aynı dönemde Socket, North Kore bağlantılı olduğu belirtilen ve PolinRider adıyla izlenen kampanyada da yeni bir örneği ortaya çıkardı. Şirket, visanduma/nova-two-factor adlı Packagist paketinin dev-main sürümündeki zararlı kodu sildi. Paket, toplamda 700 binden fazla indirmeye ulaşmıştı.
PolinRider’ın ayırt edici tarafı, geliştirici hesaplarının ele geçirilmesi üzerinden ilerlemesi. Saldırganlar, kaynak kod depolarına zararlı içerik eklemek için bu hesapları kullanıyor ve klonlama ya da bir depoyu IDE içinde açma gibi rutin geliştirici hareketlerini enfeksiyon zincirini başlatan tetikleyicilere dönüştürüyor.
Bu kampanya çoğu zaman Git geçmişinin yeniden yazılması, yüklerin yapılandırma dosyalarına ya da font dosyalarına gizlenmesi, zararlı VS Code auto-run görevleri kurulması ve blokzincir üzerinden aşamalı yük dağıtımı için EtherHiding ile onun daha gizlilik odaklı ardılı NullReceiver gibi kalıcılığı zorlaştıran tekniklere dayanıyor. Analizlere göre amaç, saldırıyı tek bir kanalda tutmak değil, normal geliştirme akışlarını istismar ederek dağıtımı sürdürmek.
Socket güvenlik araştırmacısı Karlo Zanki, Visanduma GitHub organizasyonuna ait depoların 2026 Haziran ortasından bu yana ele geçirilmiş göründüğünü belirtti. Zanki’ye göre kötü amaçlı değişiklikler LaHiRu adlı geliştirici hesabı üzerinden eklendi.
Son sürümde öne çıkan değişikliklerden biri de, yoğun biçimde bulanıklaştırılmış JavaScript’in doğrudan index.php dosyasına yerleştirilmesi oldu. Kodun çalışması için PHP tarafında shell_exec() işlevi kullanıldı. Bu yöntem, bir PHP giriş noktasının JavaScript enfeksiyon zincirini başlatmasına izin verirken, saldırganların sabit bir teslim hattı yerine ele geçirilen projeye göre yürütme yöntemlerini değiştirdiğini de gösteriyor.
Socket, bu faaliyetlerin PolinRider’ın temel özelliğini yeniden doğruladığını, çünkü paket deposu ihlalinin çoğu zaman daha geniş bir Git tabanlı sızmanın sonucu olduğunu aktardı. Operatörler, sıradan kaynak kodu işbirliği akışlarını kullanarak geliştirici ortamlarına ulaşıyor, başka depolara yayılıyor ve erişimi uzun süre koruyor.
Şirkete göre ele geçirilmiş kaynak depoları, katkıda bulunanlara bulaşmak, özel projelere erişmek ve normal geliştirme süreçleri içinde yayılmak için ek fırsatlar yaratıyor. Bir depo ele geçirildiğinde yeni bir sürüm yayımlanması da paketin dağıtım kanallarından biri haline geliyor.
