Brotli Dekodlayıcı Zafiyeti: Node.js'dan Başlayarak Çok Sayıda Yazılıma Etki

Brotli Dekodlayıcı Zafiyeti: Node.js'dan Başlayarak Çok Sayıda Yazılıma Etki
audio-thumbnail
Brotli Dekodlayıcı Zafiyeti: Node.js'dan Başlayarak Çok Sayıda Yazılıma Etki
0:00
/0

Brotli Dekodlayıcı Zafiyeti: Node.js'dan Başlayarak Çok Sayıda Yazılıma Etki

Bir güvenlik zafiyeti, tek başına bir yazılım ekosisteminde dikkat çekici olabilir. Ancak, bir tek zafiyetin birden fazla popüler yazılımın temelini sarsması, güvenlik dünyasında nadir rastlanan bir durumdur. 2026 yılında ortaya çıkan CVE-2026-111497, bu tür bir örneğin tamamıyla gözler önüne serildiği bir durumdur. Bu zafiyet, Google'ın Brotli sıkıştırma algoritması içindeki bir hata ile başlamış, ancak Node.js’den başlayarak Bun, Python, Envoy, Istio ve diğer birçok yaygın yazılıma yayılmıştır. Bu yazı, bu zafiyetin nasıl ortaya çıktığını, neden bu kadar yaygın etkileme potansiyeline sahip olduğunu ve geliştiricilerin ne yapması gerektiğini derinlemesine ele alacaktır.


Brotli Nedir ve Neden Bu Zafiyete Yol Açtı?

Brotli, Google tarafından geliştirilen ve web trafiğini azaltmak için kullanılan bir sıkıştırma formatıdır. Özellikle HTTP yanıtlarında kullanılır, sayfaların daha hızlı yüklenmesini sağlar. Bu nedenle, modern web uygulamalarının temelinde yer alır. Ancak, Brotli'nin sıkıştırılmış verileri çözmek için kullanılan C kodu içinde bir hata (yani bir bellek hatası) bulunuyor.

Bu hata, kullanıcı tarafından kontrol edilebilen bir Brotli sıkıştırması ile, programın belleğinin sınırlarının dışına yazılmasına olanak tanır. Bu da yazma geçişi (buffer overflow) adı verilen ciddi bir güvenlik sorununa yol açar. Böylece, kötü amaçlı bir saldırgan, bu zafiyeti kullanarak bir sistemde uzaktan kod çalıştırma (RCE) gibi ciddi etkileri gerçekleştirebilir.


Hangi Yazılımlar Etkilendi?

Bu zafiyetin çok yaygın etkileme potansiyeli, Brotli kodunun her yazılımın kendi kopyasında olması nedeniyle ortaya çıkmıştır. Yani:

  • Node.js (22.x, 24.x, 26.x)
  • Bun (1.4.3 ve önceki sürümler)
  • Python Brotli ve brotlicffi kütüphaneleri (1.2.0 ve önceki)
  • Envoy ve Istio (sadece Brotli çözme etkinleştirilmişse)
  • cdxgen gibi araçlar

Bu yazılımlar, web trafiğini alırken veya gönderirken Brotli sıkıştırması kullanıyorsa, bu zafiyete maruz kalır. Örneğin:

  • Bir Node.js uygulaması, fetch() ile bir Brotli ile gönderilen bir yanıt alıyorsa,
  • Bir Python uygulaması, requests, httpx gibi kütüphanelerle Brotli yanıtlarını otomatik olarak çözüyorsa,
  • Bir proxy (örneğin Envoy), Brotli ile gönderilen verileri alıyorsa,

bütün bu durumlarda zafiyet aktif olabilir.


Ne Zaman ve Nasıl Tespit Edildi?

Bu zafiyet, OpenAI'nin Codex Güvenlik ekibi tarafından keşfedilmiştir. Zafiyet, 27 Şubat 2026 tarihinde Brotli'nin kaynak koduna düzeltme olarak eklenmiş olmasına rağmen, herhangi bir güvenlik açıklaması yapılmadan ve yeni bir Brotli sürümü yayımlandıktan sonra 21 Ekim 2026’da resmi olarak açıkça duyurulmuştur.

Bu durum, zafiyetin daha önce düzeltildiğine rağmen, güvenlik açısından tanınmadığı anlamına gelir. Daha sonra ise Node.js, Google ve diğer yazılım sahipleri, bu düzeltmeyi kendi sürümlerine entegre ederek güncellemeler yayınladılar.


Nasıl Kullanılır ve Ne Kadar Tehlikelidir?

