CVE-2026-87043
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
Generator liczb losowych urządzenia entropijnego w subsys/random/random_entropy_device.c powrócił wcześniej z -ENODEV z rand_get(), gdy tylko urządzenie_is_ready() zawiodło, przed osiągnięciem niekryptograficznego powrotu do awaryjnego timera systemowego w dalszej części tej samej funkcji. Ponieważ funkcja z_impl_sys_rand_get() zwraca void i odrzuca ten błąd — a publiczne wywołanie systemowe sys_rand_get() samo w sobie jest uznane za nieważne, więc nie może zgłosić błędu — bufor wyjściowy osoby wywołującej pozostał niezmieniony, a jego poprzednia zawartość została zwrócona jako dane losowe. Cienkie opakowania sprawiają, że jest to zwykły niezainicjowany odczyt: sys_rand32_get() deklaruje uint32_t ret;, wywołuje sys_rand_get(&ret, sizeof(ret)) i zwraca ret.
Stan „niegotowy” jest normalnym stanem działania, a nie usterką. Sterowniki entropijne inicjują się w PRE_KERNEL_1 z CONFIG_ENTROPY_INIT_PRIORITY (domyślnie 50), więc każdy wcześniejszy inicjator — obiekty jądra działają z priorytetem 30 — zauważa niegotowe urządzenie; oba generatory rodzeństwa, subsys/random/random_xoshiro128.c i z_early_rand_get() w kernel/init.c, zawierały już jawną rezerwę czasową dla dokładnie tego przypadku. Stan jest również trwały podczas rozruchu, gdy zawiedzie inicjacja sterownika entropii, co może zrobić kilka sterowników w drzewie na prawdziwym sprzęcie (entropy_stm32 w przypadku błędu konfiguracji zegara RNG, entropy_psa_crypto w przypadku niepowodzenia psa_crypto_init(), entropy_nrf_cracen, entropy_esp32, entropy_virtio).
Kiedy to nastąpi, każda niekryptograficzna wartość losowa w systemie jest albo pamięcią stałą, albo nieaktualną. coap_next_token() w subsys/net/lib/coap/coap.c wypełnia bufor statyczny, więc każdy token CoAP staje się tą samą stałą .bss; tcp_init_isn() w subsys/net/ip/tcp.c zwraca niezainicjowane słowo stosu jako początkowy numer sekwencyjny TCP; Identyfikatory transakcji DHCPv4/DHCPv6, klucze maskujące WebSocket i identyfikatory SSRC RTP są podobnie degradowane, a arch/arm64/core/pac.c uzyskuje klucze uwierzytelniania wskaźnika dla poszczególnych wątków z tego samego źródła. Tam, gdzie bajty są przesyłane bezpośrednio — dopełnienie pakietu SSH, wartość jednorazowa sesji netmidi2, identyfikator połączenia DTLS w kompilacjach bez CONFIG_CSPRNG_ENABLED — nieaktualny stos wywołujący lub zawartość sterty są ujawniane na kablu.
Poprawka inicjuje ret do -ENODEV i wywołuje funkcję entropy_get_entropy() tylko wtedy, gdy urządzenie jest gotowe, więc przypadek braku gotowości przechodzi teraz do rezerwowego timera i bufor jest zawsze zapisywany. Kryptograficznie bezpieczna ścieżka pozostaje niezmieniona: sys_csrand_get() nadal propaguje błąd do osoby wywołującej i nigdy po cichu nie ulega degradacji. Osoba atakująca nie może wywołać stanu nieprzygotowania, ale może zdalnie obserwować i wykorzystywać wynikające z tego nielosowe wartości na urządzeniu, którego dotyczy problem.
>_ 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