Brotli veri sıkıştırma kod çözücüsünün referans uygulamasını içeren kütüphanede bir güvenlik açığı (CVE-2026-111497, kod adları Broccoli2Shell ve HTTP2Shell) tespit edildi. Bu güvenlik açığı, özel olarak hazırlanmış sıkıştırılmış verilerin işlenmesi sırasında arabellek taşmasına yol açmaktadır. Google'a göre, bu güvenlik açığı, resmi Brotli kod çözücü uygulamasını kullanan projelere saldırırken uzaktan kod yürütme için kullanılabilir. Etkilenen projeler arasında Node.js, Bun, Envoy, Istio, web tarayıcıları, proxy sunucuları, HTTP istemcileri, HTTP sunucuları, arşivleyiciler, proxy sunucuları, UEFI bellenimi, JPEG XL görüntüleyiciler, Python, Ruby, Java, PHP ve .NET için içerik kod çözme kütüphaneleri ve bunların ilgili bağımlılıkları yer almaktadır.
Sorun, bu yılın Şubat ayında OpenAI tarafından keşfedildi ve kod çözme sırasında geçersiz akışların atılmasıyla Brotli kod tabanında engellendi. 22 Ekim'de, düzeltmeyi açıkça duyuran ve altta yatan sorunu ele alan Brotli 1.0.10, 1.1.1 ve 1.2.1 yama sürümleri yayınlandı. Aynı gün, standart olmayan derlemeler kullanılarak laboratuvar koşullarında uzaktan kod yürütülmesine izin veren bir prototip güvenlik açığı oluşturuldu (standart derlemeler çökerdi). Imperva daha sonra standart Node.js 24.22.0 derlemelerine yönelik bir saldırı tespit etti. Linux- ARM64 sistemindeki ortam.
Bu güvenlik açığı, sıkıştırılmış bir akışta blok ayrıştırma sırasında uygunsuz hata işleme nedeniyle arabellek sınırlarının dışına yazmaya neden olur. DecodeBlockTypeAndLength() fonksiyonu, hata kodu yerine yalnızca true ve false değerleri döndürdüğü için, çağıranın akış bozulması ile fonksiyona ek veri geçirilmesini gerektiren bir durum arasında ayrım yapmasını engellemektedir. Akışta yanlış bir sıkıştırılmış veri bloğu türü belirtilmişse, kod çözücü bunu bir hata olarak değil, akıştan ek okuma gerektiren bir veri yetersizliği durumu olarak yorumlamıştır. Ancak, ayrılan arabellek ek veri okumayı karşılayacak şekilde tasarlanmadığından, veriler kod çözücünün iç durumunu depolayan arabelleğin dışındaki bir alana yazılmıştır.
Etkilenen projeler:
- 1.0.3 sürümünden beri mevcut olan ve 1.0.10, 1.1.1 ve 1.2.1 güncellemelerinde düzeltilen Brotli referans kütüphanesi sorunu, libbrotlidec kütüphanesini kullanan uygulamaları ve kütüphaneleri etkiliyor.
- Node.js JavaScript platformu, 26.12.1, 24.22.1 ve 22.23.4 güncellemelerinde yamalandı. Üçüncü taraf içeriği istemek için `fetch()` yöntemini kullanan ve `"Content-Encoding: br"` başlığına sahip HTTP yanıtlarını otomatik olarak çözen uygulamalar savunmasız olabilir. Güvenlik açığı ayrıca, üçüncü taraf içeriği açmak için `zlib.brotliDecompress*()`, `createBrotliDecompress()` ve `brotli.decompress()` yöntemlerini doğrudan çağırırken veya Express 5 ve body-parser 2.x kütüphaneleri aracılığıyla ayrıştırılan HTTP isteklerini alırken de ortaya çıkar.
- Python paketleri brotli ve brotlicffi (1.2.1 sürümünde önerilen düzeltme) ve bunları kullanan projeler, popüler kütüphaneler urllib3, aiohttp, httpx ve Scrapy dahil olmak üzere, harici web kaynaklarına erişirken "Content-Encoding: br" başlığıyla gelen yanıtları çözüyor.
- Brotli sıkıştırmasını ("Accept-Encoding: br") destekleyen HTTP sunucuları, HTTP proxy'leri, HTTP istemcileri ve web tarayıcıları. Apache httpd, mod_brotli ile birlikte gelir (varsayılan olarak devre dışıdır). Nginx için üçüncü taraf bir modül olan ngx_brotli mevcuttur (bağımlılıklardaki brotli sürümü en son sürüme güncellenmiştir). Chrome/Chromium ve Firefox'ta sorun önceki bir güncellemede zaten düzeltilmiştir. Proxy'de-sunucu Envoy güvenlik açığı 1.40.0, 1.39.3, 1.38.6, 1.37.8 ve 1.36.12 sürümlerinde düzeltilmiştir.
- .NET çalışma zamanında, uygulamada BrotliDecoder, BrotliStream ve HttpClient yöntemleri kullanılırken ortaya çıkan bir güvenlik açığı bulunmaktadır. Bu güvenlik açığı henüz yamalanmamıştır.
- PHP brotli uzantısı, brotli_uncompress() fonksiyonu kullanılırken sorun yaşıyor. Düzeltme çalışmaları devam ediyor.
- Ruby paketi Brotli, Brotli.inflate yöntemi kullanılarak yapılan saldırılara karşı savunmasızdı. Bu güvenlik açığı henüz giderilmedi.
- Sıkıştırılmış Parquet dosyalarını içe aktarırken DuckDB ile ilgili bir sorun. Düzeltme çalışmaları devam ediyor.
- ClickHouse Veritabanı Yönetim Sistemi. Düzeltme işlemi devam ediyor.
- YDB Veritabanı Yönetim Sistemi. Güvenlik açığı henüz giderilmedi.
- Sıkıştırılmış Parquet dosyalarını içe aktarırken Apache Arrow ile ilgili bir sorun. Düzeltme çalışmaları devam ediyor.
- libjxl (JPEG XL meta veri sıkıştırması için Brotli kullanır).
Düzeltme işlemi hazırlanıyor. - NanaZip, 7-Zip-zstd ve p7zip arşivleme programları, .br dosyalarını açarken güvenlik açığına sahiptir. Bu güvenlik açığı hala mevcuttur.
- MuPDF. Güvenlik açığı henüz giderilmedi.
- EDK II ve UEFITool tabanlı, Brotli ile sıkıştırılmış UEFI bellenimi. EDK II ve UEFITool için bir düzeltme hazırlanmaktadır.
- Bun JavaScript çerçevesi. Güvenlik açığı 1.4.4 sürümünde düzeltildi.
- Istio, bir mikro hizmet yönetim platformudur. Güvenlik açığı 1.29.9, 1.30.6 ve 1.31.2 sürümlerinde giderilmiştir.
- curl ve libcurl'de, güvenlik açığı, bağımlılıklarda libbrotlidec'in savunmasız bir sürümünün bulunması durumunda ortaya çıkar.
- Web Open Font (WOFF) yazı tipi formatını kullanan ayrıştırıcılar.
Brotli. - Brotli4j, SumatraPDF, Ghostscript, CatBoost ve YTsaurus. Güvenlik açığı bir güncelleme ile düzeltildi.
Kaynak: opennet.ru
