CVE-2026-85035
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
Wywołanie systemowe can_add_rx_filter_msgq() instaluje filtr CAN RX, którego wywołanie zwrotne (can_msgq_put() w sterownikach/can/can_common.c) otrzymuje strukturę wywołującego k_msgq * jako dane_użytkownika. Sterownik kontrolera przechowuje ten surowy wskaźnik w swojej tablicy filtrów i usuwa go ze ścieżki RX za każdym razem, gdy nadchodzi pasująca ramka. Weryfikator wywołań systemowych z_vrfy_can_add_rx_filter_msgq() w sterownikach/can/can_handlers.c sprawdził kolejkę tylko za pomocą K_SYSCALL_OBJ(), która sprawdza w danym momencie typ, inicjalizację i uprawnienia wywołującego i nie mówi nic o czasie życia obiektu.
W kompilacji z CONFIG_USERSPACE=y i CONFIG_DYNAMIC_OBJECTS=y nieuprzywilejowany wątek trybu użytkownika, któremu przyznano dostęp do urządzenia CAN, może uzyskać kolejkę komunikatów, której czas życia w pełni kontroluje: k_object_alloc(K_OBJ_MSGQ), po którym następuje k_msgq_alloc_init(). Czas życia takiego obiektu zależy wyłącznie od jego maski bitowej uprawnień i wskaźnik zachowywany przez jądro nie jest tam reprezentowany. Po zarejestrowaniu filtra wątek wywołuje funkcję k_object_release() — lub po prostu kończy działanie — a unref_check() zwalnia pamięć struktury k_msgq, podczas gdy sterownik CAN nadal przechowuje wskaźnik.
Następna pasująca ramka CAN powoduje uruchomienie k_msgq_put() w kontekście nadzorcy w odniesieniu do zwolnionej pamięci, którą atakujący mógł przygotować za pomocą innej alokacji jądra: ładunek ramki to memcpy()d poprzez write_ptr ponownie użytego bloku, a manipulowane są węzły listy Wait_q (i poll_events w CONFIG_POLL) kolejki. Powoduje to uszkodzenie sterty jądra osiągalne z wątku trybu użytkownika, pokonując izolację, którą ma zapewnić CONFIG_USERSPACE; ten sam zwisający wskaźnik pojawia się również łagodnie, gdy wątek aplikacji kończy się bez wywołania funkcji can_remove_rx_filter().
Poprawka sprawdza poprawność kolejki za pomocą K_SYSCALL_OBJ_STATIC(), która dodatkowo odrzuca obiekty przenoszące K_OBJ_FLAG_ALLOC, więc z trybu użytkownika można rejestrować tylko statycznie zdefiniowane kolejki (CAN_MSGQ_DEFINE()). Obiekty wywołujące w trybie nadzorcy omijają weryfikator i same muszą utrzymywać ważność kolejki do czasu usunięcia filtra.
>_ 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