Imperva araştırmacıları, bu zafiyeti Node.js 24.22.0 sürümünde çalıştırarak, bir uzaktan kod yürütme (RCE) saldırısı gerçekleştirebildiklerini göstermiştir. Ancak bu saldırı, sadece birkaç deneme sonucunda olabildi ve açık kaynak olarak paylaşılmamıştır. Bu da, zafiyetin kullanılabilirliği yüksek ancak yaygın bir şekilde kullanılmadığını gösterir.

Ayrıca, bu zafiyet hem sunucu hem de istemci tarafında etkili olabilir:

  • Sunucu tarafında: Bir hizmet, Brotli ile gönderilen istekleri alıyorsa, kötü amaçlı bir istemci bunu kullanarak sunucuya saldırmak isteyebilir.
  • İstemci tarafında: Bir kullanıcı, curl --compressed gibi komutla Brotli ile gönderilen bir sunucu yanıtı alıyorsa, bu sunucu kötü amaçlı olabilir.

Ancak, şu ana kadar herhangi bir gerçek dünya saldırısı bildirilmedi. CISA, 23 Ekim 2026 tarihinde değerlendirmesinde "saldırı varlığı: yok" olarak belirtmiş, Red Hat ise "kod çalıştırma için güvenilir bir PoC (prova-noktası) yok" demiştir.


Farklı Organizasyonlar Nasıl Değerlendiriyor?

Bu zafiyetin ciddiyeti, farklı kurumlarca farklı şekilde değerlendirilmiştir:

  • Google (CVE sahibi): CVSS 4.0 skalağında 9.2 (kritik) olarak belirlemiştir.
  • Node.js: Yüksek olarak sınıflandırmıştır.
  • Red Hat: 8.1 (önemli) olarak değerlendirmiştir.

Bu farklılıklar, zafiyetin sistemdeki erişim düzeyine, kullanıcıların kontrolüne ve çevresel güvenlik kurallarına bağlı olarak değişiklik gösterebileceğini gösterir.


Ne Yapılmalı?

1. Güncellemeleri Yükseltin

En temel çözüm, etkilenen yazılımların en son sürümünü kullanmaktır. Aşağıdaki güncellemeleri uygulayın:

  • Node.js: 22.23.4, 24.22.1, 26.12.1
  • Bun: 1.4.4
  • Python Brotli: 1.2.1
  • Envoy: 1.40.0
  • Istio: 1.31.2, 1.30.6, 1.29.9

Yükseltme yaptıktan sonra hizmeti yeniden başlatın ve container imajlarını yeniden oluşturun, çünkü eski kod hafızada kalabilir.

2. Geçici Çözümler (Geçici Zamanlarda)

Eğer güncellemek mümkün değilse, aşağıdaki önlemler alınabilir:

  • Brotli yanıtlarını reddedilmesi: Sunucu tarafında, Content-Encoding: br içeren istekleri reddedin.
  • Python'da kütüphaneler kaldırılsın: brotli ve brotlicffi paketleri kaldırılarak, sistem gzip ve deflate ile geçiş yapar.
  • Envoy/Istio'da Brotli çözme devre dışı bırakılır: Brotli çözme filtresi kapalı tutulur.

3. Güvenlik Duvarı ve Korumalı Ortamlar

Web uygulamaları için bir yapay zekâ temelli güvenlik duvarı (WAF) faydalı olabilir. Ancak, Verce gibi bazı platformlar, dış sunuculardan alınan yanıtlar için WAF kurallarının etkisiz olduğunu belirtmiştir. Bu nedenle, sadece WAF ile korunmak yeterli değildir.


Sonuç: Tek Zafiyetin Büyük Etkisi

CVE-2026-111497, sadece bir Brotli çözücü hatasına dayanıyor olmasına rağmen, Node.js’den başlayarak birçok kritik yazılımın temelini sarsan bir güvenlik çöküşüdür. Bu durum, bağımsız yazılımların aynı kütüphaneleri nasıl paylaşabileceğini ve bu paylaşımın nasıl büyük bir risk oluşturabileceğini göstermektedir.

Bu olay, geliştiricilerin kütüphane bağımlılıklarını ve güvenlik güncellemelerini nasıl takip ettiğini, aynı zamanda daha fazla güvenlik denetimi yapılmadan bir kodun nasıl dağıtılabileceğini hatırlatır.

Bir tek zafiyet, tüm ekosistemi etkileyebilir. Bu yüzden, her bir yazılımın güvenliğini korumak için yeterli bilgi, hızlı tepki ve düzenli güncellemeler şarttır.