Node2Shell Nedir ve Nasıl Çalışır?
Imperva'nın Node2Shell demosu, daha önce yapılan ilk kamuya açık kavram kanıtı çalışmasının ötesine geçiyor. Söz konusu ilk çalışmada kod çalıştırma yalnızca kasıtlı olarak zayıflatılmış bir test derlemesinde elde edilebilmişti; standart bir derlemede ise araştırmacı yalnızca çökme ve süreç belleğinin sınırlı okunabilirliğini raporlamış, normal bir derlemede çalışan bir saldırı geliştirilemediğini açıklamıştı. Imperva ise resmi, değiştirilmemiş bir imaj üzerinde kod çalıştırmayı başararak bu sınırı aştı.Açığın teknik kökü, Brotli akışının blok türü değişimlerini işleme biçiminde yatıyor. Brotli akışı, kod çözme sırasında kullanacağı blok türlerini önceden bildiriyor. Imperva'nın hazırladığı test girdisi, akışın kendi yapısı gereği ulaşılamaz olan bir blok değişimine yöneldi. Savunmasız kod çözücü bunu daha fazla girdi talebi olarak yorumladı ve geçersiz bir durumda çalışmayı sürdürdü. Bellek sanitizörüyle yapılan ayrı bir testte ise bu geçersiz durumdan devam edildiğinde hedeflenen arabelleğin ötesine yazıldığı, yani açığın temelindeki sınır dışı yazma hatasının ortaya çıktığı görüldü. Node.js bu hatayı, Brotli'nin kaynak kodundaki bir yamayı içe aktararak kapattı; yeni sürüm söz konusu noktada çalışmayı sürdürmek yerine biçim hatası vererek duruyor.
Hangi Uygulamalar Etkileniyor?
Açık, Node.js'in 22.x, 24.x ve 26.x sürüm dallarında paketlenmiş Brotli kod çözücüsünde bulunduğundan yalnızca Imperva'nın test ettiği tek derlemeyle sınırlı değil. Bir servis bu kod çözücüye HTTP alışverişinin her iki tarafından da ulaşabiliyor: ya Node.js'in yerleşik fetch() işleviyle Brotli sıkıştırmalı bir yanıt okurken ya da bir ara yazılım Brotli sıkıştırmalı bir istek gövdesini çözerken.Express 5'in gövde ayrıştırıcıları olan express.json(), express.urlencoded(), express.text() ve express.raw(), bir rotaya uygulandığında gzip ve deflate'in yanı sıra artık Brotli istek gövdelerini de çözüyor. Düz bir Node.js HTTP sunucusu ise yalnızca Brotli isteği alarak bu kod çözücüyü tetiklemiyor; bunun için söz konusu ara yazılımın ya da açık bir çağrının devreye girmesi gerekiyor. Imperva, hem istek gövdesi hem de yanıt yollarından kod çalıştırmayı yeniden üretti; testler Express 5.0.0'dan 5.3.0'a ve body-parser 2.0.0'dan 2.3.0'a sabitlenmiş sürümleri kapsıyor, aradaki her sürüm test edilmedi.
Testin Sınırlılıkları ve Vahşi İstismar Durumu
Imperva'nın demosu her denemede başarılı olmadı; Linux arm64 ortamında kod çalıştırma birkaç deneme gerektirdi. Sonuç yalnızca o tek derleme ve uygulama kurulumunu kapsıyor; diğer mimariler ile 22.x ve 26.x dalları test edilmedi. Düzeltilmiş sürüm olan 24.22.1'de aynı veri reddedildi ve herhangi bir kod çalışmadı. 22 Ekim itibarıyla açığın gerçek saldırılarda kullanıldığına dair herhangi bir rapor bulunmuyor.Alınması Gereken Önlemler
Temel çözüm, yamalı bir sürüme geçmek. Güncelleme, paket envanterinin gözden kaçırabileceği Node ikili dosyası barındıran konteyner imajlarını ve diğer yapıtları da kapsıyor. Yaşam döngüsü sona ermiş 20.x ve önceki sürümler bu yamayı almıyor; bu nedenle desteklenen bir dala geçilmesi gerekiyor. Danışma belgesi, Node.js içinde herhangi bir geçici çözüm sunmuyor; dolayısıyla güncelleme yapamayan uygulamalar için çalışma zamanı düzeyinde bir yedek seçenek yok.Imperva, güncellemenin pratik olmadığı durumlarda etkilenen yollardaki güvenilmeyen Brotli trafiğini kısıtlamayı öneriyor; ancak açığı yalnızca güncellemenin kaldırdığını da vurguluyor. Şirket ayrıca kendi web uygulaması güvenlik duvarına kurallar ekleyerek bunları yeniden ürettiği saldırılara karşı test etti. Node.js'i müşterileri için çalıştıran Vercel ise 21 Ekim'de gelen isteklerdeki saldırıyı engelleyen kurallar eklediğini açıkladı. Bu kurallar, bir uygulamanın başka sunuculardan çektiği Brotli yanıtlarını kapsamıyor ve güncellemenin yerini tutmuyor.

Yazılım ve Uygulamalar
Yazılım ve Uygulamalar
Yazılım ve Uygulamalar
Yorumlar (0)
Yorum yapmak için giriş yapmalısınız.