Skip to main content

Zephyr RTOS CVE-2026-19735

| EUVDEUVD-2026-97114 MEDIUM
Use of Insufficiently Random Values (CWE-330)
2026-10-11 zephyr
4.8
CVSS 3.1 · Vendor: zephyr
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Entropy driver fails during early boot
  2. Delivery
    Device latches all-zero TCP ISN key
  3. Exploit
    Observe one server ISN off-path
  4. Execution
    Recover shared device time offset
  5. Persist
    Compute predictable ISNs offline
  6. Impact
    Blind-spoof, inject, or reset TCP connections

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Cryptographic random values
Exploitation Conditions

Requires CONFIG_NET_TCP_ISN_RFC6528 to be enabled AND the cryptographic random source to FAIL at boot: sys_csrand_get() returning an error (e.g. -ENODEV/-EIO from the entropy driver in random_entropy_device.c while the hardware RNG is still gathering entropy, or psa_generate_random() failing in random_psa.c when PSA crypto is uninitialised or backed by an HCI entropy device that is not yet up). The poisoned all-zero key is only latched if that specific failure occurs during the first TCP connection's key generation; devices whose entropy source never errors are not vulnerable. Limiting factors: the attacker must observe at least one ISN off-path, the victim peer must trust the source address for spoofing to matter, and exploitation is confined to boots where the RNG failure coincides with the key-generation window (an attacker can only indirectly influence this by reaching a listening port right after boot or provoking a reboot). No authentication is needed (PR:N).

Impact

The signals converge on a conditional, moderate-severity issue rather than a top priority. The CVSS 3.1 vector (AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N, base 4.8) correctly flags AC:H because exploitation is gated on a precondition outside the attacker's direct control: sys_csrand_get() must fail at boot (e.g. -ENODEV/-EIO from the entropy driver, or psa_generate_random() failing before PSA crypto / an HCI entropy source is up), leaving unique_key as all-zero BSS. Only then does the ISN become a public function of the four-tuple plus a recoverable device time offset, enabling off-path blind spoofing, data injection, and reset - consistent with the C:L/I:L rating. Exploitation status is 'no public exploit identified at time of analysis': the input shows no CISA KEV listing and no POC flag, and no EPSS score was provided, so there is no evidence of active or at-scale exploitation. The vendor patch is confirmed. Net: a real but narrow weakness - devices on robust hardware whose entropy source never errors were never in the weak state, so this is a defense-in-depth fix for a cryptographic-failure edge case rather than a broadly exploitable network flaw. No CVSS-vs-description conflict was found; the AC:H rating is well justified by the entropy-failure dependency.

Exploit ScenarioDerived

A Zephyr device using CONFIG_NET_TCP_ISN_RFC6528 boots while its hardware RNG is still gathering entropy, sys_csrand_get() returns an error, and the all-zero key silently governs every TCP connection for that boot. An off-path attacker observes a single ISN from one connection, solves offline for the device-wide time offset, and can then predict the ISN for any other four-tuple to blindly spoof, inject into, or reset TCP connections with address-trusting peers. No public exploit code is identified, and the AC:H rating reflects the required entropy-source failure.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 11, 2026

Predictable TCP initial sequence numbers in Zephyr RTOS allow off-path attackers to defeat RFC 6528 spoofing protection and perform blind TCP connection spoofing, data injection, or connection resets, but only on devices where the cryptographic random source fails exactly when the ISN secret key is first generated at boot. The flaw is a discarded return value from sys_csrand_get() that latches the 'key already generated' guard even on failure, leaving a 128-bit secret as all zeros for the entire boot; exploitation additionally requires the attacker to observe at least one ISN off-path and the spoofed peer to trust source addresses, and no public exploit was identified at time of analysis. The assessed vector is CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N (4.8), reflecting an unauthenticated remote issue whose high attack complexity and conditional preconditions keep it moderate rather than critical, and the signals converge on a conditional, moderate-severity issue rather than a top priority.

RemediationAI

Apply the upstream fix commit 700888e3ecff8474f4fe7dfa8782b8869053222b (referenced from vendor advisory GHSA-37mc-2q9v-fp64) or update to a Zephyr release that includes it; the change moves key generation into a mutex-protected tcp_init_isn_key() helper that latches unique_key_valid only on success, logs NET_ERR("Cannot generate secret key for TCP ISN") on failure, and makes the RFC 6528 path conditional so that a failure falls back to the previously used sys_rand32_get() behaviour instead of hashing with a known-constant key. Patch status is "Upstream fix available (PR/commit); released patched version not independently confirmed" because the supplied patch reference is a Git commit rather than a tagged release, so integrators should pin to that commit or a release known to contain it. If the fix cannot be deployed immediately, two compensating controls are available: first, disable CONFIG_NET_TCP_ISN_RFC6528 so the stack deterministically uses sys_rand32_get(), which eliminates the degenerate all-zero-key condition but lowers ISN entropy quality relative to the RFC 6528 requirement and should be treated as a temporary measure; second, guarantee that the entropy source is operational before the network stack accepts connections, for example by deferring network bring-up until the hardware RNG has finished gathering entropy or by ensuring PSA crypto is initialized ahead of any TCP activity, at the cost of a longer boot-to-network delay. Restricting which peers can reach listening ports (source-address filtering, no untrusted WAN exposure) reduces the window for the boot-time race but does not eliminate it against peers that trust spoofed source addresses.

