Şirketinizin uygulaması, web sitesi, online mağazası veya API'si Node.js ile geliştirildiyse (Next.js siteleri ile Express veya NestJS arka uçları dahil), geliştiricinizden bugün Node.js'i 22.23.4, 24.22.1 veya 26.12.1 sürümüne güncellemesini, ardından sunucuyu yeniden derleyip yeniden başlatmasını isteyin. Node.js projesi bu sürümleri 21 Ekim 2026'da, Node2Shell (CVE-2026-111497) olarak bilinen ve 10 üzerinden 9.2 puan alan bir açığı kapatmak için yayımladı. Bu açık, hiçbir parolası olmayan bir saldırganın özel olarak hazırlanmış sıkıştırılmış veriler göndererek sunucunuzda kod çalıştırmasına izin veriyor. Suudi Arabistan Ulusal Siber Güvenlik Otoritesi (NCA) «çok yüksek» seviyeli bir uyarı yayımladı ve 27 Ekim'de ABD siber güvenlik ajansı CISA, açığın gerçek saldırılarda istismar edildiğini doğruladı.

Tam olarak ne oldu?

Açık, web sunucularının ve tarayıcıların birbirleriyle paylaştıkları verileri küçültmek için kullandığı bir sıkıştırma biçimi olan Brotli'de bulunuyor ve Node.js, Google'ın Brotli kod çözücüsünün kendi kopyasını içinde taşıyor. Node.js güvenlik bildirimine göre, bozuk sıkıştırılmış veriler kod çözücünün dahili bir arabelleğin sonunun ötesine yazmasına yol açıyor; bu da uygulamayı çökertebilir, belleğinin içeriğini sızdırabilir veya bir saldırganın kod çalıştırmasına imkân verebilir. Bildirim, açığı bildirenin OpenAI'ın Codex Security ekibi olduğunu belirtiyor; aynı sürüm toplam 10 güvenlik açığını kapattı ve bunların 4'ü yüksek önem derecesinde.

Sonrasında olaylar hızla gelişti. Düzeltmeden bir gün sonra, 22 Ekim'de Imperva Red Team, resmî Node.js 24.22.0 imajında iki gündelik yol üzerinden kod çalıştırdı: yerleşik fetch() fonksiyonu ve Express 5'in işlediği istek gövdeleri. 26 Ekim'de ELLIO, herkese açık saldırı kodu taşıyan gerçek istismar trafiği kaydetti. 27 Ekim'de CISA, açığı aktif olarak istismar edilen güvenlik açıkları kataloğuna ekledi.

Hatanın kendisi eski. CVE kaydına göre Brotli'nin 1.0.3 ile 1.2.0 arasındaki sürümlerini etkiliyor ve OpenAI'a göre sorunun kök nedeni Şubat 2026'da Brotli kaynak kodunda düzeltilmişti; ancak kimse bunun bir güvenlik açığı olduğunu bilmiyordu ve yeni bir sürüm de çıkmamıştı, ta ki 21 Ekim'de Brotli 1.2.1 yayımlanana kadar. Bu size tanıdık geliyorsa nedeni şu: geçen hafta PHP ve WordPress sunucularını açan PHP2Shell açığını ele almıştık. Node2Shell, JavaScript ile yazılmış uygulamalar için aynı türden bir risk.

Uygulamam etkileniyor mu?

Node.js, modern web sitelerinin, mobil uygulama arka uçlarının, yönetim panellerinin ve API'lerin önemli bir kısmının sunucu tarafını çalıştırıyor. Sisteminiz son birkaç yılda bir ajans veya serbest çalışan bir geliştirici tarafından kurulduysa, sizin haberiniz olmadan Node.js üzerinde çalışıyor olması kuvvetle muhtemel. Etkilenen sürüm hatları, düzeltilmiş sürümlerden önceki 22.x, 24.x ve 26.x ile desteği sona eren 20.x, 23.x ve 25.x hatlarıdır; Node.js projesine göre bu eski hatlar her zaman etkilenir ve düzeltme almayacak.

Yalnızca Node.js çalıştırmak sizi savunmasız yapmaz: saldırganın verisini kod çözücüye bir şeyin iletmesi gerekir. Araştırmacılar üç yaygın yol sayıyor:

  • Gelen sıkıştırılmış istekler. Express 5, body-parser 2 ve Koa'nın gövde ayrıştırıcıları, Brotli ile sıkıştırılmış istek gövdelerini sizin kodunuz daha çalışmadan otomatik olarak açar.
  • Sunucunuzun dışarıdan çektiği içerik. Uygulamanız bağlantı önizlemeleri, webhook'lar, tarayıcı botları veya web sayfalarını okuyan yapay zekâ ajanları gibi dış bağlantıları açıyorsa, kötü niyetli bir site zehirli sıkıştırılmış verilerle yanıt verebilir. Node'un yerleşik fetch() fonksiyonu, axios ve Next.js gibi çatılardaki sunucu taraflı istekler bunu otomatik olarak açar.
  • Kullanıcıların yüklediği dosyalar. Bir müşterinin veya ziyaretçinin gönderdiği Brotli verisini açan her kod.

