· kaynak dev.to (home feed)
Node.js, güvenilmeyen stream'lerden erişilebilen Brotli decoder buffer overflow açığını yamaladı
Hatalı biçimlendirilmiş bir Brotli block switch değeri, streaming decoder'ın ölümcül bir hatayı daha fazla girdi isteği olarak yorumlamasına ve sekiz baytlık bir buffer'ın dışına yazmasına neden oluyordu. Node.js ve Brotli upstream'i düzeltilmiş sürümleri yayımladı.
Ne oldu
Node.js, 21 Ekim 2026'da desteklenen üç sürüm hattının tamamı için, içinde barındırdığı Brotli açıştırma kodundaki bir buffer overflow'u kapatmak üzere yamalı sürümler yayımladı. CVE-2026-111497 numaralı zafiyet Google'ın Brotli kütüphanesinde köklense de Node, kendi kopyasını node:zlib modülü üzerinden dağıttığı için, runtime içinde Brotli stream'lerini açan her uygulama, ek bir şey kurmuş olmasa bile bu açığa maruz kalıyordu. Bildirimin ve upstream düzeltmesinin dev.to'daki analizine göre hata, bozuk bir block header'ını bellek bozulmasına dönüştürüyordu.
Bir hatanın daha fazla veri isteğiyle karıştırılması
Brotli stream'i bloklara bölünür ve her block header'ı decoder'a izleyen verinin nasıl kodlandığını söyler. Bozuk girdi, formatın izin vermediği bir block-switch değeri taşıyabilir; tek doğru yanıt format hatasıyla işlemi durdurmaktır, çünkü ek baytlar yasadışı bir değeri meşru hale getiremez.
dev.to'daki yazıya göre, Google'ın Brotli deposundaki yama commit'ini inceleyen decoder, bunun yerine normalde daha fazla girdi istemek için kullandığı durum kodunu döndürdü. Bunun üzerine streaming devam etti ve decoder, birkaç bayt daha eklenince header'ın tamamlanacağı durumlar için ayrılmış sekiz baytlık iç buffer'a baytlar eklemeye devam etti. Yazma işlemi sonunda bu alanın sonunu aştı. 22 Ekim 2026'da yayımlanan Google CVE Program kaydı, sorunu CWE-787 (out-of-bounds write) ve CWE-252 (unchecked return value) altında sınıflandırıyor.
Hangi sürümler etkileniyor
CVE kaydı, tüm platformlarda Google Brotli 1.0.3 ile 1.2.0 arasını zafiyetli olarak işaretliyor; düzeltmeler 1.0.10, 1.1.1 ve 1.2.1 sürümlerinde — sürdürülen her dal için bir tane olmak üzere üç yamalı yayım — bulunuıyor; bu da aynı düzeltmenin her hatta backport edildiğini düşündürüyor. Bir C build'i, vendored bir kopya ya da bu aralıkta sabitlenmiş bir dil binding'i çalıştıran herkes kapsam içinde.
Node.js bildirimi 26.x, 24.x ve 22.x hatlarını etkilenen olarak listeliyor ve düzeltilmiş sürümler olarak v26.12.1, v24.22.1 ve v22.23.4'ü sunuyor. Ayrıca ömrünü tamamlamış sürümlerin de bu kusuru taşıdığı konusunda uyarıyor ve kullanıcıları güncel bir sürüme geçmeye yönlendiriyor.
Saldırgan verisi decoder'a nasıl ulaşıyor
CVE kaydı tetikleyiciyi, uzaktan, kimliği doğrulanmamış bir saldırganın sağladığı hazırlanmış Brotli verisi olarak tanımlıyor. dev.to yazısında atıf yapılan bir OX Security analizi, güvenilmeyen baytların beraberindeki decoder'a nasıl ulaştığını izliyor: Content-Encoding: br ile gönderilen request body'lerini kabul eden bir servis, çağıran tarafın seçtiği veriyi açar; kullanıcı tarafından verilen bir URL'i çeken bir servis de aynı maruziyeti yanıt tarafında yaşar, çünkü HTTP client, body'yi uygulama kodu görmeden önce açar. Bildirimin ifadesi proxy'leri, CDN'leri ve benzeri servis türlerini kapsıyor.
Önem derecesi, katkı verenler ve geniş kapsamlı sürüm
Google'ın kaydı sorunu CVSS 4.0 altında 9.2 puanla değerlendirip gizlilik, bütünlük ve erişilebilirlik etkilerini yüksek olarak nitelendirirken, Node.js bildirimi runtime sorunını kritik değil yüksek olarak sınıflandırıyor. dev.to yazısı bu tutarsızlığa dikkat çekiyor ve hiçbir kaynağın bunu açıklamadığını belirtiyor. Puanın AT:P bileşeni, bir saldırının belirli ön koşullar gerektirdiği anlamına geliyor — pratikte hedefin hazırlanmış stream'i gerçekten decoder'dan geçirmesi gerekiyor.
Bildirim, raporu OpenAI Codex Security araştırmacıları Khai Tran ve Sylvie Mayer'a, düzeltmeyi Node maintainers'ları mcollina ve aduh95'e atfediyor. Ekim sürümünde, DNS adı kısaltılması, TLS hostname doğrulaması ve snapshot build'lerinde öngörülebilir rastgele değerler gibi konuları kapsayan dokuz bildirim daha geldi; bunlara c-ares, OpenSSL, SQLite, Undici ve CA paketi için bağımlılık güncellemeleri de eşlik etti.
Neden önemli
Açıştırma görünmez bir altyapıdır: servisler rutin istek işlemede node:zlib'i çağırır ve onu bir saldırı yüzeyi olarak görmez; bu kusur, beraberinde gelen bir C kütüphanesindeki ayrıştırma hatasının sıradan trafiği bir bellek bozulması vektörüne dönüştürebileceğini gösteriyor. Pratik yanıt iki yönlü. Node.js işletenler, ömrünü tamamlamış hatlara backport gelmeyeceği için üç düzeltilmiş sürümden birine derhal geçmeli. Diğer taraftaki ekiplerin — dil binding'leri, vendored kopyalar, gömülü C build'leri — Brotli 1.0.3 ile 1.2.0 arasını kullanan her şeyi envanterine alması gerekiyor, çünkü upstream düzeltmeleri yalnızca 1.0.10, 1.1.1 ve 1.2.1'de mevcut.
- #node-js
- #security
- #brotli
- #vulnerability
- #compression