Wysoki Odebrany

CVE-2026-19575

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

>_ Opis

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

Procedura obsługi weryfikacji trybu użytkownika dla wywołania systemowego Device_deinit(), z_vrfy_device_deinit() w kernel/device.c, sprawdziła swój argument dev za pomocą K_SYSCALL_OBJ_INIT(dev, K_OBJ_ANY). k_object_validate() powoduje zwarcie w porównaniu typów, gdy żądanym typem jest K_OBJ_ANY, więc sprawdzenie zostaje zredukowane do „ten wskaźnik to adres bazowy jakiegoś obiektu jądra, któremu przyznano wątek wywołujący” — rzeczywisty typ obiektu nigdy nie był porównywany, a K_SYSCALL_OBJ_INIT również pomija sprawdzanie stanu inicjalizacji. Rodzeńskie procedury obsługi z_vrfy_device_init() i z_vrfy_device_is_ready() używały już K_OBJ_DRIVER_ANY i nie miało to na nie wpływu.

Wątek działający w trybie użytkownika może zatem przekazać dowolny obiekt jądra, do którego posiada uprawnienia — najbardziej użyteczny jest obiekt stosu wątków uzyskany z wywołania syscall k_thread_stack_alloc() lub statycznie zdefiniowany K_THREAD_STACK, któremu został przyznany w celu odrodzenia podrzędnego wątku użytkownika — którego pamięć zapasowa może być zapisywana z trybu użytkownika. z_impl_device_deinit() następnie interpretuje te bajty zapisane przez atakującego jako urządzenie strukturalne: wyłudza wskaźnik stanu odczytany z obiektu, wywołuje wskaźnik funkcji odczytany z ops.deinit i po pomyślnym ponownym zapisaniu stanu. Rezultatem jest pośrednie wywołanie dowolnego adresu wykonywane w trybie nadzorcy, plus dowolny odczyt jądra i jednobajtowy zapis jądra.

Eksploatacja powoduje wykonanie pełnego kodu jądra lokalnego, nieuprzywilejowanego wątku, całkowicie pokonując granicę izolacji CONFIG_USERSPACE; mniej precyzyjna próba kończy się błędem w trybie nadzorcy i awarią systemu. Wada jest dostępna tylko w kompilacjach, które obsługują zarówno CONFIG_USERSPACE, jak i CONFIG_DEVICE_DEINIT_SUPPORT — przy wyłączonej obsłudze deinicjalizacji funkcja z_impl_device_deinit() zwraca -ENOTSUP bez usuwania referencji do wskaźnika. W wersjach 4.2.x i 4.3.x wartość CONFIG_DEVICE_DEINIT_SUPPORT miała wartość domyślną y, więc każda kompilacja CONFIG_USERSPACE tych wydań jest widoczna, chyba że opcja została jawnie wyłączona. Od wersji 4.4.0 opcja jest opcjonalna (nie jest domyślna i nie jest wybierana przez żaden podsystem w drzewie), więc wersja 4.4.x jest widoczna tylko wtedy, gdy jawnie włącza tę opcję. Linia v4.2 nie jest już utrzymywana i nie otrzymuje backportu.

Poprawka zmienia kontrolę obiektu na K_OBJ_DRIVER_ANY, co ogranicza argument do zakresu typu obiektu sterownika wygenerowanego przez kompilację (K_OBJ_DRIVER_FIRST..K_OBJ_DRIVER_LAST) — rzeczywistych instancji urządzeń struktury umieszczonych przez linker — więc pola state i ops.deinit są ponownie kontrolowane przez jądro.

>_ 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