Siber Güvenlik

XQUIC'teki Düzeltilmemiş XRING Açığı, Uzaktaki İstemcilerin HTTP/3 Sunucularını Çökertmesine İzin Veriyor

XQUIC'teki Düzeltilmemiş XRING Açığı, Uzaktaki İstemcilerin HTTP/3 Sunucularını Çökertmesine İzin Veriyor
Dil okuluna gel, çalışarak ödediğin parayı geri kazan! Nasıl? →

Alibaba'nın QUIC ve HTTP/3 kütüphanesi XQUIC'te tek bir satırdaki yanlış bir değişken, herhangi bir uzak istemcinin tamamen yasal trafikle sunucuyu çökertmesine neden oluyor. Henüz bir yama bulunmuyor.

FoxIO araştırmacısı Sébastien Féry, 8 Temmuz'da açığı kamuoyuna duyurdu ve ona XRING adını verdi. Féry'ye göre bu açığı kullanmak için herhangi bir giriş yapmaya veya bozuk paket göndermeye gerek yok: yaklaşık 260 baytlık sıradan QPACK trafiği, sunucu işlemini çökertmeye yetiyor.

XQUIC açık kaynaklı olduğu için risk yalnızca Alibaba ile sınırlı değil. Bu kütüphaneyi kullanan ve varsayılan QPACK ayarlarıyla HTTP/3 sunan her sunucu açık durumda. Buna Alibaba'nın Nginx tabanlı web sunucusu Tengine de dahil. FoxIO, Tengine'in Taobao ve Alipay gibi sitelerde şirketin bulut ve CDN altyapısının önünde yer aldığını belirtiyor.

v1.9.4 dahil olmak üzere tüm sürümler etkileniyor. 10 Temmuz itibarıyla düzeltilmiş bir sürüm veya CVE numarası bulunmuyor. Bir düzeltme yayımlanana kadar operatörler SETTINGS_QPACK_MAX_TABLE_CAPACITY değerini 0 yaparak QPACK'in dinamik tablosunu kapatabilir veya HTTP/3 desteğini tamamen kaldırabilir.

Hata, HTTP/3'ün başlıkları sıkıştırma şeklinde yatıyor. HTTP/3, aynı başlığı (örneğin user-agent) tekrar tekrar göndermemek için QPACK kullanıyor. QPACK, istemcinin sunucuya özel bir kontrol kanalı (encoder stream) üzerinden oluşturmasını ve yeniden boyutlandırmasını söylediği paylaşımlı bir tablo tutuyor.

XQUIC, bu tablonun baytlarını bir ring buffer'da (halka tampon) saklıyor. Bu, verinin dolduğunda başa sararak devam ettiği sabit bir bellek bloğu.

İstemci tabloyu büyütmek istediğinde XQUIC daha büyük bir tampon ayırıyor ve eski veriyi yenisine kopyalıyor. Bu kopyalama işlemi, verinin eski tamponda, yeni tamponda, her ikisinde veya hiçbirinde sarmalanıp sarmalanmadığına bağlı olarak dört farklı durum içeriyor. Bu durumlardan birinde kod, kalan kuyruk verisinin boyutunu eski tampon yerine yeni, daha büyük tamponun kapasitesine göre hesaplıyor. Bu da ciddi bir sayım hatasına yol açıyor.

Örneğin, 64 baytlık bir tabloyu, yazma imleci sona yakınken 65 bayta büyütmek istediğinizde XQUIC, aslında 6 bayt olması gerekirken 70 bayt kuyruk verisi olduğuna karar veriyor.

Bu yanlış sayı, bir bellek kopyalama işlemine aktarılıyor. Kopyalama uzunluğu, fazla sayının daha küçük bir değerden çıkarılmasıyla elde ediliyor. Bu uzunluk işaretsiz bir size_t türünde olduğu için taşma (underflow) meydana geliyor ve değer neredeyse maksimum bir sayıya dönüşüyor. Bunun sonucunda kopyalama işlemi belleğin sınırlarının dışına taşıyor.

Uzun dönem Malta'da, üniversite destekli okullarda dilini geliştir. Kayıt bilgisi →

Kaynak: The Hacker News