npm ekosisteminde ortaya çıkan indexed-btree adlı zararlı paket, kurulum sırasında tetiklenen betiklere yaslanmak yerine kötü amaçlı yükleyicisini doğrudan çalışma anındaki uygulama kodunun içine gizledi. Checkmarx’e göre paket, meşru sorted-btree yardımcısını taklit ediyor ve özellikle uygulama çalışırken devreye giren bir BTree.prototype.set() yöntemi üzerinden zinciri başlatıyordu.
Paketin kendisi ve ilişkili GitHub deposu artık npm’den indirilemiyor. Kayıtlara göre charlessadler25 adlı bir npm kullanıcısı tarafından 18 Haziran 2026 tarihinde ilk kez yayımlanan paket, kısa sürede milyonlarca indirmeye ulaştı. Aynı operasyonla ilişkilendirilen kampanyanın saldırganlarına kripto para cinsinden yaklaşık 230.933,57 euro, yani 109 ETH kazandırdığı da aktarılıyor.
Checkmarx, indexed-btree’nin aynı operasyona bağlı çok sayıdaki npm paketinden biri olduğunu ve bu paketlerin tamamının artık npm’den kaldırıldığını belirtti. Kaldırılan adlar arasında 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.
Yükleme betikleri yerine çalışma anı hedef alındı
Olay, npm sürüm 12’nin preinstall ve postinstall gibi yaşam döngüsü betiklerinin otomatik çalıştırılmasını sınırlayan güvenlik değişikliği sonrasında ortaya çıktı. Bu betikler normalde derleme, veri hazırlama ya da temel yapılandırma adımları için kullanılıyor. Saldırganlar ise uzun süredir bu mekanizmayı, kullanıcıdan onay almadan zararlı kod çalıştırmak için suistimal ediyordu.
Checkmarx, meşru kullanımda bu betiklerin gerekli kodun derlenmesi, veri tohumlama ya da temel yapılandırmaların kurulması için sıkça devreye girdiğini söyledi. Şirkete göre tehdit aktörleri ise bunları, zararlı paketin kurulumu sırasında kullanıcı onayı olmadan kötü amaçlı kodu otomatik çalıştırmak için kullanıyordu.
Güvenlik incelemesine göre saldırganlar bu kez yöntemi değiştirdi ve yükleme anındaki kancalara yaslanmak yerine zararlı kodu doğrudan kütüphanenin içine yerleştirdi. indexed-btree içinde gizlenen yükleyici, sharedLoad.min.js adlı bir JavaScript içeriğini çağırıyor. Bu dosya, zararlı yazılımın bulanıklaştırılmış ilk aşamasını barındırıyor.
İlk aşama yükleyici, BTree.prototype.set() içinde gizleniyor ve buradan sharedLoad.min.js tetikleniyor. Checkmarx’in aktardığına göre, kötü amaçlı bileşen tam olarak çalışma zamanında devreye giriyor; bu da paketin kurulum anında taranmasına güvenen denetimleri aşmasına yardımcı oluyor.
Zincirin devamında kötü amaçlı yazılım, çalıştığı sistemi parmak iziyle tanımlıyor, ayrıntıları sabitlenmiş bir Slack kanalına ve Telegram botuna iletiyor, ardından Sepolia testnet üzerinde konuşlandırılmış bir akıllı sözleşmeden EtherHiding tekniğiyle bir sonraki aşamanın şifreli parçalarını çekiyor. Bu parçalar birleştirildikten sonra ikinci aşama yük oluşuyor.
Son adımda saldırganlar izlerini örtmek için zararlı bileşenleri siliyor ve paketteki tetikleyiciyi kaldırıyor. Böylece geride kalan kod daha temiz görünse de çalıştırma anında zincir çoktan devreye girmiş oluyor.
Checkmarx, kötü amaçlı yükün ardından çekilen parçaların bir araya getirilmesiyle ikinci aşama yükün oluştuğunu da vurguladı. Şirketin bulgularına göre saldırı zinciri, önce parmak izi çıkarma, sonra uzaktaki kanallara bilgi aktarma, ardından blokzincir tabanlı depodan şifreli veri çekme adımlarını izliyor.
Operasyonun sağladığı kripto gelir de dikkat çekiyor. Yapılan hesaplamaya göre saldırganlar bu kampanyadan yaklaşık 109 ETH topladı. Bu da operasyonun yalnızca kod çalıştırmaya değil, doğrudan gelir üretmeye odaklandığını gösteriyor.
Checkmarx, kampanyanın ilk pakette bitmediğini, aynı operasyonun farklı npm adları üzerinden de sürdürüldüğünü aktardı. Bu nedenle kaldırılan paketlerin listesi, saldırı yüzeyinin tek bir depo ile sınırlı olmadığını ortaya koyuyor.
Aynı operasyon başka paketlere de yayılmış
SOCRadar CISO’su Ensar Seker, bu kampanyanın özellikle önemli olduğunu, çünkü saldırganların güçlenen yazılım tedarik zinciri savunmalarına neredeyse anında uyum sağladığını söyledi. Seker’e göre npm’in yaşam döngüsü betiklerini kısıtlaması yükleme aşamasındaki güvenliği artırdı, ancak saldırganlar kötü amaçlı yürütmeyi bu kez meşru görünen çalışma zamanı işlevlerinin içine taşıdı.
Seker, saldırganların zararlı yürütmeyi güvenilir görünen çalışma zamanı işlevlerine taşıyarak savunmanın yönünü değiştirdiğini ifade etti. Aynı açıklamada, yaşam döngüsü betiklerini engellemenin önemli bir iyileştirme olduğu, fakat tehdit aktörlerinin alternatif yürütme yolları aramayı sürdüreceği vurgulandı.
Yeni bulgular, sadece kurulum sırasında tarama yapmanın ve yaşam döngüsü betiklerini engellemenin yeterli olmadığını gösteriyor. İncelemeyi yapan ekipler, uygulama çalışırken davranış analizi yapılması gerektiğini vurguluyor. Çünkü bu kampanyada saldırganlar, savunma kontrolleri sıkılaştıkça taşıyıcıyı değil yürütme noktasını değiştirdi.
SOCRadar’ın aktardığı bir diğer nokta da savunmanın katmanlı olması gerektiği yönündeki değerlendirme oldu. Şirkete göre tehdit aktörleri, davranışları kurulmadan önce, çalışırken ve dağıtımdan sonra izlenebilen denetimleri aşmaya çalışıyor.
EtherHiding tekniği bu olayda da öne çıkıyor. Saldırganlar, ikinci aşama yükleri bir blokzincir üzerindeki akıllı sözleşmeden çekerek klasik barındırma altyapılarına bağımlılığı azaltıyor. Güvenlik araştırmacıları, aynı yaklaşımın daha önce de takedown sürecini zorlaştırmak için kullanıldığını belirtiyor.
Çalışmanın teknik akışında önce cihazın kimliği çıkarılıyor, ardından saldırı altyapısına bir iz bırakılıyor, sonra blokzincirden şifreli veri alınıp birleştiriliyor. Bu düzen, paketin ilk bakışta sıradan bir yardımcı kütüphane gibi görünmesini sağlıyor. Zararlı yük ise ancak belirli bir kod yolu çağrıldığında açığa çıkıyor.
npm 12’nin getirdiği kısıtlama, saldırganları yaşam döngüsü betiklerinden uzaklaştırdı. Checkmarx’in bulguları, tehdit aktörlerinin buna karşılık yürütme mantığını uygulama kodunun içine taşıdığını ve kütüphanenin normal işleviymiş gibi davranan çağrıları kötüye kullandığını gösteriyor.
Operasyonun sağladığı kripto gelir, paketin sadece dağıtım aracı değil aynı zamanda kazanç kanalı olarak da kullanıldığını ortaya koyuyor. Kampanya sonucu elde edilen yaklaşık 230.933,57 euro, yani 109 ETH, kayıtların öne çıkardığı en somut maddi sonuçlardan biri oldu.
Aynı günlerde başka bir açık kaynak ekosisteminde benzer bir hareketlilik daha görüldü. Socket, Kuzey Kore bağlantılı olduğu belirtilen ve PolinRider adıyla izlenen kampanya kapsamında, visanduma/nova-two-factor adlı Packagist paketinin dev-main sürümündeki zararlı kodu sildi. Bu paketin kümülatif indirme sayısı 700 bini aşmış durumda.
PolinRider kampanyasının ayırt edici yönü, geliştirici hesaplarının ele geçirilmesiyle kaynak kod depolarına zararlı içerik enjekte edilmesi. Saldırganlar çoğu zaman normal geliştirici davranışlarını tetikleyici olarak kullanıyor. Bir depoyu klonlamak, bir projeyi IDE içinde açmak ya da rutin bir geliştirme adımı çalıştırmak, enfeksiyon zincirini başlatmak için yeterli olabiliyor.
Bu operasyonda da Git geçmişi yeniden yazılıyor, yükler yapılandırma dosyalarına veya font dosyalarına saklanıyor, zararlı VS Code auto-run tasks hazırlanıyor. Yük aşamasında ise blokzincir üzerinden dağıtım için EtherHiding ve onun daha gizlenmiş sürümü olarak anılan NullReceiver kullanılıyor.
Socket araştırmacısı Karlo Zanki, Visanduma GitHub organizasyonundaki depoların Haziran 2026 ortasından bu yana ele geçirilmiş göründüğünü söyledi. Zanki’ye göre zararlı değişiklikler LaHiRu geliştirici hesabı üzerinden eklenmiş.
Son dalgada öne çıkan bir başka değişiklik, yoğun biçimde bulanıklaştırılmış JavaScript’in doğrudan index.php içine yerleştirilmesi oldu. Bu kod, PHP’nin shell_exec() fonksiyonu üzerinden çalıştırılıyor. Böylece bir PHP giriş noktası JavaScript tabanlı enfeksiyon zincirini başlatabiliyor; bu da saldırganların sabit bir dağıtım yolu yerine ele geçirilen projeye göre yöntem değiştirdiğini gösteriyor.
Socket, ele geçirilen kaynak depolarının saldırganlara katkıda bulunan geliştiricileri enfekte etme, özel projelere erişme ve normal geliştirme iş akışları üzerinden yayılma fırsatı verdiğini aktardı. Bir depo ele geçirilip yeni bir sürüm ürettiğinde paket yayını da ek bir dağıtım kanalına dönüşüyor.
Bu tablo, açık kaynak ekosisteminde saldırganların yalnızca paket deposunu değil, geliştirici hesabı ve kaynak kod deposu katmanını da hedef aldığını bir kez daha ortaya koyuyor. Çalışma zamanı içinde gizlenen yükleyiciler ise, kurulum aşamasına odaklanan denetimleri tek başına yetersiz bırakıyor.
