Google’ın açık kaynak Brotli sıkıştırma kütüphanesindeki bir bellek açığı, son bir haftada yazılım dünyasının dört bir yanında yama zinciri başlattı. CVE-2026-111497 koduyla izlenen ve araştırmacıların “Node2Shell” adını verdiği açık için önce Node.js projesi 21 Ekim 2026’da güvenlik sürümleri yayımladı; ardından Python paketleri, Bun, Envoy Proxy ve Istio güncellendi. Microsoft da 25 Ekim’de .NET, Visual Studio ve PowerShell için planlı takvim dışında (out-of-band) güvenlik güncellemesi çıkardı.
Açığın önemi, Brotli’nin ne kadar yaygın kullanıldığından geliyor. Web sayfalarını ve API yanıtlarını küçültmek için kullanılan bu biçimin çözücüsü (decoder), sunucu çatılarından HTTP istemcilerine, proxy’lerden arşiv araçlarına kadar çok sayıda yazılımın içine gömülü. Bu yüzden sorun tek bir ürünün değil, Brotli çözücüsünü kendi içinde taşıyan her yazılımın sorunu.
Açık ne yapıyor?
Node.js’in güvenlik bildirimine göre hata, Brotli çözücüsünün geçersiz bir “blok geçişini” kalıcı bir biçim hatası olarak değil, “biraz daha veri gerekiyor” durumu olarak yorumlamasından kaynaklanıyor. Bu yanlış yorum yüzünden akış hâlindeki çözücü, gelen baytları sekiz baytlık bir iç arabelleğe eklemeye devam ediyor ve arabelleğin sınırının dışına yazıyor. Bildirimde, uygulamanın node:zlib ile açtığı Brotli verisini kontrol edebilen bir saldırganın süreç belleğini bozabileceği; bunun çökmeye, bellek içeriğinin sızmasına ya da uzaktan kod çalıştırmaya yol açabileceği belirtiliyor.
SecurityWeek’in 26 Ekim tarihli haberine göre açık Brotli’nin 1.0.3 ile 1.2.0 arasındaki sürümlerini etkiliyor. Google açığa CVSS v4 ölçeğinde 9,2 puan vererek “kritik” sınıfına koydu. Düzeltme Brotli 1.0.10, 1.1.1 ve 1.2.1 sürümlerinde yer alıyor. Microsoft ise açığı CVSS v3.1 ölçeğinde 8,1 puanla “yetki yükseltme” olarak sınıflandırdı ve istismar olasılığını “daha yüksek” (Exploitation More Likely) olarak işaretledi.
Açığı OpenAI’nin Codex Security ekibinden Khai Tran ve Sylvie Mayer bildirdi. OpenAI’nin “Patch the Planet” girişimi, hatanın kök nedeninin aslında Şubat ayında Brotli kaynak kodunda düzeltildiğini, ancak o sırada bunun bir güvenlik açığı olduğunun anlaşılmadığını ve yeni bir Brotli sürümü yayımlanmadığını aktarıyor. Yani düzeltme aylardır kodda duruyordu ama ona bağlı projeler bunu sürümlerine almamıştı. Açık kaynak tedarik zincirinde sık görülen bu durum, yamanın varlığının tek başına yetmediğini bir kez daha gösteriyor.
Gerçek risk ne kadar büyük?
Saldırının işe yaraması için kötü niyetli Brotli verisinin bir şekilde çözücüye ulaşması gerekiyor. Patch the Planet bildirimine göre bu üç yoldan olabilir: sıkıştırılmış HTTP istek gövdeleri, güvenilmeyen sunuculardan çekilen yanıtlar ve sıkıştırılmış dosyalar. Yani yalnızca dışarıya Brotli ile sıkıştırılmış içerik sunan bir site risk altında değil; asıl risk, dışarıdan gelen Brotli verisini açan uygulamalarda.
Güvenlik şirketi Imperva, açığı resmî Node.js 24.22.0 imajında, Linux arm64 üzerinde kod çalıştırmaya kadar götürebildiğini gösterdi. Şirket, kötü niyetli veriyi hem uygulamanın çektiği bir sunucu yanıtında hem de Express 5 veya body-parser 2 ile işlenen bir istek gövdesinde gönderdi. Imperva, denemenin her seferinde başarılı olmadığını not ediyor ve istismar kodunu yayımlamadı. SecurityWeek’e göre şu ana kadar açığın gerçek saldırılarda kullanıldığına dair bir bildirim yok. GitHub’da yayımlanan bir kavram kanıtının ise yalnızca bilerek zayıflatılmış bir derlemede kod çalıştırabildiği; bazı araştırmacıların açığın pratikte yalnızca hizmet dışı bırakma (DoS) için kullanılabileceğini savunduğu belirtiliyor.
Bu tartışma önemli ama yama kararını değiştirmemeli. Uzaktan kod çalıştırma her ortamda mümkün olmasa bile, dışarıdan gelen veriyle süreci çökertebilmek bir API ya da ödeme servisi için yeterince ciddi bir sorun.
Hangi sürümler güvende?
Patch the Planet’in 23 Ekim’de güncellediği tabloya ve Microsoft’un 25 Ekim tarihli duyurusuna göre düzeltilmiş sürümler şöyle:
- Node.js: 22.23.4, 24.22.1 ve 26.12.1
- Bun: 1.4.4 (Brotli 1.2.1 ile geliyor)
- Envoy Proxy: 1.40.0, 1.39.3, 1.38.6 ve 1.37.8
- Istio: 1.29.9, 1.30.6 ve 1.31.2 (1.29 hattının desteği bitti)
- Google Brotli: 1.0.10, 1.1.1 ve 1.2.1
- .NET: 8.0.33, 9.0.22, 10.0.14 ve .NET 11 RC3; ayrıca Visual Studio 2019, 2022, 2026 ile PowerShell 7.4, 7.5 ve 7.6
- Python (PyPI): Brotli 1.2.1 ve brotlicffi 1.2.1.0
Microsoft, .NET tarafında ASP.NET Core istek açma (request decompression), HttpClient’ın otomatik yanıt açma özelliği ve System.IO.Compression Brotli API’lerini kullanan uygulamaların etkilenebileceğini; istek açma ve otomatik yanıt açmanın varsayılan olarak kapalı olduğunu, .NET Framework’ün ise etkilenmediğini belirtiyor. SecurityWeek’in aktardığı bir izleme listesine göre DuckDB, Apache Arrow, 7-Zip-zstd, p7zip ve EDK II gibi kendi Brotli kopyasını taşıyan bazı projeler henüz yama yayımlamadı.
Yamayı kurmak yetmiyor
Bu açıkta en sık yapılacak hata, sunucuya yeni sürümü kurup işi bitmiş saymak olabilir. Hem Microsoft hem Patch the Planet, çalışan süreçlerin eski kodu kullanmaya devam ettiğini hatırlatıyor. Çerçeveye bağlı (framework-dependent) .NET uygulamalarında yeni çalışma ortamını kurup uygulamayı yeniden başlatmak gerekiyor. Kendi çalışma ortamını içinde taşıyan (self-contained) uygulamalar ve konteyner imajları ise yeniden derlenip yeniden dağıtılmalı. Node.js ya da Bun’ı içine gömen masaüstü araçları ve tek dosyalık çalıştırılabilirler için de aynı kural geçerli.
Hemen yama yapamayanlar için Patch the Planet’in önerisi, güvenilmeyen kaynaklardan gelen Brotli verisinin açılmasını geçici olarak kapatmak. Bu, gzip veya deflate gibi diğer sıkıştırma türlerini kapatmayı gerektirmiyor. Gelen isteklerde Content-Encoding: br başlığı taşıyan gövdeler, herhangi bir ara katman veya proxy açmadan önce reddedilmeli. HTTP istemcilerinde otomatik Brotli açma devre dışı bırakılmalı; bildirimde, istemcinin Accept-Encoding başlığından br’yi çıkarmanın tek başına yeterli olmadığı, çünkü sunucunun yine de Brotli gönderebileceği vurgulanıyor. CDN veya web sunucusunda Brotli ile yanıt sıkıştırmayı kapatmak ise istek tarafındaki ve istemci tarafındaki açma işlemini durdurmuyor.
Türkiye açısından ne anlama geliyor?
Türkiye’de e-ticaret altyapıları, fintech API’leri, kamu ve belediye portallarının arka uçları ile ajans işi web projelerinde Node.js ve .NET çok yaygın. Bunların önemli bir kısmı Docker imajlarıyla, bazen aylarca güncellenmeyen temel imajlar üzerinde çalışıyor. Node2Shell bu yüzden “sunucuda apt upgrade yaptık” denerek kapatılabilecek bir açık değil; imaj etiketlerinin, CI/CD hatlarındaki sabitlenmiş sürümlerin ve müşteriye teslim edilmiş eski projelerin tek tek gözden geçirilmesi gerekiyor.
Özellikle dikkat edilmesi gereken yerler, dış sistemlerden veri çeken servisler: banka ve ödeme kuruluşu entegrasyonları, kargo ve pazar yeri API’leriyle konuşan arka plan işçileri, web kazıma (scraping) yapan araçlar ve kullanıcıdan sıkıştırılmış dosya kabul eden yükleme servisleri. Bu servislerde Brotli açma varsayılan olarak açık olabilir ve geliştirici bunun farkında olmayabilir.
Ayrıca bir açığın kişisel veri sızıntısına dönüşmesi hâlinde Kişisel Verileri Koruma Kanunu (KVKK) kapsamındaki ihlal bildirimi yükümlülüğü de devreye girebilir. Bellek içeriğinin sızması, oturum anahtarları veya kişisel veriler gibi bilgilerin açığa çıkması anlamına gelebileceğinden, kurumların bu açığı yalnızca bir “yazılım güncellemesi” değil, olay müdahale planının parçası olarak ele alması daha doğru olur.
Son olarak bu vaka, yapay zekâ destekli güvenlik araştırmasının açık kaynak dünyasındaki etkisini de gösteriyor. Geçen hafta ele aldığımız PHP2Shell açığı gibi, bu da çok yaygın bir temel bileşende bulunup kısa sürede onlarca projeye yayılan bir yama dalgasına dönüştü. Bu tür bulguların sıklaşması, kurumların bağımlılık envanterini güncel tutmasını ve “hangi yazılımımız bu kütüphaneyi içeriyor?” sorusuna dakikalar içinde yanıt verebilmesini artık zorunlu hâle getiriyor.
Kısa kontrol listesi
- Envanter çıkarın: Node.js, Bun, .NET, PowerShell, Python Brotli/brotlicffi, Envoy ve Istio kullanan tüm servisleri listeleyin.
- Güncelleyin ve yeniden başlatın: Yukarıdaki sürümlere geçin; servisleri, işçileri ve zamanlanmış görevleri yeniden başlatın.
- İmajları yeniden derleyin: Konteyner imajlarını yamalı temel imaj üzerinde yeniden oluşturun; self-contained .NET uygulamalarını yeniden yayımlayın.
- Geçici önlem alın: Yama hemen mümkün değilse güvenilmeyen kaynaklardan gelen Brotli verisinin açılmasını kapatın.
- Doğrulayın: Çalışan sürecin gerçekten yeni sürümü kullandığını kontrol edin; örneğin .NET için
dotnet --list-runtimes, Node.js içinnode -v.