Wysoki Odebrany

CVE-2026-19185

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.

Weryfikator wywołań systemowych dla i3c_do_ccc() w sterownikach/i3c/i3c_handlers.c sprawdził zewnętrzną strukturę i3c_ccc_payload, bufor rozgłoszeniowy ccc.data i tablicę targets.payloads[], ale nie sprawdził buforów danych dla poszczególnych obiektów docelowych, na które wskazują te elementy tablicy. Każda struktura i3c_ccc_target_payload ma swój własny wskaźnik danych i data_len i żadna z nich nie została przekazana przez K_SYSCALL_MEMORY() przed przekazaniem ładunku do z_impl_i3c_do_ccc() i dalej do sterownika kontrolera. Weryfikator działał również na aktywnej strukturze obiektu wywołującego, a nie na migawce, więc zatwierdzone pola mogły zostać zmienione przez drugi wątek użytkownika pomiędzy sprawdzeniem a użyciem sterownika — w przeciwieństwie do rodzeństwa z_vrfy_i3c_transfer(), które zawsze najpierw kopiowało swoją tablicę komunikatów.

Wada występuje tylko w kompilacjach CONFIG_USERSPACE, w których skompilowany jest sterowniki/i3c/i3c_handlers.c. Nieuprzywilejowany wątek trybu użytkownika, któremu przyznano dostęp do obiektu urządzenia kontrolera I3C – w zwykły sposób, w jaki aplikacja pozwala wątkowi użytkownika komunikować się z urządzeniami peryferyjnymi I3C – może wystawić bezpośredni CCC, którego wskaźnik danych docelowego ładunku nadaje dowolny adres jądra. Sterowniki kontrolera bezpośrednio odwołują się do tego wskaźnika (na przykład sterowniki/i3c/i3c_mcux.c, sterowniki/i3c/i3c_cdns.c, sterowniki/i3c/i3c_stm32.c, sterowniki/i3c/i3c_npcx.c), używając rnw do określenia kierunku.

Odczyt CCC powoduje zatem, że sterownik trybu jądra zapisuje odebrane przez magistralę bajty pod adresem jądra wybranym przez atakującego na wybraną przez atakującego długość, a zapis CCC przesyła pamięć jądra na magistralę I3C. Rezultatem jest zapis w jądrze poza dopuszczalnym zakresem oraz ujawnienie pamięci jądra, tj. eskalacja z wątku trybu użytkownika do uprawnień nadzorcy, co eliminuje izolację, którą ma zapewniać CONFIG_USERSPACE.

Poprawka wprowadza funkcję copy_ccc_and_do(), która tworzy migawkę ładunku, kopiuje tablicę docelową do pamięci jądra za pomocą k_usermode_alloc_from_copy() (ograniczając liczbę num_targets do mniej niż 32), sprawdza każdy bufor dla każdego celu za pomocą K_SYSCALL_MEMORY() zgodnie z rnw i kopiuje zapisane w sterowniku pola num_xfer i err z powrotem do 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