PT-2026-110222 · Git+1 · Zephyr

CVE-2026-19735

·

Published

2026-10-11

·

Updated

2026-10-11

CVSS v3.1

4.8

Medium

VectorAV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N
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.

Exploit

Fix

Use of Insufficiently Random Values

Found an issue in the description? Have something to add? Feel free to write us 👾

Weakness Enumeration

Related Identifiers

CVE-2026-19735
GHSA-37MC-2Q9V-FP64

Affected Products

Zephyr