Katalog CVE

CVE-2026-19735

ŚrednieCVSS 4.8
Opublikowano: Zaktualizowano: Przetłumaczono: NVD NIST

Prawdopodobieństwo exploitacji (EPSS)

Niskie ryzyko
0.16%

Percentyl 5 - wyżej niż 5% wszystkich znanych CVE

Streszczenie

Implementacja RFC 6528 w subsys/net/ip/tcp.c generowała numer ISN z SHA-256(unique_key || four-tuple) plus offset czasu działania, gdzie unique_key to 128-bitowy sekret wypełniany przez sys_csrand_get(). Wartość zwracana tego wywołania była ignorowana, a flaga jednorazowej inicjalizacji ustawiana na true nawet przy błędzie. Ponieważ sys_csrand_get() przy błędzie nie wypełnia bufora, pojedyncze niepowodzenie pozostawiało unique_key jako same zera do końca rozruchu, bez ponowienia, logu i fallbacku.

Ocena ryzyka

Przy zerowym kluczu ISN staje się publiczną funkcją czwórki połączenia i wspólnego offsetu czasu, co pozwala atakującemu poza ścieżką przewidzieć ISN i przeprowadzić ślepe podszywanie się pod połączenia TCP lub wstrzyknięcie/reset danych. Dotyczy to urządzeń, u których źródło entropii zgłosiło błąd podczas generowania klucza.

Rekomendacja

Zaktualizuj system do wersji zawierającej poprawkę, która przenosi generowanie klucza do jednego strzeżonego helpera, zatrzaskuje flagę tylko przy sukcesie, loguje błąd i w razie potrzeby używa sys_rand32_get() zamiast hashowania ze znanym stałym kluczem. Upewnij się, że sprzętowy RNG lub PSA crypto są dostępne przed pierwszym połączeniem TCP.

Powiązane podatności

Oryginalny opis (angielski, źródło NVD)

The RFC 6528 initial-sequence-number implementation in subsys/net/ip/tcp.c derived every TCP ISN from SHA-256(unique_key || four-tuple) plus a uptime-derived offset, where unique_key is a 128-bit secret filled once by sys_csrand_get(). The return value of that call was discarded and the once guard was latched to true even when the call failed. Because sys_csrand_get() leaves the destination buffer untouched on failure (it deliberately propagates the entropy-driver error rather than filling the buffer), a single failed call left unique_key as its all-zero BSS content for the remainder of the boot, with no retry, no log message and no fallback. A failure of the cryptographic random source is required to reach the weak state — for example -ENODEV/-EIO from the entropy driver in subsys/random/random_entropy_device.c (the in-tree comment notes that the hardware RNG "might still be gathering entropy during early boot situations"), or psa_generate_random() failing in subsys/random/random_psa.c when PSA crypto is not initialised or is backed by a Bluetooth-HCI entropy device that is not yet up. The first TCP connection is what triggers key generation, so a remote peer that reaches a listening port immediately after boot, or that can provoke a reboot, has indirect influence over whether generation coincides with that window. tcp_init_isn() is called for every passive open in tcp_conn_new() and every active open in net_tcp_connect(), so the poisoned key governs all TCP connections for that boot. With an all-zero key the ISN becomes a public function of the connection four-tuple plus a device-wide time offset. An off-path attacker can compute the hash term offline for any four-tuple and recover the shared time offset from a single observed ISN, after which the ISN the device will pick for other four-tuples is predictable. That defeats exactly the protection RFC 6528 provides: blind TCP connection spoofing against peers that trust the source address, and blind data injection into or reset of connections whose four-tuple can be guessed. Devices whose entropy source never errors were never in the weak state. The fix moves key generation into a single guarded helper that latches only on success, logs the error otherwise, and makes tcp_init_isn() fall back to sys_rand32_get() — the behaviour already used when CONFIG_NET_TCP_ISN_RFC6528 is disabled — instead of hashing with a known-constant key.

Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS