CVE-2026-64320
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: nvmet: Discovery Get Log Page-də autentifikasiyadan əvvəl heap-dən sərhəddən kənar oxuma xətası düzəldilib nvmet_execute_disc_get_log_page() yalnız host tərəfindən verilən Log Page Offset (lpo) dəyərinin dword düzülməsini yoxlayır. Sonra 64-bitlik offset discovery log səhifəsini saxlayan kiçik kzalloc buferinə əlavə olunur və nəticə birbaşa nvmet_copy_to_sgl()-ə ötürülür, hansı ki, mənbə tərəfdə heç bir sərhəd yoxlaması olmadan data_len baytı memcpy() ilə host-a köçürür: u64 offset = nvmet_get_log_page_offset(req->cmd); /* 64-bit host */ size_t data_len = nvmet_get_log_page_len(req->cmd); /* 32-bit host */ ... if (offset & 0x3) { ... } /* only check */ ... alloc_len = sizeof(*hdr) + entry_size * discovery_log_entries(req); buffer = kzalloc(alloc_len, GFP_KERNEL); ... status = nvmet_copy_to_sgl(req, 0, buffer + offset, data_len); Discovery nəzarətçisi autentifikasiya tələb etmir -- nvmet_host_allowed() discovery alt sistemi üçün qeyd-şərtsiz true qaytarır -- buna görə də çağırış nvmet hədəfinə çata bilən istənilən TCP/RDMA/FC qarşı tərəfi tərəfindən autentifikasiyadan əvvəl əlçatan olur. Təxminən 1 KiB ölçüsündə discovery log səhifəsi ilə offset == alloc_len-dən başlayaraq 4 KiB-ə qədər sorğu göndərən hücumçu növbəti slab səhifəsini oxuyur və onun məzmununu fabric üzərindən geri alır (standart nvmet-tcp loopback hədəfində aparılmış empirik sınaq bir Get Log Page cavabında 81 kanonik kernel göstəricisini sızdırıb). Offset-i xəritələnməmiş kernel yaddaşına yönəltmək kernel daxilindəki memcpy-də xətaya səbəb olur və hədəf host-u çökdürür (və ya panic_on_oops=1 olduqda panic yaradır). Hücumçu tərəfindən idarə olunan mənbə tərəf offset nümunəsi "nvmet_copy_to_sgl(req, 0, buffer + ATTACKER_OFFSET, ...)" bütün nvmet kod bazasında yalnız nvmet_execute_disc_get_log_page üçün unikaldır: admin-cmd.c-dəki bütün digər Get Log Page emal ediciləri ya lpo-nu nəzərə almır (və hər cavabı səssizcə offset 0-dan başladır), ya da sabit mənbə göstəricisi ilə lokal təyinat offsetini izləyir. Host tərəfindən verilən offset-i log səhifəsinin ölçüsünə qarşı yoxlayın, köçürmə uzunluğunu faktiki mövcud olan həcmlə məhdudlaşdırın və host ötürmə buferinin qalan hissəsini sıfırlarla doldurun. Sıfırlarla doldurma nvmet_execute_get_log_changed_ns()-dəki (admin-cmd.c) mövcud qısa cavab nümunəsinə uyğun gəlir və host log səhifəsində olandan daha çox bayt tələb etdikdə transport SGL məzmununun sızmasının qarşısını alır.
Necə düzəltmək olar
- linux linux_kernel6.12.96, 6.18.39, 7.1.4 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 4.8 ≤ v < 6.12.96, 6.13 ≤ v < 6.18.39, 6.19 ≤ v < 7.1.4 | 6.12.96, 6.18.39, 7.1.4 |
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.
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.