CVE-2026-31607
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: usbip: usbip_pack_ret_submit() fonksiyonunda number_of_packets değerini doğrula Bir USB/IP istemcisi bir RET_SUBMIT yanıtı aldığında, usbip_pack_ret_submit() ağ PDU'sundan gelen urb->number_of_packets değerinin üzerine koşulsuz olarak yazar. Bu değer daha sonra usbip_recv_iso() ve usbip_pad_iso() fonksiyonlarında, boyutu URB tahsis zamanında CMD_SUBMIT'ten gelen *orijinal* number_of_packets değerine göre sabitlenmiş olan esnek bir dizi olan urb->iso_frame_desc[] üzerinde yineleme yapmak için döngü sınırı olarak kullanılır. Kötü niyetli bir USB/IP sunucusu, yanıttaki number_of_packets değerini orijinal olarak gönderilenden daha büyük bir değere ayarlayabilir; bu durum, usbip_recv_iso() fonksiyonu tahsis edilen bölgenin ötesindeki urb->iso_frame_desc[i] konumuna yazdığında bir heap out-of-bounds write hatasına neden olur. KASAN bunu kernel 7.0.0-rc5 ile onaylamıştır: BUG: KASAN: slab-out-of-bounds in usbip_recv_iso+0x46a/0x640 Write of size 4 at addr ffff888106351d40 by task vhci_rx/69 Hatalı adres, tahsis edilen 320 baytlık bölgenin [ffff888106351c00, ffff888106351d40) 0 bayt sağında yer almaktadır. Sunucu tarafı (stub_rx.c) ve gadget tarafı (vudc_rx.c), c6688ef9f297 ("usbip: fix stub_rx: harden CMD_SUBMIT path to handle malicious input") ve b78d830f0049 ("usbip: fix vudc_rx: harden CMD_SUBMIT path to handle malicious input") commitlerinden beri CMD_SUBMIT yolundaki number_of_packets değerini zaten doğrulamaktadır. Sunucu tarafı, o noktada henüz bir URB mevcut olmadığı için USBIP_MAX_ISO_PACKETS değerine karşı doğrulama yapar. İstemci tarafında ise orijinal URB mevcuttur, dolayısıyla daha sıkı bir sınır kullanılabilir: yanıt, orijinal number_of_packets değerini aşmamalıdır. Bu durum, usbip_recv_xbuff() fonksiyonunda yanıt değerini orijinal tahsis boyutuyla karşılaştıran actual_length değerinin transfer_buffer_length değerine karşı mevcut doğrulamasının bir benzeridir. Kelvin Mbogo'nun serisi ("usb: usbip: fix integer overflow in usbip_recv_iso()", v2) alma yönündeki fonksiyonların kendilerini güçlendirmektedir; bu yama, hatalı değeri kaynağında —üzerine yazılmadan önce usbip_pack_ret_submit() içinde— yakalayarak ve küresel USBIP_MAX_ISO_PACKETS limiti yerine URB başına özel daha sıkı tahsis sınırını kullanarak bu çalışmayı tamamlar. Bu sorun, usbip_pack_ret_submit() fonksiyonunda üzerine yazma işleminden önce rpdu->number_of_packets değerinin urb->number_of_packets değerine karşı kontrol edilmesiyle düzeltilmiştir. İhlal durumunda, usbip_recv_iso() ve usbip_pad_iso() fonksiyonlarının güvenli bir şekilde erken dönmesi için değer sıfıra sabitlenir.
Nasıl düzeltilir
- linux linux_kernel6.6.136, 6.12.83, 6.18.24, 6.19.14, 7.0.1 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 2.6.39 ≤ v < 6.6.136, 6.7 ≤ v < 6.12.83, 6.13 ≤ v < 6.18.24, 6.19 ≤ v < 6.19.14, 7.0 ≤ v < 7.0.1 | 6.6.136, 6.12.83, 6.18.24, 6.19.14, 7.0.1 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.