Imperva güvenlik araştırmacıları, Node.js 24.22.0'ın resmi Linux arm64 imajında özel hazırlanmış Brotli verisiyle uzaktan kod çalıştırılabildiğini kanıtladı. Node.js, 21 Ekim'de yayımladığı 24.22.1 güncellemesiyle açığı kapattı.
Yazılım ve Uygulamalar
Admin2 okunma

Node.js'in Resmi Sürümünde Brotli Verisiyle Uzaktan Kod Çalıştırma Açığı Doğrulandı

Imperva güvenlik araştırmacıları, Node.js 24.22.0'ın resmi Linux arm64 imajında özel hazırlanmış Brotli verisiyle uzaktan kod çalıştırılabildiğini kanıtladı. Node.js, 21 Ekim'de yayımladığı 24.22.1 güncellemesiyle açığı kapattı.

Node.js'in Resmi Sürümünde Brotli Verisiyle Uzaktan Kod Çalıştırma Açığı Doğrulandı

Haber detayı

Imperva bünyesindeki güvenlik araştırmacıları, Node.js'in resmi dağıtım imajında ciddi bir güvenlik açığını başarıyla istismar etti. CVE-2026-111497 olarak kayıtlara geçen bu açık, Node.js ile birlikte gelen Brotli kod çözücüsündeki bir hatadan kaynaklanıyor. Araştırmacılar, "Node2Shell" adını verdikleri kavram kanıtı çalışmasıyla, hata ayıklayıcı veya özel bir derleme kullanmaksızın yalnızca özel hazırlanmış veri göndererek Node.js 24.22.0'ın resmi Linux arm64 imajında saldırgan kontrolündeki kodu çalıştırmayı başardı. Node.js, açığı 21 Ekim'de kamuoyuyla paylaştı ve aynı gün düzeltilmiş sürümü yayımladı.

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.

Sıkça Sorulan Sorular​

CVE-2026-111497 açığı tam olarak nedir?​

CVE-2026-111497, Node.js ile birlikte gelen Brotli kod çözücüsündeki bir sınır dışı yazma hatasıdır. Özel hazırlanmış Brotli verisi, kod çözücüyü geçersiz bir durumda çalışmaya devam etmeye zorlayarak saldırganın kodu uzaktan çalıştırmasına olanak tanıyor.

Node.js'in hangi sürümleri bu açıktan etkileniyor?​

Açık, Node.js'in 22.x, 24.x ve 26.x sürüm dallarını etkiliyor. Yaşam döngüsü sona ermiş 20.x ve önceki sürümler yama almayacak; bu nedenle bu sürümleri kullananların desteklenen bir dala geçmesi gerekiyor.

Node.js açığı ne zaman kapattı ve düzeltilmiş sürüm hangisi?​

Node.js açığı 21 Ekim'de kamuoyuyla paylaştı ve aynı tarihte düzeltilmiş sürümü yayımladı. 24.x dalı için düzeltilmiş sürüm 24.22.1'dir; bu sürümde özel hazırlanmış Brotli verisi reddediliyor ve kod çalışmıyor.

Express 5 kullanan uygulamalar neden özellikle risk altında?​

Express 5'in gövde ayrıştırıcıları olan express.json(), express.urlencoded(), express.text() ve express.raw(), bir rotaya uygulandığında Brotli istek gövdelerini otomatik olarak çözüyor. Bu durum, söz konusu ara yazılımın kullanıldığı her uygulamayı güvenilmeyen Brotli verisine maruz bırakabiliyor.

Güncelleme yapılamayan durumlarda ne yapılabilir?​

Node.js danışma belgesi, çalışma zamanı içinde herhangi bir geçici çözüm sunmuyor. Imperva, güncellemenin mümkün olmadığı durumlarda etkilenen yollardaki güvenilmeyen Brotli trafiğini kısıtlamayı öneriyor; ancak açığı kalıcı olarak yalnızca güncellemenin kaldırdığını belirtiyor. Vercel gibi platformlar kendi altyapılarına engelleme kuralları eklemişse de bu kurallar uygulamaların başka sunuculardan çektiği Brotli yanıtlarını kapsamıyor.

Etiketler

Yorumlar (0)

Yorum yapmak için giriş yapmalısınız.

Geri
Üst