Affected VersionsENISA

Zephyr 3.7.0 ≤4.4.2

Affected Packages

euvd zephyr no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Zephyr's RFC 6528 ISN derivation in subsys/net/ip/tcp.c computed each TCP initial sequence number as SHA-256(unique_key || four-tuple) plus an uptime-derived offset, where unique_key is a 128-bit BSS-resident secret populated once by sys_csrand_get(). The original code ignored that function's return value and set a static 'once' guard to true unconditionally, so a single failed entropy call permanently froze the key at its zero-initialized content for the remainder of the boot, with no retry, no NET_ERR log, and no fallback path. The failure mode is realistic rather than theoretical: sys_csrand_get() deliberately propagates entropy-driver errors instead of filling the destination buffer, and the in-tree comment in subsys/random/random_entropy_device.c notes the hardware RNG "might still be gathering entropy during early boot situations", returning -ENODEV/-EIO; similarly psa_generate_random() in subsys/random/random_psa.c fails when PSA crypto is uninitialized or backed by a Bluetooth-HCI entropy device that is not yet up. Because tcp_init_isn() runs on every passive open in tcp_conn_new() and every active open in net_tcp_connect(), the poisoned key governs all TCP connections for that boot, and the first connection is what triggers generation, giving a remote peer indirect influence over timing by hitting a listening port immediately after boot or provoking a reboot. This is CWE-330 (Use of Insufficiently Random Values): with an all-zero key the ISN reduces to a public function of the four-tuple and a device-wide time offset, so an attacker can precompute the hash term for candidate four-tuples and recover the shared offset from one observed ISN, making subsequent ISNs predictable and defeating the RFC 6528 threat model that expects a key "known to an off-path attacker" to be impossible.

Know when Zephyr gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (zephyr) PRIMARY 4.8 MEDIUM
AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N
vuln.today AI 4.8 MEDIUM

Off-path network attacker, no auth (AV:N/PR:N); AC:H because success depends on an entropy-source failure outside attacker control; blind injection/reset yields C:L/I:L with no direct availability impact.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (zephyr).

CVSS VectorVendor: zephyr

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
None

DescriptionCVE.org

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.

Threat Intelligence Overview

EPSS Score
0.2%
Top 95% exploitable
Prevalence
Medium
popular open-source RTOS in embedded/IoT, but not ubiquitous like Linux
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

24
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +24
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Code Injection CRITICAL

Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.

More in Zephyr

View all
CVE-2023-4260 CRITICAL POC
10.0 Sep 27

Potential off-by-one buffer overflow vulnerability in the Zephyr fuse file system. Rated critical severity (CVSS 10.0),

CVE-2026-1678 CRITICAL POC
9.8 Mar 05

An out-of-bounds write in the Zephyr RTOS DNS resolver (dns_unpack_name()) lets a crafted DNS response corrupt memory on

CVE-2023-5055 CRITICAL POC
9.8 Nov 21

Possible variant of CVE-2021-3434 in function le_ecred_reconf_req. Rated critical severity (CVSS 9.8), this vulnerabilit

CVE-2023-4257 CRITICAL POC
9.8 Oct 13

Unchecked user input length in /subsys/net/l2/wifi/wifi_shell.c can cause buffer overflows. Rated critical severity (CVS

CVE-2023-3725 CRITICAL POC
9.8 Oct 06

Potential buffer overflow vulnerability in the Zephyr CAN bus subsystem. Rated critical severity (CVSS 9.8), this vulner

CVE-2021-3323 CRITICAL POC
9.8 Oct 12

Integer Underflow in 6LoWPAN IPHC Header Uncompression in Zephyr. Rated critical severity (CVSS 9.8), this vulnerability

CVE-2021-3625 CRITICAL POC
9.8 Oct 05

Buffer overflow in Zephyr USB DFU DNLOAD. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable

CVE-2021-3319 CRITICAL POC
9.8 Oct 05

DOS: Incorrect 802154 Frame Validation for Omitted Source / Dest Addresses. Rated critical severity (CVSS 9.8), this vul

CVE-2018-1000800 CRITICAL POC
9.8 Sep 06

zephyr-rtos version 1.12.0 contains a NULL base pointer reference vulnerability in sys_ring_buf_put(), sys_ring_buf_get(

CVE-2023-4264 CRITICAL POC
9.6 Sep 27

Potential buffer overflow vulnerabilities n the Zephyr Bluetooth subsystem. Rated critical severity (CVSS 9.6), this vul

CVE-2024-1638 CRITICAL POC
9.1 Feb 19

The documentation specifies that the BT_GATT_PERM_READ_LESC and BT_GATT_PERM_WRITE_LESC defines for a Bluetooth characte

CVE-2023-5753 HIGH POC
8.8 Oct 25

Potential buffer overflows in the Bluetooth subsystem due to asserts being disabled in /subsys/bluetooth/host/hci_core.c

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy