CVE-2026-16513
Təsvir
subsys/rtio/rtio_syscalls.c faylındakı (v4.3.0 versiyasından əvvəl subsys/rtio/rtio_handlers.c) istifadəçi sahəsi yoxlayıcısı z_vrfy_rtio_sqe_copy_in_get_handles() RTIO obyekt dəstəyini (handle) və sqes giriş massivini yoxlasa da, handle çıxış parametrini yoxlamırdı. İlk dövr iterasiyasında o, hər hansı bir K_SYSCALL_MEMORY_WRITE yoxlaması olmadan, istifadəçi rejimindən olduğu kimi götürülmüş göstərici vasitəsilə yeni əldə edilmiş təslim növbəsi elementinin nüvə ünvanını saxlayan *handle = sqe əmrini icra edirdi. struct rtio nüvə obyekti verilmiş hər hansı istifadəçi rejimi axını (thread), handle parametrində ixtiyari ünvanla sistem çağırışını (syscall) çağıra bilər. Bu, imtiyazsız axının RTIO API-dən istifadə etməsinin adi yoludur, məsələn, daxildə rtio_sqe_copy_in_get_handles() funksiyasını çağıran sensor_read_async_mempool() və ya asinxron ADC köməkçiləri vasitəsilə. Yazma əməliyyatı hər hansı təslim elementi yoxlanmasından əvvəl supervizor rejimində baş verir, buna görə də SQE məzmununun sonradan rədd edilməsindən asılı olmayaraq icra olunur. Yalnız CONFIG_USERSPACE və CONFIG_RTIO ilə qurulmuş versiyalar təsirlənir; CONFIG_USERSPACE olmadan yoxlayıcı kompilyasiya edilmir və çağıran tərəf artıq imtiyazlı olur. Yazılacaq ünvan tamamilə hücum edən tərəfindən seçilir və yazılan dəyər çağıranın öz RTIO halqasına olan göstəricidir ki, onun məzmunu çağıran tərəfindən idarə edilir (sonrakı *sqe = sqes[i] əməliyi hücum edən tərəfindən təmin edilən struct rtio_sqe strukturunu həmin slotuna kopyalayır). Bu, istənilən nüvə ünvanına hücum edən tərəfin idarə etdiyi məlumatlara göstəricini yerləşdirən "write-what-where" primitivinə səbəb olur ki, bu da nüvə funksiya göstəricilərini, axın strukturlarını və ya yaddaş domeninin bölmə cədvəllərini korlamaq üçün kifayətdir və beləliklə, istifadəçi rejimindən nüvə rejiminə imtiyazların yüksəldilməsinə şərait yaradaraq CONFIG_USERSPACE-in təmin etməli olduğu izolyasiya sərhədini pozur. Ən azı, bu, etibarlı nüvə yaddaşının korlanması və çökmə primitividir. Hesabat verən şəxs yazma əməliyyatını qemu_x86 üzərində təkrar istehsal etmişdir: K_USER axını supervizor qlobal dəyişənini NULL-dan aktiv nüvə SQE göstəricisinə dəyişmişdir. Düzəliş, dövrdən əvvəl (mövcud opsional-NULL semantikası ilə qorunan) K_SYSCALL_MEMORY_WRITE(handle, sizeof(*handle)) yoxlamasını əlavə edir, beləliklə, hədəf ünvan çağıran axının yazıla bilən yaddaş domenində olmalıdır, əks halda axın K_OOPS tərəfindən dayandırılır. Tətbiqi onların vasitəsilə yazsa da, buff/buff_len çıxış parametrlərini yalnız oxuma üçün yoxlayan qonşu yoxlayıcı z_vrfy_rtio_cqe_get_mempool_buffer(), bea93400138 ("rtio: syscalls: validate output params as writable") ilə ayrıca gücləndirilmişdi; sözügedən qalıq daha zəif idi, çünki oxuma yoxlaması hələ də hədəfi çağıranın öz yaddaş domeni ilə məhdudlaşdırır.
Necə düzəltmək olar
- zephyrproject zephyr4.4.2 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| zephyrproject zephyr | 3.4.0 ≤ v < 4.4.2 | 4.4.2 |
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.