NPM Chalk Saldırısı ve JavaScript Malwarelerini Tarayıcıda Savunma

8 Eylül 2025’te popüler npm paketleri chalk ve debug dahil olmak üzere onlarca kütüphaneyi etkileyen büyük bir supply chain saldırısı yaşandı. Haftada 2.6 milyar indirme alan bu paketler, bir geliştiricinin npm hesabının ele geçirilmesiyle kötü amaçlı kodla güncellendi ve MetaMask cüzdanlarını hedef alarak kripto işlemlerini ele geçirmeye çalıştı.

Bu saldırı, yazılım ekosisteminin ne kadar kırılgan ve güvene dayalı bir yapıya sahip olduğunu bir kez daha gösterdi. Modern web uygulamaları, hız ve verimlilik uğruna yüzlerce dış kütüphaneye bağımlı hale geldi. Ancak bu bağımlılıklar, geliştiricilerin kontrolü dışındaki kodlara körü körüne güvenmeleri nedeniyle yeni saldırı vektörleri yaratıyor. Kısacası, web’in hız ve esneklik sağlayan yapısı artık kendi güvenliğini tehdit eden bir zayıf halka haline gelmiş durumda.

Şimdi saldırıyı adım adım inceleyelim. Deobfuscated kodun tamamına bu linkten ulaşabilirsiniz.

XHR Monkey-patching

Saldırı kodu XMLHttpRequest.prototype.send fonksiyonunu ele geçirip yerine kendi versiyonunu koyuyor. Böylece gelen XHR yanıtlarını yakalayıp kontrol edebiliyor. Cevapları değiştirebildiği için bunu replaceAddress adımında cüzdan adreslerini değiştirmek için kullanacak.

Ama bu yöntem çok gürültülü, her XHR yanıtını hedef aldığı için cevaplarda cüzdan adresine benzeyen her metni değiştirmeye çalışıyor. Bu geniş yüzey alanı tespiti de kolaylaştırıyor.

alt text

Transaction Interception

Saldırı kodu, cüzdanın RPC metotlarını sarıp (wrap) kendi müdahale katmanını ekliyor. Bu katman çağrıların parametrelerini inceliyor; eth_sendTransaction veya Solana’daki imzalama fonksiyonları gibi işlemleri tespit edip işlem nesnelerini txRewriter ile değiştiriyor, sonra orijinal metoda çağrıyı ileterek akışı sürdürüyor.

Cüzdanın imzalama akışına doğrudan müdahale ettiği için, saldırgan işlem kullanıcıya onaylatılmadan hemen önce alıcı adresini değiştirebilir.

alt text

Levenshtein Tabanlı Adres Seçimi

Kod, rastgele bir saldırgan adresi seçmek yerine Levenshtein mesafesi hesaplayarak orijinal alıcıya görsel olarak en yakın olan saldırgan adresini seçiyor. Bu, kullanıcı arayüzünü hızlıca göz gezdirirken ya da onaylarken değişikliği fark etme ihtimalini azaltıyor.

alt text

Tarayıcıda nasıl savunulabilir?

Saldırı npm reposundaki bir paketin ele geçirilmesiyle başladı, ancak kötü amaçlı kodun son hedefi tarayıcıydı. Enjekte edilen payload, son kullanıcıların tarayıcılarında çalışan kripto işlemlerini manipüle etmek için tasarlanmıştı.

Geliştiriciler, paket sahiplerinin oltalama saldırısıyla kandırılmasını engelleyemez, aynı şekilde npm de hiçbir paketin tamamen güvende olacağını garanti edemez. Ancak bir uygulamanın sahibi olarak, kullanıcının tarayıcısında gerçekten hangi kodun çalıştığını kontrol edebiliriz.

Bu noktada Client-Side Monitoring (istemci tarafı izleme) kritik hale gelir. Jscrambler’ın Webpage Integrity (WPI) teknolojisi, tarayıcıda yüklenen her betiği sürekli izleyerek, müdahale veya kötü niyetli davranış tespit ettiğinde bloklar. Bağımlılık güvenilir bir kaynaktan da gelse, CI sürecinden sızmış da olsa, zararlı davranış başladığı anda WPI bunu algılar ve engeller.

Chalk saldırısı örneğinde WPI nasıl çalışırdı?

Tarayıcıdaki fetch veya XMLHttpRequest gibi API’leri değiştirip trafiği yakalamaya çalışan kötü amaçlı kodu, bu girişim gerçekleştiği anda tespit edip, engelleyebilirdi.

window.ethereum gibi cüzdan nesnelerine yetkisiz erişim veya işlem imzalanmadan önce gönderilen verileri değiştirme girişimlerini algılayıp durdurabilirdi.

Saldırganın kontrol ettiği alan adlarına veri gönderilmesini engelleyerek, hassas bilgilerin dışarı sızmasını önleyebilirdi.

JavaScript kodundaki değişiklikleri tespit eder, uygulama envanterini günceller, uygulama sahiplerini uyarır ve eklenen kötü niyetli kodun yeni davranış kalıplarını rapor edebilirdi. □

Written by

Furkan Turan