net_if_ipv6_calc_reachable_time() in subsys/net/ip/net_if.c derives a randomized ND reachable time from ipv6->base_reachable_time as min_reachable + sys_rand32_get() % (max_reachable - min_reachable), where min_reachable = base/2 and max_reachable = 3*base/2 using integer division. When base_reachable_time is 1, both min_reachable and the modulus collapse so the function returns 0, and net_if_ipv6_set_reachable_time() stores that 0 into ipv6->reachable_time.
The base_reachable_time is attacker-controlled: handle_ra_input() in subsys/net/ip/ipv6_nbr.c accepts the Reachable Time field of an incoming Router Advertisement whenever it is nonzero and <= MAX_REACHABLE_TIME, so a single unauthenticated, link-local RA carrying a Reachable Time of 1 drives the computed reachable time to 0. Router Advertisements are unauthenticated by default and require only adjacency to the target link.
When a neighbor is subsequently confirmed reachable, net_ipv6_nbr_set_reachable_timer() reads the value and executes NET_ASSERT(time, "Zero reachable timeout!"). On builds with CONFIG_ASSERT enabled this triggers a fatal kernel assertion — a remote denial of service; on builds without assertions the reachable timer is armed with K_MSEC(0) and fires immediately, forcing reachable neighbors into perpetual re-solicitation (STALE), degrading Neighbor Discovery. The impact is limited to availability; there is no memory-safety, confidentiality, or integrity consequence.
{
"cna_assigner": "zephyr",
"cwe_ids": [
"CWE-617"
],
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/15xxx/CVE-2026-15893.json"
}"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-15893.json"
[
{
"deprecated": false,
"digest": {
"function_hash": "182681815047846322431475769106410366799",
"length": 319
},
"id": "CVE-2026-15893-1f577ae1",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/251079ed50464aa0976eb0738a5afbe009cc9d60",
"target": {
"file": "subsys/net/ip/net_if.c",
"function": "net_if_ipv6_calc_reachable_time"
}
},
{
"deprecated": false,
"digest": {
"line_hashes": [
"62456918687243599427324157859222429331",
"180364764747878106792660337274722553555",
"45857866936001433803126987754033211369",
"266130666490979423480821628237437534232",
"132482748126583528675940258433982398404",
"145518796618002063109932855948724647631",
"234421704542647271396025410894190203337",
"222538889391292852128983690784163325260",
"131104435943552725386414307920383595640",
"151544482934419177424503270952855184674",
"129557033610055631872993883967123735944",
"277103191223392816432180832419759599112"
],
"threshold": 0.9
},
"id": "CVE-2026-15893-97178f54",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/251079ed50464aa0976eb0738a5afbe009cc9d60",
"target": {
"file": "subsys/net/ip/net_if.c"
}
}
]
"2026-09-16T08:29:35Z"