Zafiyet.live Keşfet. Değerlendir. Düzelt. Doğrula.
  • Yama var
  • Son 7 gün
  • CWE-770

CVE-2026-111101

Bandit'te 1 baytlık parçalı HTTP/1.1 istek gövdeleri bellek kullanımını artırıyor

mtrudel bandit

Yüksek 8,7 CVSS 4.0
Yayımlandı
Güncellendi
26 Eki 2026
Açık yaşı
2 gün
Kaydı açan
EEF

ÖzetTürkçe

mtrudel bandit ürününün HTTP/1.1 parçalı (chunked) gövde okuyucusu, kimlik doğrulaması yapılmamış uzaktan bir saldırganın çok sayıda 1 baytlık parçadan oluşan bir istek gövdesi göndererek sunucunun belleğini ve işlemci (CPU) kaynağını tüketmesine olanak tanıyan, kaynak sınırlaması veya kısıtlama olmadan tahsis edilmesinden (Allocation of Resources Without Limits or Throttling) kaynaklanan bir zafiyet içeriyor.

lib/bandit/http1/socket.ex dosyasındaki parçalı okuyucu, IO.iodata_to_binary/1 bunları birleştirene kadar her parçayı kendi liste hücresi ve ikili (binary) terimi olarak tutuyor; parça sayısına ise hiçbir sınır konulmamış. read_body/2 fonksiyonunun :length seçeneği yalnızca veri baytlarını saydığı için, küçük parçalar yüklerinden çok daha fazla bellek maliyeti oluşturuyor: 48 MB'lık 1 baytlık parçalar tek bir işleyici sürecinin belleğini yaklaşık 500 MB'a çıkarmış ve yaklaşık 6 saniye CPU süresi harcatmış. Rotanın gövdeyi okuma gereksinimi yok, çünkü kalıcı (keep-alive) bağlantılarda ensure_completed/1 okunmamış gövdeleri aynı okuyucu üzerinden boşaltıyor.

Bu sorun bandit ürününün 0.1.0 sürümünden 1.14.0 sürümünden önceki sürümlerini etkiliyor.

Satıcının önerdiği geçici çözüm: 0.7.0 sürümünden itibaren, tüm istemcileri ve proxy'leri HTTP/2 kullanan bir sunucu, http_1_options: [enabled: false] ayarıyla HTTP/1'i devre dışı bırakabilir; böylece savunmasız parçalı gövde okuyucusu hiç çalışmaz.

Kaynaktaki açıklama (İngilizce)

Allocation of Resources Without Limits or Throttling vulnerability in the HTTP/1.1 chunked body reader of mtrudel bandit allows an unauthenticated remote attacker to exhaust server memory and CPU via a request body made of many 1-byte chunks.

The chunked reader in lib/bandit/http1/socket.ex keeps every chunk as its own list cell and binary term until IO.iodata_to_binary/1 joins them, and nothing limits the number of chunks. The :length option of read_body/2 counts only data bytes, so tiny chunks cost far more memory than their payload: 48 MB of 1-byte chunks grew one handler process to about 500 MB and took about 6 s of CPU. The route does not need to read the body, because on keep-alive connections ensure_completed/1 drains unread bodies through the same reader.

This issue affects bandit: from 0.1.0 before 1.14.0.

Üreticinin geçici önlemi (İngilizce)

From 0.7.0, a server whose clients and proxies all speak HTTP/2 can disable HTTP/1 with http_1_options: [enabled: false], so that the vulnerable chunked body reader never runs.

Bu açığın açıklamasını Türkçeye çevirdik. Adım adım çözüm önerilerini kritik ve yeni açıklar için hazırlıyoruz; düzeltilmiş sürüm aşağıdaki tabloda, ayrıntılar üreticinin duyurusunda.

Etkilenen sürümler1 yazılım

YazılımEtkilenenDüzeltildiği sürüm
mtrudel bandit ≥ 0.1.0, < 1.14.0 1.14.0

Kaynaklar7 kaynak

Kayıt geçmişi

  1. Yayımlandı

İlgili açıklar

Türkçe metin, resmi kayıtlardaki bilgilerle yapay zekâ yardımıyla yazıldı ve yayından önce otomatik kontrollerden geçti. Bir değişikliği uygulamadan önce üreticinin duyurusuna mutlaka bakın.