CVE-2026-10848
WysokieCVSS 7.0Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 30 - wyżej niż 30% wszystkich znanych CVE
Streszczenie
W kliencie OCPP 1.6 w Zephyr RTOS wykryto podatność polegającą na odczycie poza zakresem bufora podczas parsowania ramek WAMP RPC. Funkcja extract_string_field() używa strncpy bez gwarancji null-terminacji, co prowadzi do odczytu poza 128-bajtowym buforem i potencjalnego zapisu null poza zakresem. Podatność może być zdalnie wykorzystana przez złośliwy serwer centralny lub atakującego w sieci.
Ocena ryzyka
Atakujący może spowodować denial of service (DoS) poprzez wysłanie specjalnie spreparowanej ramki RPC, co może doprowadzić do awarii systemu. Ryzyko jest ograniczone do systemów z jawnie włączoną opcją CONFIG_OCPP, ale w przypadku wdrożeń produkcyjnych może być krytyczne.
Rekomendacja
Należy natychmiast zastosować poprawkę zastępującą ręczny parser funkcją json_mixed_arr_parse() oraz jawnie null-terminować bufor uid. Zaleca się aktualizację do wersji Zephyr RTOS zawierającej fix lub ręczne zaimportowanie łatki.
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 OCPP 1.6 client in subsys/net/lib/ocpp parsed inbound WAMP RPC frames in parse_rpc_msg() (subsys/net/lib/ocpp/ocpp_j.c) using a hand-rolled helper, extract_string_field(), that copied the message's uid and action fields with strncpy(out_buf, token + 1, outlen - 1) and then scanned the result with strchr(out_buf, '"'). Because strncpy does not NUL-terminate the destination when the source is at least outlen - 1 (127) bytes long, the subsequent strchr reads past the 128-byte destination buffer into adjacent stack memory; if a " byte is found beyond the buffer, a one-byte out-of-bounds NUL write also occurs. A related defect in extract_payload() runs strchr/strrchr over the receive buffer, which may not be NUL-terminated when a maximal-length frame fills it. The parsed bytes come directly from the OCPP central-system server over a websocket: the reader thread fills recv_buf via websocket_recv_msg() and calls parse_rpc_msg() on each inbound DATA frame (subsys/net/lib/ocpp/ocpp.c). A malicious or compromised central server, or an on-path attacker (OCPP is commonly deployed over plain ws://), can send an RPC frame whose uid or action field is 127+ bytes with no closing quote, triggering the out-of-bounds access. The primary impact is a remotely triggerable denial of service: the unbounded scan can fault on an unmapped page, and the stray NUL write can corrupt adjacent stack state. The over-read data is not reflected to the peer, so disclosure is limited. The feature is EXPERIMENTAL and must be explicitly enabled (CONFIG_OCPP). The fix replaces the manual parser with the bounds-respecting json_mixed_arr_parse() and copies the extracted uid with an explicitly NUL-terminated buffer, eliminating both over-reads.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

