CVE-2026-19669
WysokieCVSS 7.8Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 2 - wyżej niż 2% wszystkich znanych CVE
Streszczenie
Podatność w mechanizmie weryfikacji wywołań systemowych Zephyra (z_vrfy_fuel_gauge_get_props() i z_vrfy_fuel_gauge_set_props()) polega na alokacji tablic o zmiennym rozmiarze (VLA) na stosie jądra na podstawie niezwalidowanego argumentu len pochodzącego od użytkownika. Brak sprawdzenia zakresu przed alokacją i kopiowaniem pozwala wątkowi w trybie użytkownika (CONFIG_USERSPACE) na zapis poza zakresem w trybie nadzorcy z kontrolowaną przez atakującego długością i zawartością danych.
Ocena ryzyka
Atakujący może wyjść z piaskownicy trybu użytkownika i uszkodzić pamięć jądra, co prowadzi do wykonania kodu w trybie jądra lub zawieszenia systemu. Region strażnika stosu nie chroni przed tą podatnością, ponieważ kopiowanie rozpoczyna się poniżej strażnika i przesuwa się w górę.
Rekomendacja
Zaktualizuj Zephyr do wersji zawierającej poprawkę, która usuwa kopiowanie po stronie jądra i waliduje tablice wywołującego za pomocą K_SYSCALL_MEMORY_ARRAY_READ() / K_SYSCALL_MEMORY_ARRAY_WRITE(). Do czasu aktualizacji ogranicz dostęp do urządzeń fuel-gauge dla wątków w trybie użytkownika.
Inne podatności w Zephyr
Zobacz wszystkie- CVE-2026-19673Wysokie
Podatność w funkcji ethernet_recv() w subsys/net/l2/ethernet/ethernet.c w stosie sieciowym Zephyr. Gdy ethertype to 0x8100, a na interfejsie włączony jest VLAN, bufor odbieranej ramki jest reinterpretowany jako 18-bajtowa struktura net_eth_vlan_hdr bez ponownego sprawdzenia długości, co powoduje odczyt poza buforem i podniesienie hdr_len do 18. Pojedyncza nieuwierzytelniona ramka o długości 14-17 bajtów z ethertype 0x8100 wyzwala błąd.
- CVE-2026-10772Nieznane
To CVE zostało odrzucone jako duplikat. Opisana podatność dotyczyła błędnego sprawdzania uprawnień w ścieżkach GATT notify/indicate w stosie Bluetooth Zephyr, ale została już wcześniej zgłoszona jako CVE-2026-2411.
- CVE-2026-10676Nieznane
Identyfikator CVE-2026-10676 został wycofany, ponieważ analiza wykazała, że zgłoszona wada nie jest dostępna w żadnej wydanej wersji Zephyr. W każdej wspieranej wersji poprawna wartość jest korygowana przed jej użyciem.
- CVE-2026-5067Krytyczne
System operacyjny Zephyr zawiera lukę w ścieżce uaktualnienia WebSocket serwera HTTP. Nieuwierzytelniony atakujący zdalny może wywołać uszkodzenie pamięci, wysyłając spreparowany nagłówek Sec-WebSocket-Key. Kopiowanie nagłówka do bufora o stałym rozmiarze nie gwarantuje zakończenia NUL, co prowadzi do odczytu i zapisu poza zakresem na stosie.
- CVE-2026-19935Wysokie
Podatność w stosie Bluetooth LE Zephyr pozwala zdalnemu, nieuwierzytelnionemu atakującemu na użycie po zwolnieniu (use-after-free) w obsłudze kanałów L2CAP CoC z dynamicznym PSM. Wysyłając ramkę danych, a następnie żądanie rozłączenia, atakujący może spowodować, że kolejka pracy systemu przetworzy pracę wskazującą na zwolniony kanał, co prowadzi do naruszenia pamięci lub uszkodzenia kolejki pracy.
- CVE-2026-19740Średnie
Implementacja procedury LLCP w kontrolerze Bluetooth LE Zephyra zatrzymuje węzeł odbiorczy po akceptacji LL_PHY_UPDATE_IND, ale ścieżki obsługi nieprawidłowych PDU nie zwalniają tego węzła przed zakończeniem procedury. Atakujący z zasięgu radiowego może wysłać sekwencję PDU, która powoduje naruszenie asercji (awarię urządzenia) lub wyciek węzłów z puli odbiorczej, prowadząc do niedostępności Bluetooth do czasu restartu.
- CVE-2026-19577Wysokie
W podsystemie IPv6 stosu Zephyr stwierdzono podatność na odczyt poza zakresem pamięci w funkcji net_route_ipv6_packet(). Problem wynika z braku sprawdzenia, czy wpis w pamięci podręcznej sąsiadów (neighbor cache) posiada adres warstwy łącza, zanim zostanie on użyty. Atakujący z tej samej sieci może wymusić stan nierozwiązanego sąsiada i doprowadzić do odczytu pamięci poza tablicą adresów, co może skutkować awarią systemu (panic) lub wyciekiem danych.
- CVE-2026-19186Wysokie
W stosie IEEE 802.15.4 w Zephyrze funkcja ieee802154_decipher_data_frame() nie sprawdza, czy ramka jest wystarczająco długa, zanim obliczy długość danych. Odejmowanie długości nagłówka i tagu uwierzytelniającego od długości ramki może się zawinąć (underflow), co prowadzi do odczytu i zapisu poza buforem pakietu. Atakujący w zasięgu radiowym może wysłać krótką ramkę, powodując uszkodzenie pamięci i awarię systemu.
- CVE-2026-18415Średnie
W funkcji ieee802154_send() w stosie sieciowym Zephyr pakiet wychodzący jest kopiowany do stałego bufora nadawczego o rozmiarze 125 bajtów bez sprawdzenia długości. Gdy włączona jest fragmentacja 6LoWPAN, ale fragmentacja nie jest wymagana, brak weryfikacji rozmiaru pozwala na zapis poza buforem. Luka jest osiągalna przez gniazda NET_AF_PACKET powiązane z interfejsem 802.15.4, w tym przez nieuprzywilejowany wątek aplikacji w buildach CONFIG_USERSPACE.
- CVE-2026-15890Średnie
Podatność w module PSA Internal Trusted Storage w Zephyrze dotyczy braku synchronizacji w generowaniu nonce dla szyfrowania AEAD. Funkcja secure_storage_its_transform_aead_get_nonce() używa statycznych zmiennych lokalnych bez blokady, co przy równoczesnych zapisach do tego samego UID może prowadzić do ponownego użycia nonce z tym samym kluczem. To powoduje katastrofalną awarię szyfrowania, umożliwiając wyciek danych i fałszowanie wpisów.
Oryginalny opis (angielski, źródło NVD)
The user-mode syscall verifiers z_vrfy_fuel_gauge_get_props() and z_vrfy_fuel_gauge_set_props() in drivers/fuel_gauge/fuel_gauge_syscall_handlers.c declared two variable-length arrays, union fuel_gauge_prop_val k_vals[len] and fuel_gauge_prop_t k_props[len], sized directly by the caller-supplied len argument. len is an unvalidated size_t taken straight from the syscall ABI, and the VLAs were allocated before any check at all — including before the K_SYSCALL_DRIVER_FUEL_GAUGE() object-permission check. The subsequent k_usermode_from_copy() calls validated only that the user source buffer was readable; the kernel destination was never bounds-checked, since it was sized by the same attacker-chosen len. Any thread running in user mode with CONFIG_USERSPACE enabled can invoke fuel_gauge_get_props() or fuel_gauge_set_props() with a large len. This first displaces the supervisor stack pointer by an arbitrary attacker-chosen amount — Zephyr does not build with stack-clash probing, so the displacement itself does not fault, and the nested calls made by the verifier then write frames below the privileged stack. If the caller has been granted access to a fuel-gauge device object, the memcpy inside k_usermode_from_copy() additionally writes len * sizeof(union fuel_gauge_prop_val) bytes of fully attacker-controlled data starting well below the stack base. CONFIG_PRIVILEGED_STACK_SIZE defaults to 1024 bytes, so a len of roughly 170 already exhausts it. The result is an out-of-bounds write in supervisor mode with attacker-controlled length and, on the permitted path, attacker-controlled content — a break out of the user-mode sandbox into kernel memory, leading to kernel code execution or a system crash. A stack guard region does not contain it, because the copy begins below the guard and walks upward, corrupting unprotected memory before the guard is reached. The fix removes the kernel-side copies entirely and validates the caller's arrays in place with K_SYSCALL_MEMORY_ARRAY_READ() / K_SYSCALL_MEMORY_ARRAY_WRITE(), which also handle the len * size multiplication overflow; this is safe because neither fuel_gauge_prop_t nor union fuel_gauge_prop_val contains embedded pointers.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

