CVE-2026-90000
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılmışdır: HID: rmi: kiçik ölçülü RMI hesabatları ilə bağlı sərhədləri aşan (OOB) girişin düzəldilməsi hid-rmi drayveri özünün writeReport/readReport buferinin ölçüsünü heç bir minimum hədd olmadan, yalnız cihaz tərəfindən təmin edilən hesabat deskriptoruna əsasən müəyyən edir: data->input_report_size = hid_report_len(input_report); data->output_report_size = hid_report_len(output_report); alloc_size = data->output_report_size + data->input_report_size; data->writeReport = devm_kzalloc(&hdev->dev, alloc_size, GFP_KERNEL); data->readReport = data->writeReport + data->output_report_size; Lakin daha sonra onun daxilində sabit ofsetlər oxunur və yazılır. 1 baytlıq çıxış və 1 baytlıq giriş hesabatı bəyan edən cihaz üçün hid_report_len() hər biri üçün 2 qaytarır, beləliklə alloc_size 4 olur, halbuki rmi_set_page() — probe zamanı rmi_input_configured() vasitəsilə şərtsiz olaraq çağırılır — writeReport[4]-ə məlumat yazır və rmi_hid_read_block() writeReport[0..5]-ə məlumat yazır. readReport, writeReport + output_report_size ünvanında yerləşdiyindən, bu yazma əməliyyatları növbəti cavabın analiz edildiyi sahəni də korlayır. Oxuma yolu daha kritikdir: kopyalama uzunluğu cihaz tərəfindən doldurulan və 255-ə qədər ola bilən readReport[1]-dən gəlir və kopyalama input_report_size nəzərə alınmadan &readReport[2]-dən başlayır, buna görə də ayırmanın sonunu keçərək qonşu slab obyektlərinə daxil olur. Bunun üçün cihazın yanlış məlumat verməsinə belə ehtiyac yoxdur — rmi_f01_probe() sabit 21 baytlıq reyestr oxuması həyata keçirir, buna görə də 23 baytdan kiçik giriş hesabatı bəyan edən istənilən cihaz, doğru cavab verdiyi halda belə, sərhədləri aşaraq oxuma aparır. Bu baytlar RMI nüvəsinin üzərində əməliyyat apardığı reyestr dəyərlərinə çevrilir: rmi_f01_probe() onları məhsul ID-si kimi nüvə loquna çap edir və eyni adlı mode 0444 sysfs atributu vasitəsilə ixrac edir, rmi_driver_set_irq_bits() isə onları kəsilmə maskası kimi cihaza geri göndərir. Beləliklə, kiçik ölçülü hesabat deskriptoru heap məzmununun həm imtiyazsız istifadəçi sahəsinə, həm də cihazın özünə sızmasına səbəb olur. Yazma yolunda da heç bir məhdudiyyət yoxdur: rmi_hid_write_block() məhdudiyyətsiz bir len dəyərini &writeReport[4]-ə kopyalayır və probe zamanı cihazın çağıra biləcəyi ən böyük funksiya rmi_driver_set_irq_bits()-dir ki, onun uzunluğu cihazın Page Description Table-da bəyan etdiyi kəsilmə mənbəyinin sayından törəyir. Nəhayət, oxuma dövrü sıfır uzunluqlu cavabla başa çatdıra bilmir: belə bir cavab heç nə kopyalamır və nə bytes_read, nə də bytes_needed dəyərlərini artırmır. Cavab gəldiyi üçün bir saniyəlik wait_event_timeout() da işə düşmür, beləliklə, daim 0 cavabı verən cihaz, page_mutex tutulmuş halda probe worker daxilində dövrün davamlı işləməsini təmin edir. khungtaskd bunu fərq etmir, çünki hər bir cavab tapşırığı oyadır. Drayverin qurduğu struktur üçün çox kiçik olan hesabatlar — yazma hesabatları üçün 6 çıxış baytı və oxuma əlaqəsi (handshake) üçün 3 giriş baytı — probe zamanı rədd edilir, yazma və oxuma kopyalamaları cihazın bəyan etdiyi hesabat ölçülərinə uyğunlaşdırılır və sıfır uzunluqlu cavab xəta kimi qəbul edilir. Bu şəkildə rədd edilən cihaz, sanki heç bir RMI hesabat ID-ləri daşımırmış kimi adi HID cihazı kimi başladılır. Bu yolda RMI_DEVICE device_flags-də təyin edilmiş saxlanmamalıdır, çünki rmi_input_configured() RMI quraşdırmasını icra edib rmi_set_page()-ə çatardı ki, bu da az öncə ayrılması rədd edilən writeReport buferinə yazıya çalışardı. Bit təyin olunmuş halda gələ bilər: rmi_probe() hesabat yoxlamalarından əvvəl id->driver_data-nı device_flags-ə kopyalayır və new_id sysfs atributu vasitəsilə bağlama prosesi driver_data-nı RMI_DEVICE (BIT(0)) təyin olunmuş halda təmin edə bilər. Driver_data kopyalandığı yerdə bit silinsin, beləliklə RMI_DEVICE dəqiq olaraq "bu probe hesabatları təsdiqlədi" mənasını saxlasın; bu patch-dən əvvəl mövcud olan üç "start"-a keçid də əhatə olunur. Xəta yolu çıxış zamanı RMI_READ_DATA_PENDING bayrağını da təmizləyir, çünki dövrün başında gözləmə prosesi məhz bu bayrağı yoxlayır: onun təyin olunmuş qalması bütün sonrakı wait_event_timeout()-ların köhnəlmiş cavaba görə dərhal geri dönməsinə və cihazın ömrünün qalan hissəsi üçün oxuma yolunun sıradan çıxmasına səbəb olardı. Ölçülərin məhdudlaşdırılması işlək aparatlarda reqressiyaya səbəb olmur: oxuma dövrü artıq...
Necə düzəltmək olar
- Linux Linuxfba600d824597b2a894ecae72fc422c2b8c08f8c, 056ef8e6700b8b6ca11453a9d4bfb1b868a5cd88, 183da103022ec11af55ba9951d2cc171fb6c836b, a8be8bbf0952bb7ff46636ead1896769c381fe55, ab2958e0c94edd63315dd14dc548874cc63a4043, f4cb9c4556dcb593e66dbb855179dbd351dbb053, 48934c2927414a37a7fadeb6091113177c0b2038, 4956993bb3befdf791d71a4952d8d13bcfd44c7b və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| Linux Linux | 9fb6bf02e3ad04c20edb8e46536ce3eeda32c736 ≤ v < fba600d824597b2a894ecae72fc422c2b8c08f8c, 9fb6bf02e3ad04c20edb8e46536ce3eeda32c736 ≤ v < 056ef8e6700b8b6ca11453a9d4bfb1b868a5cd88, 9fb6bf02e3ad04c20edb8e46536ce3eeda32c736 ≤ v < 183da103022ec11af55ba9951d2cc171fb6c836b, 9fb6bf02e3ad04c20edb8e46536ce3eeda32c736 ≤ v < a8be8bbf0952bb7ff46636ead1896769c381fe55, 9fb6bf02e3ad04c20edb8e46536ce3eeda32c736 ≤ v < ab2958e0c94edd63315dd14dc548874cc63a4043, 9fb6bf02e3ad04c20edb8e46536ce3eeda32c736 ≤ v < f4cb9c4556dcb593e66dbb855179dbd351dbb053, 9fb6bf02e3ad04c20edb8e46536ce3eeda32c736 ≤ v < 48934c2927414a37a7fadeb6091113177c0b2038, 9fb6bf02e3ad04c20edb8e46536ce3eeda32c736 ≤ v < 4956993bb3befdf791d71a4952d8d13bcfd44c7b, 3.16 | fba600d824597b2a894ecae72fc422c2b8c08f8c, 056ef8e6700b8b6ca11453a9d4bfb1b868a5cd88, 183da103022ec11af55ba9951d2cc171fb6c836b, a8be8bbf0952bb7ff46636ead1896769c381fe55, ab2958e0c94edd63315dd14dc548874cc63a4043, f4cb9c4556dcb593e66dbb855179dbd351dbb053, 48934c2927414a37a7fadeb6091113177c0b2038, 4956993bb3befdf791d71a4952d8d13bcfd44c7b |
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.