Risk Node.js ile sınırlı değil. NCA uyarısı Python, Bun ve Envoy'u da sayıyor; Microsoft ise 25 Ekim'de .NET 8, 9, 10 ve 11, Visual Studio 2019, 2022 ve 2026 ile PowerShell 7.4 ila 7.6 için düzeltmeler yayımladı ve açığı .NET için kritik olarak sınıflandırıp «Exploitation More Likely» değerlendirmesini verdi. Microsoft, .NET'te Brotli açma özelliğinin varsayılan olarak etkin olmadığını, dolayısıyla yalnızca bunu etkinleştiren uygulamaların risk altında olduğunu belirtiyor.

Siteniz Vercel'de barındırılıyorsa, şirket bildiriminde, Node.js'in düzeltmeyi yayımladığı gün tüm projeler için gelen saldırı yolunu engelleyen güvenlik duvarı kuralları devreye aldığını ve 28 Ekim'den bu yana tüm yeni dağıtımların düzeltilmiş bir Node.js kullandığını söylüyor. Mevcut projelerin yeniden dağıtılması gerekiyor; hâlâ Node.js 20 kullanan projeler ise 22 veya 24'e geçmeli.

Bugün ne yapmalı: beş adım

  1. Yazılı tek bir soru sorun. Sunucularımızda ve Docker imajlarımızın içinde hangi Node.js sürümü çalışıyor? Geliştiricinizden Node.js sürüm numarasını node -v komutuyla kontrol etmesini isteyin. Brotli sürüm bilgisine güvenmeyin: ELLIO, bunun düzeltilmiş ve düzeltilmemiş derlemelerde aynı şekilde 1.2.0 gösterdiğini tespit etti.
  2. Düzeltilmiş bir sürüme güncelleyin. 22.23.4, 24.22.1 veya 26.12.1. 20.x, 23.x veya 25.x kullanıyorsanız 22 veya 24 gibi desteklenen bir hatta geçin ve yayına almadan önce test edin.
  3. Yeniden derleyin ve yeniden başlatın. Çalışan bir süreç eski kodu korur. Konteyner imajlarını düzeltilmiş bir temel imaj üzerinde yeniden derleyin; çünkü 24.22.0 sürümüne sabitlenmiş bir Dockerfile, biri o satırı değiştirene kadar savunmasız sürümü dağıtmaya devam eder. Test sunucularını, derleme hatlarını ve sunucusuz fonksiyonları da kontrol edin.
  4. Diğer kopyaları güncelleyin. Python'un Brotli ve brotlicffi paketleri (sürüm 1.2.1 ve 1.2.1.0), Bun, Envoy, Linux dağıtımınızın Brotli kütüphanesi ve Microsoft'un 25 Ekim güncellemesiyle .NET.
  5. Kayıtları ve çökme dosyalarını inceleyin. Olağandışı büyük, Brotli ile sıkıştırılmış istekleri ve süreçlerin tekrarlanan çökmelerini arayın. ELLIO, başarısız saldırıların çoğunun süreci çökerttiği ve bir çökme dosyasının ziyaretçilerin oturum çerezlerini ve anahtarlarını içerebileceği konusunda uyarıyor; bu yüzden çökme dosyalarını (core dumps) kimin okuyabileceğini ve ne kadar süre sakladığınızı sınırlayın.

Bugün güncelleyemiyorsanız

Geçici bir önlem olarak, uygulamanızın ihtiyacı yoksa ön sunucunuzda veya güvenlik duvarınızda Content-Encoding: br başlığını taşıyan gelen istekleri engelleyin. Vercel ve Imperva bu açık için güvenlik duvarı kuralları ekledi, ancak Vercel'in kendisi bir güvenlik duvarının sunucunuzun başka sitelerden çektiği yanıtları kapsamadığını vurguluyor: bu yolu yalnızca Node.js güncellemesi kapatır. Her koruma katmanını güncellemenin yerine geçen bir çözüm olarak değil, kazanılmış zaman olarak görün.

Origami'nin görüşü

Bir ay içinde web'in temellerinde iki kritik açık, önce PHP2Shell sonra Node2Shell, net bir hikâye anlatıyor: ekibinizin yazdığı kod sağlam olabilir ama altındaki çalışma ortamı açık kalmış olabilir. Node2Shell'in düzeltmesi, kimse bunun bir güvenlik sorunu olduğunu anlamadan önce Brotli kaynak kodunda yaklaşık sekiz ay bekledi; ayrıntılar kamuya açıklandığında ise araştırmacıların resmî bir derlemede kod çalıştırması bir gün sürdü. Pek çok şirkette gördüğümüz şey, yıllar önce teslim edilmiş, güncellemelerinden kimsenin sorumlu olmadığı ve Node.js'in gerçekte nerede çalıştığına dair bir listesi bulunmayan bir uygulama. Durumunuz buysa, o listeye bugün başlayın. Origami olarak, birçoğu Node.js ve Next.js üzerinde çalışan web uygulamaları ve sistemler geliştiriyor, çalışma ortamlarının güncellemelerini ilk günden takip ediyoruz. Uygulamanızın kontrol edilmesini veya Node.js'in kesinti olmadan güncellenmesini istiyorsanız bizimle iletişime geçin.

Kaynaklar