CVE-2026-19735

Source
https://cve.org/CVERecord?id=CVE-2026-19735
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-19735.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-19735
Aliases
  • GHSA-37mc-2q9v-fp64
Published
2026-10-11T17:14:56Z
Modified
2026-10-28T10:51:08Z
Severity
  • 4.8 (Medium) CVSS_V3 - CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N CVSS Calculator
Summary
Predictable TCP initial sequence numbers when the RFC 6528 secret key generation fails silently in the Zephyr TCP stack
Details

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.

Database specific
{
    "cna_assigner":  "zephyr",
    "cwe_ids":  [
        "CWE-330"
    ],
    "osv_generated_from":  "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/19xxx/CVE-2026-19735.json"
}
References

Affected packages

Git / github.com/zephyrproject-rtos/zephyr

Affected ranges

Type
GIT
Repo
https://github.com/zephyrproject-rtos/zephyr
Events
Database specific
Show details
{
    "extracted_events":  [
        {
            "range":  [
                {
                    "introduced":  "3.7.0"
                },
                {
                    "last_affected":  "4.4.2"
                }
            ],
            "source":  "AFFECTED_FIELD",
            "strategy":  "StandardRange"
        },
        {
            "range":  [
                {
                    "fixed":  "700888e3ecff8474f4fe7dfa8782b8869053222b"
                }
            ],
            "source":  "REFERENCES_COMMIT"
        }
    ]
}

Affected versions

v3.*
v3.7.0
v4.*
v4.0.0
v4.0.0-rc1
v4.0.0-rc2
v4.0.0-rc3
v4.1.0
v4.1.0-rc1
v4.1.0-rc2
v4.1.0-rc3
v4.2.0
v4.2.0-rc1
v4.2.0-rc2
v4.2.0-rc3
v4.3.0
v4.3.0-rc1
v4.3.0-rc2
v4.3.0-rc3
v4.4.0
v4.4.0-rc1
v4.4.0-rc2
v4.4.0-rc3

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-19735.json"
vanir_signatures
[
    {
        "deprecated":  false,
        "digest":  {
            "function_hash":  "14757586431641831858801408525229443799",
            "length":  667
        },
        "id":  "CVE-2026-19735-3ef264cc",
        "signature_type":  "Function",
        "signature_version":  "v1",
        "source":  "https://github.com/zephyrproject-rtos/zephyr/commit/700888e3ecff8474f4fe7dfa8782b8869053222b",
        "target":  {
            "file":  "subsys/net/ip/tcp.c",
            "function":  "tcpv4_init_isn"
        }
    },
    {
        "deprecated":  false,
        "digest":  {
            "function_hash":  "318505870009283947707148502288293914771",
            "length":  608
        },
        "id":  "CVE-2026-19735-880f29ab",
        "signature_type":  "Function",
        "signature_version":  "v1",
        "source":  "https://github.com/zephyrproject-rtos/zephyr/commit/700888e3ecff8474f4fe7dfa8782b8869053222b",
        "target":  {
            "file":  "subsys/net/ip/tcp.c",
            "function":  "tcp_init_isn"
        }
    },
    {
        "deprecated":  false,
        "digest":  {
            "function_hash":  "123084972907976867434533984114973715810",
            "length":  666
        },
        "id":  "CVE-2026-19735-bde41f5b",
        "signature_type":  "Function",
        "signature_version":  "v1",
        "source":  "https://github.com/zephyrproject-rtos/zephyr/commit/700888e3ecff8474f4fe7dfa8782b8869053222b",
        "target":  {
            "file":  "subsys/net/ip/tcp.c",
            "function":  "tcpv6_init_isn"
        }
    },
    {
        "deprecated":  false,
        "digest":  {
            "line_hashes":  [
                "240719028537106232540406059886394086849",
                "28516817426080033145515459768093824294",
                "120997338796681465666572722288395181266",
                "300297586729054507621561193462788822333",
                "43674070613642793909573805718661817566",
                "228932791111540318746615380144540514385",
                "25618218647856858049848785158168705524",
                "91241233156233475716963974001372492065",
                "206327748722397498222299095237183395681",
                "263433970625321113361961904525760271656",
                "157986720406021785438453358983579565395",
                "95657695254949771112244189203654399784",
                "43674070613642793909573805718661817566",
                "228932791111540318746615380144540514385",
                "25618218647856858049848785158168705524",
                "91241233156233475716963974001372492065",
                "206327748722397498222299095237183395681",
                "289975980101231424341421003692166503165",
                "177069508300481631742076685202034224842",
                "115399129693079089968471277695454148466",
                "34371382105268544591673415776388801457",
                "233404693951274308512806226445287665844",
                "48199221039592772567864187525817258471",
                "369069943074497317067947852121958041",
                "93391981330329380000494811594931096492",
                "116894349000299223703116997775634709162",
                "63994525366880780973972164478400090667",
                "113408454182495588661126072066058341659"
            ],
            "threshold":  0.9
        },
        "id":  "CVE-2026-19735-c1eb74d1",
        "signature_type":  "Line",
        "signature_version":  "v1",
        "source":  "https://github.com/zephyrproject-rtos/zephyr/commit/700888e3ecff8474f4fe7dfa8782b8869053222b",
        "target":  {
            "file":  "subsys/net/ip/tcp.c"
        }
    }
]
vanir_signatures_modified
"2026-10-28T10:51:08Z"