Description
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.
Published: 2026-10-11
Score: 4.8 Medium
EPSS: n/a
KEV: No
Impact: Predictable TCP Initial Sequence Numbers (possible spoofing/injection)
Action: Apply Patch
AI Analysis

Impact

The vulnerability is caused by a silent failure in the Zephyr TCP stack’s implementation of RFC 6528, which generates the initial sequence number (ISN) from a 128‑bit secret called unique_key. When the random source sys_csrand_get() fails, the unique_key remains all zeros and the once‑guard is incorrectly latched to true. The result is that the ISN becomes a predictable function of the connection four‑tuple and a global time offset, so an off‑path adversary can compute future ISNs offline, allowing blind TCP spoofing or data injection against any connection whose four‑tuple can be guessed. The weakness is a use of a single source of entropy, classified as CWE‑330.

Affected Systems

The affected product is the Zephyr real‑time operating system (Zephyr project: zephyr). Any device that uses the default TCP stack compiled with CONFIG_NET_TCP_ISN_RFC6528 enabled and relies on the sys_csrand_get() entropy source is subject, including embedded and IoT platforms that boot with this stack.

Risk and Exploitability

Exploitation requires a random‑source error during the first TCP connection after boot, which can be triggered by a reboot or an immediately listening service that opens a connection. Once the ISN key is seeded with an all‑zero value, the attacker can recover the shared time offset from a single observed ISN, after which all subsequent ISNs for that boot are fully predictable, enabling off‑path spoofing or injection. The CVSS score is 4.8, indicating low to medium severity, but the likelihood of exploitation is low and the vulnerability is not in the CISA KEV catalog. Nevertheless, on vulnerable embedded deployments the impact can be significant, especially in high‑trust or high‑availability scenarios.

Generated by OpenCVE AI on October 11, 2026 at 18:25 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Apply the Zephyr TCP stack patch that correctly guards key generation, logs failures, and falls back to sys_rand32_get when the secret key cannot be filled.
  • Verify the health of the system’s entropy source, ensuring that sys_csrand_get() or PSA crypto succeeds during early boot, and observe system logs for any random‑source errors.
  • If an immediate patch is not possible, disable CONFIG_NET_TCP_ISN_RFC6528 or temporarily block incoming TCP connections during the boot period until the entropy source is validated, to prevent use of a predictable key.

Generated by OpenCVE AI on October 11, 2026 at 18:25 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Sun, 11 Oct 2026 18:45:00 +0000

Type Values Removed Values Added
First Time appeared Zephyrproject
Zephyrproject zephyr
Vendors & Products Zephyrproject
Zephyrproject zephyr

Sun, 11 Oct 2026 17:30:00 +0000

Type Values Removed Values Added
Description 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.
Title Predictable TCP initial sequence numbers when the RFC 6528 secret key generation fails silently in the Zephyr TCP stack
Weaknesses CWE-330
References
Metrics cvssV3_1

{'score': 4.8, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N'}


Subscriptions

Zephyrproject Zephyr
cve-icon MITRE

Status: PUBLISHED

Assigner: zephyr

Published:

Updated: 2026-10-11T17:14:56.782Z

Reserved: 2026-08-13T13:46:24.318Z

Link: CVE-2026-19735

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-10-11T18:16:58.683

Modified: 2026-10-11T18:16:58.683

Link: CVE-2026-19735

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-11T18:30:19Z

Weaknesses
  • CWE-330

    Use of Insufficiently Random Values