Selamlar,
Node2Shell olarak duyulan CVE-2026-111497 için çoğu kişi "Node.js'i güncelledim, bitti" diye düşündü. Oysa açık Node.js'in kendi kodunda değil, Google'ın Brotli sıkıştırma kütüphanesinin decoder kısmında. Bu kütüphaneyi kendi içinde taşıyan her yazılımın ayrıca güncellenmesi gerekiyor. The Hacker News, Bun, Python Brotli/brotlicffi paketleri ve Envoy'un da etkilendiğini duyurdu. Burada hangi sürüme geçmeniz gerektiğini ve sistemde etkilenen kopyaları nasıl bulacağınızı topluyorum.
Konuda anlatılacaklar
- Açık nedir, neden bu kadar yaygın?
- Brotli kütüphanesinin düzeltilmiş sürümleri
- Bun: fetch bile tetikleyebilir
- Python: requests/urllib3 ve brotlicffi
- Envoy ve Istio
- Sunucunuzda kontrol komutları
1. Açık nedir?
NVD kaydına göre sorun, Brotli decoder'ında (c/dec/decode.c) bir tampon taşması. Özel hazırlanmış bir Brotli akışı, kimlik doğrulaması olmayan uzak bir saldırganın decoder durum belleğini bozmasına, bellek içeriği sızdırmasına, servisi çökertmesine veya potansiyel olarak kod çalıştırmasına yol açabiliyor. Zayıflık türleri: CWE-787 (sınır dışı yazma) ve CWE-252 (dönüş değerinin kontrol edilmemesi). Upstream puanı CVSS 4.0: 9.2.
Önemli bağlam:
- The Hacker News'e göre açık, OpenAI'nin kırmızı takım kampanyası sırasında bulundu.
- Imperva, resmi bir Node.js derlemesinde kod çalıştırmayı gösterdi. Diğer yazılımlarda bu henüz gösterilmedi ve gerçek dünyada saldırı raporu yok.
- Brotli HTTP'de Content-Encoding: br olarak her yerde kullanıldığı için, sıkıştırılmış veriyi açan istemci ve sunucular saldırı yüzeyinde.
2. Düzeltilmiş Brotli sürümleri
NVD: etkilenen aralık 1.0.3 ile 1.2.0 arası. Güncel düzeltilmiş sürümler:
Brotli 1.0.x -> 1.0.10
Brotli 1.1.x -> 1.1.1
Brotli 1.2.x -> 1.2.13. Bun
Bun güvenlik bildirimi (GHSA-663w-cv8g-jj2p):
- Etkilenen: 1.0.21 ile 1.4.4 öncesi. Düzeltilmiş: 1.4.4 (Brotli 1.2.1 ile geliyor).
- Tetikleyen API'ler: fetch (varsayılan olarak Accept-Encoding içinde br gönderir ve yanıtı otomatik açar), node:zlib içindeki brotliDecompress türevleri ve brotli formatlı DecompressionStream.
- Yani bağlandığınız kötü niyetli bir sunucu veya şifresiz bağlantıda araya giren biri decoder'a veri gönderebilir.
- bun build --compile ile üretilmiş tek dosyalık yürütülebilirler, yeniden derlenene kadar etkilenmiş kalır.
bun --version
bun upgrade
bun build --compile ./src/index.ts --outfile mytool4. Python
PyPA danışma kaydı (PYSEC-2026-4323) iki paketi kapsıyor:
- Brotli (Google'ın CPython bağlaması): 1.2.0 dahil tüm sürümler etkileniyor, düzeltme 1.2.1.
- brotlicffi: düzeltme 1.2.1.0 (21 Ekim 2026).
pip show brotli brotlicffi 2>/dev/null | grep -E "Name|Version"
pip install -U "brotli>=1.2.1" "brotlicffi>=1.2.1.0"
pip-audit | grep -i brotli5. Envoy ve Istio
Envoy bildirimi (GHSA-3wvj-j6qm-62mr, Critical 9.2):
Etkilenen : v1.39.2, v1.38.5, v1.37.7, v1.36.11
Düzeltilmiş: v1.40.0, v1.39.3, v1.38.6, v1.37.8, v1.36.12envoy --version
grep -rn "envoy.compression.brotli.decompressor" /etc/envoy/ 2>/dev/null6. Sunucunuzda etkilenen kopyaları bulmak
Brotli birçok yazılımın içine gömülü geldiği için tek bir komut her şeyi bulmaz:
dpkg -l | grep -i brotli # Debian/Ubuntu
rpm -qa | grep -i brotli # RHEL/Fedora
sudo lsof 2>/dev/null | grep -i libbrotlidec | awk '{print $1}' | sort -u
node -v ; bun --version 2>/dev/nullSonuç
Bu açık, tedarik zincirinde "tek kütüphane, yüzlerce kopya" sorununun tipik örneği. Node.js'i güncellemek yetmiyor; Bun, Python ortamları, Envoy/Istio ve gömülü kopyaları da tek tek kapatmak gerekiyor. Siz ortamınızda Brotli'yi nerelerde buldunuz?
Yasal uyarı
Bu yazı bilgilendirme ve savunma amaçlıdır. Anlatılan kontrolleri yalnızca kendi sistemlerinizde veya yazılı izinle yapın. İzinsiz erişim, tarama ve sömürü girişimleri TCK 243-245 kapsamında suçtur. TurkTeam white-hat bir topluluktur; çalıntı veri, hesap, combo/log paylaşımı ve hack hizmeti talepleri forum kurallarına aykırıdır.
Kaynaklar
