Wysoki Oczekuje na analizę

CVE-2026-87038

opublikowano:
modyfikacja:
Ocena CVSS
7.0
Wysoki · v3.1
wektor: CVSS:3.1/AV:L/AC:H/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 i3c_transfer(), z_vrfy_i3c_transfer() w sterownikach/i3c/i3c_handlers.c, sprawdziła poprawność dostarczonej przez rozmówcę struktury i3c_device_desc na miejscu, zamiast tworzyć jej migawkę. Potwierdziło jedynie, że deskryptor był czytelny dla wątku wywołującego (K_SYSCALL_MEMORY_READ()), przeczytał raz cel->bus, aby sprawdzić go za pomocą K_SYSCALL_OBJ(), a następnie przekazał aktywny wskaźnik wywołującego w dół. Implementacja z_impl_i3c_transfer() ponownie odczytuje target->bus z pamięci użytkownika i wysyła przez nią jako DEVICE_API_GET(i3c, target->bus)->i3c_xfers(...), zatem magistrala, która została sprawdzona, niekoniecznie jest magistralą używaną. DEVICE_API_GET() nie sprawdza typu środowiska wykonawczego poza kompilacjami CONFIG_DEVICE_API_ASSERT.

W kompilacji z CONFIG_USERSPACE i sterownikiem kontrolera I3C wątek użytkownika, któremu przyznano obiekt urządzenia I3C, może wykorzystać to z drugim wątkiem w tej samej domenie pamięci: jeden wątek wywołuje i3c_transfer(), podczas gdy drugi przepisuje pole magistrali deskryptora. Okno pomiędzy sprawdzeniem a użyciem obejmuje sprawdzanie poprawności num_msgs, sprawdzanie dostępu do tablicy komunikatów, alokację stosu VLA i memcpy() do 32 struktur i3c_msg, więc wyścig jest powtarzalny i można go po prostu ponowić, aż do wylądowania.

Kiedy podstawienie się powiedzie, jądro wyłudza wskaźnik wybrany przez atakującego jako urządzenie strukturalne, ładuje wskaźnik funkcji z tabeli API kontrolowanej przez atakującego i wywołuje go w trybie nadzorcy z argumentami wpływającymi na atakującego. Daje to możliwość wykonania kodu w trybie jądra z nieuprzywilejowanego wątku użytkownika — całkowita ucieczka z piaskownicy chroniącej pamięć przestrzeni użytkownika; mniejszymi skutkami są dowolny dwupoziomowy odczyt jądra lub błąd jądra. Nie ma to wpływu na kompilacje bez CONFIG_USERSPACE lub bez sterownika I3C.

Poprawka kopiuje deskryptor do lokalnego stosu jądra za pomocą k_usermode_from_copy(), sprawdza poprawność magistrali w tej kopii i wysyła ją na kopii, więc zweryfikowana wartość jest prawdopodobnie użytą wartością.

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