CVE-2026-31607

Kritik

Təsvir

Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: usbip: usbip_pack_ret_submit() funksiyasında number_of_packets dəyişəninin doğrulanması USB/IP kliyenti RET_SUBMIT cavabını aldıqda, usbip_pack_ret_submit() şəbəksiz şəkildə şəbəkə PDU-dan gələn məlumatla urb->number_of_packets dəyərini yeniləyir. Bu dəyər daha sonra usbip_recv_iso() və usbip_pad_iso() funksiyalarında urb->iso_frame_desc[] massivi üzrə dövr yaratmaq üçün sərhəd kimi istifadə olunur. Həmin çevik massivin ölçüsü URB ayrılması zamanı CMD_SUBMIT-dən gələn *ilkin* number_of_packets əsasında təyin edilmişdi. Zərərli USB/IP serveri cavabdakı number_of_packets dəyərini ilkin göndəriləndan daha böyük bir rəqəm təyin edə bilər ki, bu da usbip_recv_iso() funksiyası ayrılmış sahədən kənarda urb->iso_frame_desc[i] ünvanına yazı yazdıqda yığınla bağlı sərhədləri aşan yazıya (heap out-of-bounds write) səbəb olur. KASAN bunu 7.0.0-rc5 nüvəsi ilə təsdiqləyib: BUG: KASAN: slab-out-of-bounds in usbip_recv_iso+0x46a/0x640 Write of size 4 at addr ffff888106351d40 by task vhci_rx/69 The buggy address is located 0 bytes to the right of allocated 320-byte region [ffff888106351c00, ffff888106351d40) Server tərəfi (stub_rx.c) və qadcet tərəfi (vudc_rx.c), c6688ef9f297 ("usbip: fix stub_rx: harden CMD_SUBMIT path to handle malicious input") və b78d830f0049 ("usbip: fix vudc_rx: harden CMD_SUBMIT path to handle malicious input") commit-lərindən etibarən artıq CMD_SUBMIT yolunda number_of_packets dəyərini yoxlayır. Server tərəfi həmin mərhələdə hələ heç bir URB mövcud olmadığı üçün yoxlamanı USBIP_MAX_ISO_PACKETS-ə əsasən aparır. Kliyent tərəfində isə orijinal URB olduğu üçün biz daha ciddi sərhəddən istifadə edə bilərik: cavab orijinal number_of_packets dəyərini aşmamalıdır. Bu, usbip_recv_xbuff() funksiyasındakı actual_length dəyərinin transfer_buffer_length ilə müqayisə edilərək yoxlanılmasına oxşardır ki, burada cavab dəyəri orijinal ayırma ölçüsünə görə yoxlanılır. Kelvin Mbogo-nun seriyası ("usb: usbip: fix integer overflow in usbip_recv_iso()", v2) qəbul tərəfli funksiyaların özlərini gücləndirir; bu yamama isə pis dəyəri onun mənbəyində — usbip_pack_ret_submit() funksiyasında yeniləmədən əvvəl tutaraq və qlobal USBIP_MAX_ISO_PACKETS limiti əvəzinə hər URB üçün təyin edilmiş daha ciddi ayırma sərhədindən istifadə edərək həmin işi tamamlayır. Problem, usbip_pack_ret_submit() funksiyasında yeniləmədən əvvəl rpdu->number_of_packets dəyərinin urb->number_of_packets ilə müqayisə edilməsi yolu ilə həll edilir. Pozuntu baş verdikdə, dəyər sıfıra endirilir ki, usbip_recv_iso() və usbip_pad_iso() funksiyaları təhlükəsiz şəkildə erkən geri dönsün.

CiddilikKritik
CVSS9.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc24 apr 2026
İlk görülmə24 apr 2026

Necə düzəltmək olar

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel2.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.16.6.136, 6.12.83, 6.18.24, 6.19.14, 7.0.1

Versiyanızı yoxlayın

Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.

Intelligence 360 paketində

Attack Surface Management

Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.