CVE-2026-12233
ŚrednieCVSS 5.9Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 42 - wyżej niż 42% wszystkich znanych CVE
Streszczenie
Podatność w backendzie PSA Protected Storage dla poświadczeń TLS (subsys/net/lib/tls_credentials/tls_credentials_trusted.c) polega na niezainicjalizowanym mutexie (k_mutex) — zadeklarowanym jako statyczna struktura wypełniona zerami, bez wywołania k_mutex_init(). Przy braku rywalizacji o blokadę działa to poprawnie, ale przy jednoczesnym dostępie z dwóch wątków dochodzi do wyłuskania pustego wskaźnika (NULL) w kolejce oczekujących, co powoduje panikę jądra i reset urządzenia.
Ocena ryzyka
Ryzyko polega na deterministycznej awarii systemu (panika jądra / reset) przy pierwszej rywalizacji o blokadę, co umożliwia atak DoS. Dotyczy to systemów z włączonym CONFIG_TLS_CREDENTIALS_BACKEND_PROTECTED_STORAGE (platformy PSA Protected Storage / TF-M), gdzie jednoczesne uzgadnianie TLS lub operacje zarządzania poświadczeniami mogą wywołać błąd.
Rekomendacja
Zaleca się natychmiastowe zastosowanie poprawki inicjalizującej mutex statycznie za pomocą K_MUTEX_DEFINE(credential_lock), co zapewnia poprawną kolejkę oczekujących. Należy również rozważyć ograniczenie równoczesnych operacji TLS lub aktualizację do wersji z poprawką.
Inne podatności w Zephyr RTOS
Zobacz wszystkie- CVE-2026-82962Średnie
Podatność w funkcji ethernet_fill_header() w stosie sieciowym Zephyr RTOS polega na tym, że nagłówek Ethernet jest wstawiany w miejscu (poprzez net_buf_push) bez sprawdzenia, czy pakiet ma wystarczający zapas miejsca (headroom). Pakiety przydzielone przez inny stos L2 (np. 802.15.4/OpenThread, PPP) i przekazane do Ethernetu w wyniku routingu lub tunelowania mają zbyt mały headroom, co prowadzi do zapisu poza granicami bufora. W buildach bez CONFIG_ASSERT i CONFIG_NET_BUF_HARDENING powoduje to korupcję pamięci.
- CVE-2026-19595Średnie
Podatność w mechanizmie weryfikacji wywołań systemowych Zephyr RTOS: funkcja z_vrfy_rtio_cqe_get_mempool_buffer() sprawdzała parametry wyjściowe buff i buff_len za pomocą K_SYSCALL_MEMORY_READ() zamiast K_SYSCALL_MEMORY_WRITE(). Umożliwia to nieuprzywilejowanemu wątkowi w trybie użytkownika wywołanie wywołania systemowego ze wskaźnikami do pamięci tylko do odczytu, co prowadzi do zapisu w trybie nadzorcy poza dozwolonym obszarem lub do błędu jądra i zatrzymania/restartu urządzenia.
- CVE-2026-19940Średnie
Podatność w implementacji Bluetooth Classic Hands-Free Profile Audio Gateway (HFP AG) w Zephyr RTOS powoduje uszkodzenie listy timeoutów jądra. Poprzez wysłanie AT+CIND? i szybkie ponowne połączenie, zdalny atakujący może wywołać zawieszenie lub awarię całego systemu.
- CVE-2026-19736Wysokie
Sterownik entropii NXP MCUX TRNG w Zephyrze (drivers/entropy/entropy_mcux_trng.c) przekazuje liczbę bajtów żądania bezpośrednio do funkcji SDK TRNG_GetRandomData(), która w przypadku układów i.MX RT5xx/RT6xx zawsze kopiuje całe 32-bitowe słowa i zaokrągla pobieranie entropii do wielokrotności 128 bajtów. Przy długości niebędącej wielokrotnością czterech dochodzi do przepełnienia bufora o maksymalnie 127 bajtów, co może prowadzić do uszkodzenia pamięci jądra lub stosu.
- CVE-2026-19575Wysokie
Podatność w Zephyr RTOS dotyczy handlera trybu użytkownika z_vrfy_device_deinit() w kernel/device.c, który walidował argument dev za pomocą K_SYSCALL_OBJ_INIT(dev, K_OBJ_ANY). Ponieważ k_object_validate() pomija porównanie typu dla K_OBJ_ANY, sprawdzenie ograniczało się do tego, czy wskaźnik należy do dowolnego obiektu jądra, do którego wątek ma uprawnienia — bez weryfikacji rzeczywistego typu obiektu. Umożliwia to lokalnemu wątkowi w trybie użytkownika przekazanie obiektu stosu wątku (np. z k_thread_stack_alloc()) i wykonanie kodu jądra w trybie supervisora.
- CVE-2026-19574Wysokie
W podsystemie MMU dla architektury ARM64 w Zephyr RTOS identyfikatory ASID przydzielane są przez prosty licznik round-robin, który po przekroczeniu 255 możliwych wartości zaczyna przydzielać te same ASID aktywnym domenom pamięci. Ponieważ mapowania domen są instalowane jako nieglobalne (MT_NG), ASID jest jedynym znacznikiem odróżniającym tłumaczenia w TLB, a ścieżka przełączenia kontekstu nie opróżnia TLB w przypadku kolizji osiągniętej przez trzecią domenę. W efekcie wątki w trybie użytkownika mogą czytać i zapisywać pamięć należącą do innej domeny, naruszając izolację domen pamięci.
- CVE-2026-19569Wysokie
Podatność w jądrze Zephyr RTOS pozwala nieuprzywilejowanemu wątkowi użytkownika na zapis poza granicami w pamięci jądra. Wynika to z braku kontroli przepełnienia przy obliczaniu rozmiaru alokacji dla dynamicznych obiektów jądra, co prowadzi do alokacji zbyt małego bloku pamięci. Atakujący może wykorzystać to do eskalacji uprawnień i wykonania kodu na poziomie jądra.
- CVE-2026-19185Wysokie
W systemie Zephyr RTOS znaleziono podatność w weryfikatorze wywołań systemowych dla funkcji i3c_do_ccc(), która nie sprawdza wskaźników danych poszczególnych celów w strukturze i3c_ccc_payload. Ponadto weryfikacja działa na żywej strukturze, co pozwala innemu wątkowi na zmianę pól między sprawdzeniem a użyciem. Umożliwia to nieuprzywilejowanemu wątkowi zapis do dowolnego adresu jądra (przez odczyt CCC) lub ujawnienie pamięci jądra (przez zapis CCC), co prowadzi do eskalacji uprawnień.
- CVE-2026-18747Średnie
Podatność w transporcie SMP-over-console w Zephyr RTOS pozwala nieuwierzytelnionemu atakującemu na wywołanie niedomiaru długości bufora przez wysłanie pojedynczej 7-bajtowej ramki na konsolę zarządzania. Prowadzi to do odczytu poza zakresem, co może spowodować awarię wątku MCUmgr (denial of service) lub potencjalny wyciek pamięci.
- CVE-2026-18417Średnie
W Zephyr RTOS wykryto podatność w warstwie gniazd BSD, gdzie błąd asynchroniczny był przechowywany w polu user_data kontekstu sieciowego, które dla nasłuchujących gniazd TCP jest używane do przechowywania wskaźnika do kontekstu rodzica. W wersji v4.3.0, po zdarzeniu wyłączenia interfejsu, wywołanie zwrotne accept nie było dezaktywowane, co prowadziło do ponownego użycia skażonej wartości jako wskaźnika i zapisu pod nieprawidłowy adres, powodując krytyczny błąd jądra (awarię lub reset urządzenia).
Oryginalny opis (angielski, źródło NVD)
The PSA Protected Storage credential backend (subsys/net/lib/tls_credentials/tls_credentials_trusted.c) declared its credential-store mutex as a plain zero-filled static struct k_mutex credential_lock; and never called k_mutex_init() on it. A statically zero-filled k_mutex has an uninitialized wait queue (its dlist head/tail are NULL instead of the self-referential sentinels that k_mutex_init/K_MUTEX_DEFINE install). The uncontended lock path does not touch the wait queue, so the defect is latent and serialized use behaves correctly. When two execution contexts contend on the lock, k_mutex_lock() pends the blocking thread on the wait queue via z_pend_curr(), which calls sys_dlist_append() on the zeroed list and dereferences a NULL tail pointer (tail->next = node), faulting the kernel. The lock is held during TLS handshake credential loading and by all credential add/get/delete operations, so a deployment performing concurrent TLS handshakes (for example a server handling multiple simultaneous connections from a remote peer) or a credential-management operation concurrent with a handshake can trigger the dereference. The impact is a denial of service: a deterministic kernel panic / device reset on the first contention. There is no memory corruption beyond the NULL dereference and no confidentiality or integrity impact; mutual exclusion on the fast path remains correct. Exposure is limited to builds with CONFIG_TLS_CREDENTIALS_BACKEND_PROTECTED_STORAGE enabled (PSA Protected Storage / TF-M platforms); the default volatile RAM backend initializes its lock correctly and is unaffected. The fix initializes the mutex statically with K_MUTEX_DEFINE(credential_lock), providing a valid wait queue so the contended path no longer touches a NULL list.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

