Zafiyet / Web Güvenliği
Görsel Kaynağı: The Hacker News
Google‘ın Brotli kodlayıcısındaki bellek bozucu zafiyet, Brotli ile sıkıştırılmış veriyi açan birçok programda yer alıyor; bunlar arasında Bun, Microsoft‘un .NET’i, Python’un Brotli ve brotlicffi paketleri ve Brotli’yi çözmek için yapılandırılmış Envoy vekil sunucuları bulunuyor.

CVE-2026-111497 numaralı olarak izlenen zafiyet, özenle hazırlanmış sıkıştırılmış verinin bir tamponun sonundan fazlasını aşarak programın belleğini bozmasına yol açabiliyor; bu da çökmeye, bellek sızıntısına veya saldırganın kontrolündeki kodun çalıştırılmasına neden olabilir.
Imperva araştırmacıları, kodun yamalanmamış bir Node.js derlemesi üzerinde çalıştırılabileceğini gösterdi. Aynı şey diğer yazılımlarda kanıtlanmadı ve gerçek dünyada gerçekleştirilen bir saldırı bildirilmedi.
Zafiyet ilk olarak 21 Ekim’de açıklandı; bu tarihte Node.js ve Google düzeltmeleri yayımladı ve o günden beri ürün ürün yeni düzeltmeler takip etti. Hata, Google’ın kodlayıcısında bulunduğu ve her programın kendi kopyasını dahil ettiği için, her biri kendi kopyasını güncellemek zorunda.
Brotli, Google’a ait bir sıkıştırma biçimi olup web genelinde sayfaları ve diğer trafiği küçültmek için kullanılıyor. Hata, bir Brotli akışını açan C kodunda yer aldığı için dil çalışma zamanlarından vekil sunuculara ve Python paketlerine kadar bu kodu kullanan her şeye sızmış oluyor.
Hangi Yazılımlar Etkileniyor
| Ürün | Etkilenen | Düzeltilen sürüm | Etkin olduğu durum |
|---|---|---|---|
| 1.0.3 ile 1.2.0 arası | 1.0.10, 1.1.1, 1.2.1 | kodlanmayan güvensiz Brotli’nin kodunun çözülmesi | |
| 22.x, 24.x, 26.x düzeltmeye kadar; 20.x ve daha eskileri (kullanım ömrü sona ermiş) | 22.23.4, 24.22.1, 26.12.1 | br yanıtının fetch() ile okunması veya Express veya body-parser’ın br gövde yüklemelerinin açılması | |
| 1.4.3 ve önceki sürümler | 1.4.4 | br yanıtının fetch() ile okunması veya node:zlib | |
| 8.0, 9.0, 10.0 düzeltmeye kadar, 11.0 önizlemeleri RC3’e kadar | 8.0.33, 9.0.22, 10.0.14, 11.0 RC3 | yalnızca ASP.NET Core istek sıkıştırmanın geri alınmasında veya HttpClient sıkıştırmanın geri alınmasında Brotli etkinleştirildiğinde veya Brotli API’leri güvensiz verinin kodunu çözdüğünde | |
| 1.39.2, 1.38.5, 1.37.7, 1.36.11 | 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12 | yalnızca Brotli sıkıştırmanın geri alınanı yapılandırıldığında | |
| 1.31.0 ile 1.31.1, 1.30.0 ile 1.30.5, 1.29.0 ile 1.29.8 | 1.31.2, 1.30.6, 1.29.9 | yalnızca Brotli sıkıştırmanın geri alınanı etkinleştirildiğinde | |
| 1.2.0 ve önceki sürümler | 1.2.1 | kuruludur ve bir HTTP istemcisi br kodunu çözer | |
| 1.2.0.x ve önceki sürümler | 1.2.1.0 | kuruludur ve bir HTTP istemcisi br kodunu çözer | |
| bağımsız ikili dosyalar ve görüntüler, 13.4.0 ve 12.8.8 ve önceki sürümler | 13.5.0, 12.8.9 | bağımsız ikili dosya veya görüntü güvensiz girdi taraması |
Bir program yalnızca başkasının kontrol ettiği Brotli verisinin kodunu çözdüğünde etkilenir. Node.js ve Bun için bu durum, yerleşik fetch()’nın Content-Encoding: br ile gönderilen bir yanıtı okuduğunda veya Express 5 ve body-parser 2 gibi istek gövdesi kodunun bir Brotli yüklemesini açtığında gerçekleşir. Sıradan bir Node.js HTTP sunucusu istek gövdelerini kendi başına kodlamaz.
Envoy ve Istio yalnızca Brotli sıkıştırmanın geri alınanı, örneğin bir Envoy filtresi aracılığıyla etkinleştirildiğinde etkilenir. Kapalı olduğu yerde hata erişilemez.
Python’daki risk, Brotli veya brotlicffi paketinin kurulu olmasından kaynaklanıyor. Bu paketlerden biri kurulduğunda, requests, urllib3, httpx ve aiohttp gibi HTTP istemcileri Brotli yanıtlarını kendi başlarına çözümler; böylece bir uygulama, kendi kodunda hiçbir zaman Brotli import etmese bile açık hale gelebilir.
Bir web uygulaması güvenlik duvarı yalnızca belirli bir noktaya kadar yardımcı olur. Açıklama günü güvenlik duvarı kurallarını ekleyen Vercel, bu kuralların “fonksiyonlarınızın diğer sunuculardan çektiği yanıtları” kapsamadığını belirtti. Bu yol için yalnızca çalışma ortamının veya kütüphanenin güncellenmesi açığı kapatır.
Açığın ne kadar ileriye itilebileceği yazılıma bağlıdır. Imperva’nın Red Team’i, çalışmalarına Node2Shell adını veren ekip, değiştirilmemiş bir Node.js 24.22.0 Linux ARM64 derlemesi üzerinde saldırgan tarafından sağlanan kodu çalıştırarak bunu hem bir çekilen yanıt hem de bir Express istek gövdesi olarak iletti. Sömürü birkaç deneme gerektirdi, yayınlanmadı ve diğer derlemelerde test edilmedi.
Açığı raporlayan OpenAI’nin Codex Security ekibi, açığın kimlik doğrulamasız uzak kod çalıştırmasına olanak verdiğini belirtiyor ve etkilenen yazılımlar olarak Node.js, Bun ve Envoy’u listeliyor. Hesaplamalarında açık iki yönlü çalışıyor:
sıkıştırılmış girişi kabul eden yamalanmamış bir sunucu, kötü niyetli bir istemci tarafından ele geçirilebilir; sıkıştırılmış girişi kabul eden (örneğin “curl –compressed”) yamalanmamış bir istemci ise kötü niyetli bir sunucu tarafından ele geçirilebilir.
Gerçek dünyada sömürüldüğüne dair bir bildirim yapılmadı. CISA’ın 23 Ekim değerlendirmesi sömürüyü “yok”, otomasyonu ise “hayır” olarak kaydetti ve Red Hat, kod çalıştırmak için güvenilir bir halka açık proof-of-concept olmadığını belirtti.
Ciddiyet derecelendirmeleri değerlendiren tarafa göre değişiyor. CVE’yi atayan Google, CVSS 4.0 ölçeğinde bunu 9.2 ile kritik olarak derecelendiriyor. Node.js bunu yüksek, Red Hat ise 8.1 ile önemli olarak derecelendiriyor. Microsoft .NET için bunu 8.1 ile yüksek olarak puanlıyor.
Düzeltme, alışıldık olmayan bir tarihe sahip. Açığı kapatıcı değişiklik, 27 Şubat’ta Brotli’nin kaynak koduna eklenmiş ancak bu değişikliği içeren yeni bir Brotli sürümü 21 Ekim’e kadar yayımlanmamıştı. OpenAI, kök nedenin “aslında Şubat ayında Brotli kaynak kodunda düzeltildiğini, ancak o sırada güvenlik açısına yol açtığı bilinmediğini ve Brotli’nin daha yeni bir sürümünün bulunmadığını” belirtti.
Node.js, açığı raporlayanlar olarak OpenAI’nin Codex Güvenliği ekibinden Khai Tran ve Sylvie Mayer’i; düzeltme için ise bakımcılar Matteo Collina ve Antoine du Hamel’i ödüllendirdi.
Şimdi Ne Yapmalı
Yukarıdaki tablodan düzeltilmiş bir sürüme güncelleyin, ardından hizmeti yeniden başlatın ve herhangi bir konteyner görüntüsünü yeniden oluşturun, çünkü çalışan bir süreç eski kodlayıcıyı yeniden başlatana kadar korur.
Güncelleme yapamadığınız yerlerde, güvensiz Brotli kodunu çözmeyi bırakın. OpenAI’nin açıklama sayfası ve güvenlik firması Aikido aşağıdakileri öneriyor:
- Gövde herhangi bir vekil sunucu veya ayrıştırıcı tarafından çözülmeden önce, gelen isteklerde Content-Encoding: br başlığını reddedin.
- İstemcilerde otomatik Brotli kodunu çözmeyi kapatın ve Brotli yanıtlarını çözülmeden önce reddedin.
- Python’da, istemcilerin gzip ve deflate’a dönmesi için Brotli ve brotlicffi paketlerini kaldırın.
Accept-Encoding başlığından br silmek tek başına işe yaramaz, çünkü bir sunucu istemcinin ne istediğini yapmasına göre Brotli gönderebilir. Node.js için yayımlanmış bir geçici çözüm olmadığından, tek düzeltme çalışma ortamını güncellemektir.
Sistem paketleri farklı zamanlarda düzeltiliyor. Debian, 23 Ekim’de Debian 13 (trixie) için brotli paketini 1.1.0-2+deb13u1 sürümünde; daha sonra ise Debian 12 (bookworm) için 1.0.9-2+deb12u1 sürümünde düzeltti. Amazon Linux 2023, 22 Ekim’de brotli ve Node.js 24 paketlerini düzeltme bekleyen olarak listelemişti ve 24 Ekim’de her ikisini de düzeltilmiş sürümlerle yayımladı. openSUSE Tumbleweed, brotli ve Node.js 24 paketlerini düzeltti; SUSE’nin SUSE Linux Enterprise 15 için Node.js 22 güncellemeleri ise 26 Ekim itibarıyla hâlâ test aşamasındaydı. Ubuntu, brotli ve nodejs paketlerini tüm listelenmiş sürümlerinde değerlendirme gerektiren olarak göstermeye devam etti.
Bağımlılık tarayıcıları henüz Python paketlerini işaretlemiyor olabilir. CVE kaydı, PyPI paketleri yerine Google’ın Brotli depo adını içeriyor ve GitHub’ın uyarısı hâlâ etkilenen bir paketi listelemiyor; Dependabot da bunu okuyor. İki Python paketi için eklenen PYSEC-2026-4322 ve PYSEC-2026-4323 uyarısı girişleri 23 Ekim’de eklendiği için kurulu sürümleri de manuel olarak kontrol etmek gerekiyor.
Güncelleme: Daha Fazla Düzeltme Gelirken Microsoft .NET’i Yamaşıyor
Microsoft, 25 Ekim’de .NET 8, .NET 9 ve .NET 10’daki açığı düzelten, ayrıca .NET 11 Release Candidate 3’ü kapsayan yama dışı güncellemeler yayımladı. Düzeltilen çalışma zamanları 8.0.33, 9.0.22 ve 10.0.14 olurken, Microsoft’un uyarısı .NET Framework’ün etkilenmediğini belirtiyor.
Bir .NET uygulaması yalnızca, saldırganın kontrol ettiği Brotli verisini çözümlediğinde maruz kalır. Bu durum, ASP.NET Core istek çözümlemesinde veya HttpClient otomatik yanıt çözümlemesinde Brotli’yi açtığında gerçekleşir; bunların ikisi de varsayılan olarak kapalıdır ya da güvensiz veriyi BrotliStream ve BrotliDecoder gibi Brotli API’larına ilettiğinde ortaya çıkar. Microsoft, etkilenen bir paketin kurulu olmasının uygulamanın başlı başına maruz kalmasına yol açmadığını söylüyor.
Microsoft, hatanın kimlik doğrulaması yapılmamış bir saldırganın işlem belleğini okumasına veya bozmasına yol açabileceğini; bunun bilgi ifşası, hizmet reddi veya ayrıcalık yükseltmesine yol açabileceğini belirtiyor. Uyarısı, uzak kod yürütme sonucunu sonuçlar arasında listelemiyor.
Paylaşılan çalışma zamanını kullanan uygulamalar için güncellenmiş çalışma zamanının kurulması ve yeniden başlatılması yeterlidir. Kendi kendine dahil uygulamalar ve NativeAOT uygulamaları yeniden derlenip yeniden yayımlanmalıdır, çünkü çözümleyici çalıştırılabilir dosyaya bağlanmıştır. Konteyner görüntüleri ise güncellenmiş .NET görüntülerinden yeniden derlenmelidir.
Bir uygulamanın güncellenemediği durumlarda Microsoft, mevcut bir istek çözümleme kurulumundan br sağlayıcısını kaldırmayı ve mevcut bir HttpClient işlecinden DecompressionMethods.Brotli’yi düşürmeyi tavsiye ediyor. Zaten kullanılmayan bir uygulamaya çözümleme eklemekten kaçınılması gerektiğini uyarıyor, çünkü bu yeni hizmet reddi riskleri oluşturabilir.
Aynı sürüm, bazı Linux .NET tarball’larında hatalı dosya sahipliğinin yerel bir saldırganın daha yüksek ayrıcalıklar kazanmasına olanak tanıyan, alakasız bir kusur olan CVE-2026-114148’i de düzeltiyor.
Ruby için brotli gem’i, kusuru 24 Ekim’de 0.9.1 sürümünde düzeltti. Brotli 1.2.1’i paketliyor vezeltmeyi içermeyen bir sistem Brotli kütüphanesini görmezden gelip bunun yerine kendi kopyasını kullanıyor.
Cloudflare, 25 Ekim’de kusur için yönetilen güvenlik duvarı kural setine iki kural ekledi; bunlar arasında Content-Encoding: br ile gönderilen gelen isteklerle eşleşen bir kural da vardı. İkisi de varsayılan olarak yalnızca eşleşen trafiği günlüğe kaydeder ve müşteri eylemini değiştirmediği sürece hiçbir şeyi engellemez.
Güncelleme: JFrog, Kusuru FFmpeg, ClickHouse ve Apache Arrow’da Buluyor
JFrog araştırmacıları 25 Ekim’de kusurun FFmpeg, ClickHouse ve Apache Arrow’u da etkilediğini ve bu yolların bazılarının bir web isteği yerine bir dosya ile başladığını bildirdi. Ağ kenarında Content-Encoding: br reddetmek, bu dosya yollarını kapsamaz.
FFmpeg’de yol, JPEG XL dosyasının içinde sıkıştırılmış metadata’yı açmak için Brotli kullanan libjxl üzerinden ilerliyor. Uyarlanmış bir görüntü, JFrog’un programın sonraki kodun çalışmasını belirleyen işaretleyiciye (instruction pointer) sahip olmasını sağladı; ancak JFrog bunun kod yürütme haline getirilmesinin daha fazla emek gerektireceğini belirtti. JFrog, FFmpeg’e özgü birzeltme bildirmedi. Kusur, libjxl’in kullandığı Brotli kütüphanesinde oturuyor, dolayısıyla bu kütüphaneninzeltmeli bir kopyası bu yolu kapatıyor.
Açık kaynaklı veritabanı ClickHouse,zeltmeyi düzelten çekme isteğine (pull request) göre, Content-Encoding: br ile gönderilen HTTP istek gövdesinde, .br dosyalarında ve Parquet veriinde Brotli’yi çözümliyor. JFrog, yaklaşık 23 MB’lık tek bir uyarlanmış istekle bir ClickHouse sunucusunu çökertti; bu bir hizmet dışı bırakma (denial of service) saldırısıydı ve kod yürütme iddia etmedi. JFrog, yayımladığı andazeltmeli bir sürüm yayınlanmadığını belirtti ve ClickHouse’un paketlediği Brotli’yi 1.2.1’e taşıyan bir backport, 26.9 dalına 26 Ekim’de birleştirildi.
Apache Arrow’ın C++ kütüphanesi, kendi derlemeleri için Brotli 1.0.9’u paketliyor; proje izleyicisindeki açık bir soruna göre bu durumun 26 Ekim itibarıyla bağlantılı bir düzeltme veya bakımcı yanıtı yoktu. Soru, Brotli ile sıkıştırılmış veri içeren bir Parquet veya Arrow IPC dosyasının okunmasının bu hataya yol açabileceğini ve yama sistem Brotli’si bağlantısı yapılan derlemelerin etkilenmediğini belirtiyor. Python paketi pyarrow’da JFrog, 534 baytlık bir girdinin Brotli açılımını CPU’yu meşgul eden, çökmeye değil hizmet dışı bırakmaya yönelik sonsuz bir döngüye soktuğunu tespit etti.
JFrog aynı zamanda .NET test programını Brotli arayüzleri üzerinden çökertti; bu, Microsoft’un 25 Ekim güncellemelerinin düzelttiği yol.
(Haber, yayımından sonra 26 Ekim’de güncellendi; Microsoft’un .NET düzeltmeleri, JFrog’un diğer etkilenen yazılımlar üzerine araştırmaları, Ruby gem düzeltmesi, Cloudflare’ın güvenlik duvarı kuralları ve yeni Linux dağıtım paketleri eklendi.)
Açık Kaynak Güvenliği
Bu Gelişmeyi Toplulukta Değerlendirin
Haber hakkındaki düşüncelerinizi, donanım deneyimlerinizi ve teknik sorularınızı topluluk üyeleriyle anlık olarak tartışın.
Bu gelişme hakkında düşüncelerinizi, donanım deneyimlerinizi veya sorularınızı Topluluk Forumumuzda paylaşın.
Foruma Katıl & Yanıtla ➔




Söz sizde.
Deneyiminizi, sorularınızı ve katkılarınızı paylaşın. E-posta adresiniz yayımlanmaz.