CVE-2026-10646
WysokieCVSS 7.4Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 24 - wyżej niż 24% wszystkich znanych CVE
Streszczenie
W implementacji getaddrinfo() dla gniazd BSD w Zephyrze występuje podatność use-after-return. Gdy oczekiwanie na semaforze przekroczy limit czasu, kod ponawia zapytanie DNS bez anulowania poprzedniego, pozostawiając wskaźnik do stosu jako user_data. Opóźniona odpowiedź DNS lub timeout resolwera może nadpisać pamięć stosu, prowadząc do awarii lub uszkodzenia pamięci.
Ocena ryzyka
Atakujący sieciowo (on- lub off-path) może wysłać spreparowaną odpowiedź DNS z fałszywym 16-bitowym ID transakcji, wywołując nadpisanie pamięci stosu. Może to prowadzić do odmowy usługi (crash) lub potencjalnie do wykonania dowolnego kodu w kontekście jądra.
Rekomendacja
Należy natychmiast zaktualizować Zephyr do wersji powyżej 4.4.0, która zawiera poprawkę anulującą oczekujące zapytanie DNS przed ponowną próbą i resetującą semafor. Jeśli aktualizacja nie jest możliwa, należy ograniczyć dostęp do usług DNS z zaufanych źródeł.
Inne podatności w Zephyr
Zobacz wszystkie- 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-13735Niskie
Implementacja WireGuard w Zephyrze błędnie obsługiwała pakiety keepalive. Wiadomość typu 4 z 16-bajtowym ładunkiem (pusty tekst jawny i tag Poly1305) była akceptowana bez weryfikacji tagu uwierzytelniającego, ponieważ funkcja wg_process_data_message() zwracała wynik przed wywołaniem wg_decrypt_packet(). Atakujący mógł wysłać fałszywy keepalive, nie znając klucza sesji.
- CVE-2026-13734Średnie
Podatność w Zephyr's WireGuard VPN: funkcja wg_process_data_message() sprawdzała licznik anty-replay zbyt późno, po zatwierdzeniu zmian stanu peer'a (aktualizacja adresu, timery, rotacja kluczy). Atakujący może wstrzyknąć przechwycony pakiet, co prowadzi do przejęcia endpointu i zakłócenia sesji.
- CVE-2026-13212Wysokie
Sterownik virtio w systemie Zephyr nie sprawdza poprawności identyfikatora łańcucha deskryptorów zapisywanego przez urządzenie virtio do pierścienia używanego. Atakujący backend virtio może podać identyfikator wykraczający poza zakres, co prowadzi do odczytu poza pamięcią i wywołania wskaźnika funkcji w kontekście przerwania gościa. Umożliwia to przejęcie kontroli nad przepływem wykonania lub spowodowanie awarii systemu.
- CVE-2026-12634Średnie
Podatność w backendzie NVS podsystemu ustawień Zephyr (settings_nvs.c) powoduje zapis poza granicami stosu. Funkcja nvs_read() zwraca pełną długość wpisu, która może przekraczać rozmiar bufora, a kod używa tej wartości jako indeksu do zapisu znaku NUL, co prowadzi do zapisu poza bufor (CWE-787).
- CVE-2026-12632Średnie
Podatność w Zephyr RTOS w module PTP (Precision Time Protocol) pozwala zdalnemu atakującemu na wywołanie odczytu poza zakresem pamięci przez wysłanie specjalnie spreparowanego pakietu PTP z nieprawidłowym typem wiadomości (0xE lub 0xF). Brak walidacji górnego zakresu indeksu tablicy msg_size[] prowadzi do odczytu poza tablicą, a następnie do dalszych operacji na pamięci, co może skutkować awarią systemu lub ograniczonym uszkodzeniem pamięci.
- CVE-2026-12630Średnie
W Zephyr OS w kodzie dekompresji 6LoWPAN IPHC (subsys/net/ip/6lo.c) występuje odczyt poza zakresem w funkcji get_ihpc_inlined_size(). Indeks do tablicy da_inline_size_table (13 wpisów) jest budowany z 4-bitowego pola M, DAC i DAM nagłówka IPHC, a zarezerwowane kombinacje 13, 14 i 15 nie są sprawdzane pod kątem granic, co prowadzi do odczytu poza tablicą.
- CVE-2026-12366Wysokie
W Zephyr OS wykryto podatność use-after-free w ścieżce usuwania dynamicznych obiektów jądra. Funkcja unref_check() zwalnia pamięć obiektu po wyzerowaniu licznika referencji, ale dla timerów (K_OBJ_TIMER) nie anuluje aktywnego timeoutu, pozostawiając wiszący węzeł w globalnej kolejce timeoutów. Po wygaśnięciu timera jądro wywołuje handler na zwolnionej pamięci, co prowadzi do zapisu do zwolnionego obszaru.
Oryginalny opis (angielski, źródło NVD)
Zephyr's BSD-sockets getaddrinfo() implementation (subsys/net/lib/sockets/getaddrinfo.c) passes a pointer to a stack-allocated state object (struct getaddrinfo_state ai_state) as the user_data of an asynchronous DNS resolver query. The socket layer waits on a semaphore with a timeout deliberately set slightly longer than the resolver's own per-query timeout. When that semaphore wait nonetheless times out (-EAGAIN) - which can occur when the resolver's timeout work is delayed by workqueue contention, or in the documented multi-retry configuration where CONFIG_NET_SOCKETS_DNS_TIMEOUT exceeds CONFIG_NET_SOCKETS_DNS_BACKOFF_INTERVAL - the pre-fix code retries the query (goto again) without cancelling the previous one and without resetting the semaphore. The previous query slot remains active in the resolver with its callback and the stack pointer as user_data, and ai_state->dns_id is overwritten so the stale query can no longer be cancelled. A subsequent DNS response delivered over UDP and matched by its 16-bit transaction id (in dispatcher_cb()/dns_read()), or the resolver's own delayed query-timeout work, then invokes dns_resolve_cb() against the now out-of-scope stack frame, writing through the stale pointer (state->status, state->idx, state->ai_arr[], and k_sem_give()). Because the triggering response is network-delivered and its 16-bit id is spoofable/replayable by an on- or off-path attacker, this is a network-influenceable use-after-return that can corrupt reused stack memory, leading to crashes/denial of service or memory corruption. The fix cancels the timed-out query by name and type before retrying and resets the local semaphore, eliminating the stale callback path. Affected: Zephyr v4.0.0 through v4.4.0.

