Średni Odebrany

CVE-2026-19595

opublikowano:
modyfikacja:
Ocena CVSS
6.1
Średni · v3.1
wektor: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H

>_ Opis

Tłumaczenie automatyczne – może zawierać nieścisłości.

Weryfikator wywołań systemowych w trybie użytkownika z_vrfy_rtio_cqe_get_mempool_buffer() w subsys/rtio/rtio_syscalls.c sprawdził swoje dwa parametry wyjściowe, buff i buff_len, za pomocą K_SYSCALL_MEMORY_READ() zamiast K_SYSCALL_MEMORY_WRITE(). Obydwa są czystymi parametrami wyjściowymi: z_impl_rtio_cqe_get_mempool_buffer() przechowuje za ich pośrednictwem adres bufora pamięci i jego długość. To rozróżnienie jest egzekwowane przez każdy walidator architektury — arch_buffer_validate() w RISC-V PMP jawnie akceptuje globalny __rom_region/__rodata_region tylko do odczytu, a walidatory ARM MPU akceptują regiony P_RO_U_RO i P_RW_U_RO tylko do odczytu — zatem wskaźnik zatwierdzony do odczytu niekoniecznie może być zapisywany przez wywołujący wątek.

Nieuprzywilejowany wątek trybu użytkownika, któremu przyznano dostęp do kontekstu RTIO (rtio_access_grant()) może wywołać wywołanie systemowe rtio_cqe_get_mempool_buffer() z buff/buff_len wskazującym na pamięć, którą może czytać, ale nie zapisywać, oraz z wpisem w kolejce zakończenia, którego pola flagi w pełni kontroluje (tylko RTIO_CQE_FLAG_MEMPOOL_BUFFER w wymagane są flagi [7:0]; flagi [19:8] i flagi [31:20] dostarczają indeksu i liczby bloków). Następnie jądro wykonuje zapis wielkości wskaźnika i 4-bajtowy poprzez te adresy, pracując w trybie nadzorcy. Dotarcie do sklepu wymaga CONFIG_USERSPACE wraz z CONFIG_RTIO_SYS_MEM_BLOCKS, konfiguracją za RTIO_DEFINE_WITH_MEMPOOL; bez tego ostatniego implementacja zwraca -ENOTSUP i nic nie zapisuje.

Następują dwa wyniki. Jeśli cel znajduje się na partycji domeny pamięci zadeklarowanej K_MEM_PARTITION_P_RW_U_RO (uprzywilejowany odczyt i zapis, tylko do odczytu użytkownika), zapis w trybie jądra powiedzie się i zdeponuje częściowo wybrane przez atakującego wartości w pamięci, którą domena pamięci oznaczyła dla tego wątku jako tylko do odczytu, omijając ochronę partycji przed zapisem. Jeśli cel znajduje się w pamięci globalnie czytelnej, ale niezapisywalnej, takiej jak .text/.rodata w pamięci flash, zapisywanie błędów w trybie jądra; błąd jest dostarczany do z_fatal_error(), a domyślna k_sys_fatal_error_handler() zatrzymuje lub restartuje urządzenie, dając nieuprzywilejowanemu wątkowi niezawodną pełną odmowę usługi.

Kontrola uprawnień do odczytu ogranicza szkody: adres musi być nadal czytelny dla wątku wywołującego, więc nie można atakować prywatnej pamięci jądra i nie ujawniać żadnych poufnych danych. Poprawka zastępuje oba sprawdzenia funkcją K_SYSCALL_MEMORY_WRITE(), więc wątek pozbawiony uprawnień do zapisu zostaje zakończony przez K_OOPS przed uruchomieniem implementacji; argument cqe poprawnie pozostaje zatwierdzony do odczytu.

>_ Słabości (CWE)

>_ Referencje

Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.

This product uses the NVD API but is not endorsed or certified by the NVD.

Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.

CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.

NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org