deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

Brotli çözücüsündeki CVE-2026-111497 açığı Node.js ve Python uygulamalarını uzaktan kod çalıştırmaya maruz bırakıyor

Bozuk bir Brotli akışı, referans C çözücüde belleğin üzerine yazabiliyor ve birçok HTTP istemcisi bu tür yanıtları otomatik olarak açıyor. Node.js, Python paketleri ve onlarca gömülü kopya etkileniyor.

Brotli çözücüsündeki CVE-2026-111497 açığı Node.js ve Python uygulamalarını uzaktan kod çalıştırmaya maruz bırakıyor

Ne oldu

Google'ın Brotli sıkıştırma biçiminin referans C uygulamasındaki CVE-2026-111497 olarak takip edilen bir açık, kötü niyetle hazırlanmış bir sıkıştırılmış akışın çözücü içindeki belleğin üzerine yazmasına izin veriyor. broccoli2shell.com'da yayımlanan duyuruya göre bozulma bir bellek sızıntısına veya kod çalıştırmaya yol açabiliyor ve etki alanı alışılmadık ölçüde geniş: hata yalnızca açıkça dosya açan kodla sınırlı değil, çünkü birçok HTTP istemcisi Brotli ile sıkıştırılmış yanıtları kendiliğinden açıyor. Bir uygulamanın veri çektiği herhangi bir sunucu, yükü teslim edebilir.

Açık nasıl çalışıyor

Brotli akışları bloklara bölünür ve çözücü bunları okurken blok türleri arasında geçiş yapar. Düzeltmeden önce c/dec/decode.c içindeki DecodeBlockTypeAndLength() yalın bir boolean döndürüyordu; bu yüzden çağıranlar bozuk bir akışı yalnızca daha fazla girdi bekleyen akıştan ayırt edemiyordu ve hızlı yolda dönüş değeri tamamen yok sayılıyordu. Hazırlanmış bir akış, meşru biçimde asla gerçekleşemeyecek bir blok geçişi isteyebiliyor; çözücü bunu ek veri isteği olarak yorumluyordu ve saldırgan denetimindeki baytları sekiz baytlık bir iç tampona eklemeye devam ederek tamponun sonunu aşıyor ve yakındaki çözücü durumunu bozuyordu. google/brotli commit 0ed4268 ve ona eşlik eden üç commit ile sabitlenen yukarı akış onarımı, bu durumu katı bir biçim hatasına, BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH (−17) değerine dönüştürüyor. Sorun CWE-252 (denetlenmemiş dönüş değeri) ile CWE-787 (sınır dışına yazma) birleşimi olarak sınıflandırıldı.

Kimler risk altında

Duyuru maruz kalmayı üç örüntüde grupluyor:

  • HTTP yanıtlarının otomatik açılması. Node.js'nin yerleşik fetch() işlevi Content-Encoding: br yanıtlarını kendisi çözüyor ve Python tarafında urllib3 (dolayısıyla requests), aiohttp ve httpx, bir Brotli paketi kurulu olduğu sürece aynısını yapıyor — uygulama onu hiç içe aktarmasa bile. Scrapy ve diğer tarayıcılar da bu bağımlılığı çekebilir. Webhook'lar, bağlantı önizlemeleri ve URL'den içe aktarma özellikleri hep olası giriş noktalarıdır.
  • İstek gövdelerinin açılması. Express 5.0.0–5.3.0 ve body-parser 2.0.0–2.3.0, raw() ve json() gibi çözücülerde Brotli ile sıkıştırılmış istek gövdelerini açıyor. Duyuru, iki projenin de hatayı içermediğini vurguluyor — onlar yalnızca hataya giden yollar, bu yüzden bunları yükseltmek hiçbir şeyi düzeltmiyor.
  • Arşivler, önbellekler veya kuyruk iletileri üzerinde zlib.brotliDecompress*(), createBrotliDecompress() ve brotli.decompress() dahil doğrudan çözücü çağrıları.

