CVE-2026-16513
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
Weryfikator przestrzeni użytkownika z_vrfy_rtio_sqe_copy_in_get_handles() w subsys/rtio/rtio_syscalls.c (subsys/rtio/rtio_handlers.c przed wersją 4.3.0) sprawdził uchwyt obiektu RTIO i tablicę wejściową sqes, ale nie parametr out uchwytu. Podczas pierwszej iteracji pętli wykonał *handle = sqe, przechowując adres jądra nowo uzyskanego wpisu w kolejce przesyłania poprzez wskaźnik pobrany dosłownie z trybu użytkownika, bez sprawdzania K_SYSCALL_MEMORY_WRITE przed nim.
Każdy wątek trybu użytkownika, któremu przyznano obiekt jądra struct rtio, może wywołać wywołanie systemowe z dowolnym adresem w uchwycie. Jest to zwykły sposób, w jaki nieuprzywilejowany wątek korzysta z API RTIO, na przykład poprzez sensor_read_async_mempool() lub asynchroniczne pomocniki ADC, które wywołują wewnętrznie rtio_sqe_copy_in_get_handles(). Sklep działa w trybie nadzorcy przed jakąkolwiek walidacją wpisu, więc jest uruchamiany niezależnie od tego, czy zawartość SQE zostanie później odrzucona. Dotyczy to tylko kompilacji z CONFIG_USERSPACE i CONFIG_RTIO; bez CONFIG_USERSPACE weryfikator nie jest skompilowany i osoba wywołująca jest już uprzywilejowana.
Adres zapisu jest w całości wybierany przez atakującego, a zapisana wartość jest wskaźnikiem do własnego pierścienia RTIO osoby wywołującej, którego zawartość kontroluje osoba wywołująca (poniższe *sqe = sqes[i] kopiuje dostarczoną przez atakującego strukturę rtio_sqe do tego gniazda). Daje to prymityw zapisu typu „co-gdzie”, umieszczający wskaźnik do danych kontrolowanych przez atakującego pod dowolnym adresem jądra, wystarczający do uszkodzenia wskaźników funkcji jądra, struktur wątków lub tablic partycji domeny pamięci, a tym samym do eskalacji z trybu użytkownika do trybu jądra, pokonując granicę izolacji, którą ma egzekwować CONFIG_USERSPACE. Jest to co najmniej niezawodny prymitywny sposób na uszkodzenie pamięci jądra i awarię. Reporter odtworzył zapis na qemu_x86: wątek K_USER zmienił globalny wskaźnik nadzorcy z NULL na aktywny wskaźnik SQE jądra.
Poprawka dodaje K_SYSCALL_MEMORY_WRITE(uchwyt, rozmiar(*uchwyt)) (chroniony przez istniejącą semantykę opcjonalną - NULL) przed pętlą, więc miejsce docelowe musi znajdować się w zapisywalnej domenie pamięci wywołującego wątku, w przeciwnym razie wątek zostanie zakończony przez K_OOPS. Sąsiedni weryfikator z_vrfy_rtio_cqe_get_mempool_buffer(), który sprawdzał parametry zewnętrzne buff/buff_len tylko do odczytu, chociaż implementacja za ich pośrednictwem zapisuje, został osobno ulepszony przez bea93400138 („rtio: wywołania systemowe: sprawdź parametry wyjściowe jako możliwe do zapisu”); ta reszta była istotnie słabsza, ponieważ kontrola odczytu nadal ogranicza cel do własnej domeny pamięci osoby wywołującej.
>_ 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