Node.js kendi Brotli kopyasını içerdiğinden sistem libbrotli orada anlamsız; yamalanmış Node sürümleri 22.23.4, 24.22.1 ve 26.12.1 olup daha eski veya kullanım ömrü tamamlanmış hatlar etkileniyor. Gömülü sürümü node -p "process.versions.brotli" komutuyla yazdırabilirsiniz. Python tarafında PyPI'daki Brotli ve brotlicffi paketleri aynı C çözücüyü derliyor; dağıtım tarafından sağlanan bağlayıcılar dağıtımın güvenlik güncellemeleriyle yamalanıyor.

Tarayıcılar neden kaçırabilir

Açıklanma zamanında pip-audit, Dependabot ve Safety, etkilenen PyPI sürümlerini güvenilir biçimde işaretlemiyordu, çünkü CVE kaydı Python paketlerini değil Google'ın yukarı akış deposunu adlandırıyordu. GitHub'ın danışma kaydı artık iki paketi de listeliyor (PYSEC-2026-4322 ve PYSEC-2026-4323), ancak duyuru araçları beklemek yerine kurulumları elle doğrulamayı öneriyor.

Gömülü kopyaların uzun kuyruğu

Brotli 1.0.3'ten 1.2.0'a kadar bir sürümü teslim eden veya ona bağlanan her şey etkilenmiş olabilir. Açıklama, 25 Ekim 2026'da son kez yeniden denetlenen GitHub'daki gömülü kopyaların bir incelemesini içeriyor. Bir gün sonra hâlâ düzeltilmemiş olanlar: .NET runtime (BrotliDecoder, BrotliStream ve HttpClient otomatik açma yoluyla; Microsoft bir yanıt üzerinde çalıştığını doğruladı), DuckDB ile Apache Arrow'un gömülü derlemesi (Brotli ile sıkıştırılmış Parquet dosyaları yoluyla), v8-jsi, 7-Zip-zstd, p7zip, EDK II'nin sıkıştırılmış donanım yazılımı bölümleri ve woff2'nin Makefile derlemesi. Ruby'nin brotli gem'i, PHP'nin brotli eklentisi ve UEFITool 24 Ekim'de düzeltilmiş sürümler yayımladı; ClickHouse, NanaZip, GraalJS, YDB ve libjxl ise düzeltmeyi main dalında birleştirmiş durumda ama çoğu durumda henüz etiketlenmiş bir sürümde değil. Node.js, Bun, Chromium, Firefox, brotlicffi ve diğerleri denetimden önce zaten yamalanmıştı. Diğer dillerde yeniden yazılan çözücüler daha iyi durumda: Java, JavaScript ve C# portları hataya erişemiyor, Go portunda aynı mantık hatası vardı ama yalnızca çökebiliyordu ve Rust'ın brotli-decompressor'u bir hata döndürüyor. Kod çalıştırma yalnızca C çözücüde mümkün.

Neden önemli

Bu, olağan dışı hiçbir ön koşul gerektirmeyen, sıradan HTTP üzerinden erişilebilen bir bellek bozulması hatası: istemcinin hangi sunucudan veri çektiğini belirleyen, açılan baytları da denetliyor. Duyurunun pratik önerisi Node.js'yi yamalanmış bir sürüme güncellemek, varsa Brotli bağımlılığını 1.0.10, 1.1.1 veya 1.2.1'e taşımak (ya da commit 0ed4268'i cherry-pick etmek) ve bağımlılık tarayıcılarının düzenli olarak gözden kaçırdığı gömülü kopyaları araştırmaktır. C çözücüyü paketleyen projelerin bakımcıları için yeni BLOCK_SWITCH hata kodunun varlığı, bir kopyanın düzeltilmiş olduğunun işaretidir.

  • #security
  • #node-js
  • #python
  • #brotli
  • #vulnerability

İlgili yazılar