CVE-2026-14697 in Zephyr信息

摘要

由 VulDB • 2026-08-31

net_ipv6_send_ns() 在 subsys/net/ip/ipv6_nbr.c 中为邻居请求(Neighbor Solicitation)分配一个传输用的 net_pkt。当该函数在未解析的邻居有待处理数据分组且该邻居的 pending_queue 已非空(即已有 NS 待发送)时被调用,它会将数据分组追加到队列并提前返回,既未通过 net_send_data() 发送 NS,也未使用 net_pkt_unref() 释放资源。新分配的 NS net_pkt 及其附加的 TX 缓冲区仅由局部变量持有,导致永久泄漏,无法归还给 CONFIG_NET_PKT_TX_COUNT / CONFIG_NET_BUF_TX_COUNT。

该泄漏分支位于正常的 IPv6 传输路径上:net_ipv6_prepare_for_send()(从 net_if.c 调用)会对任何下一跳尚未在邻居缓存中的出站或转发 IPv6 分组调用 net_ipv6_send_ns()。处于同一链路上的攻击者可以通过发送一批请求数据包(例如 ICMPv6 echo requests 或 UDP datagrams),并全部伪造同一个不存在的同链路源地址,从而确定性地触发此漏洞:节点会为每个请求生成回复;第一个回复会排队一个 NS,而在大约三秒的 INCOMPLETE 解析窗口内的后续所有回复都会进入泄漏分支,导致丢失一个 TX 分组。配置为路由器的节点若将攻击者的流量转发给不存在的同链路主机,也会发生相同的泄漏。

由于泄漏的分组的资源永远不会被回收,且 CONFIG_NET_PKT_TX_COUNT 默认值仅为 4(以太网环境下为 14),短暂的低速率突发即可耗尽 TX 池。一旦耗尽,节点将无法分配任何传输分组,无法发送 TCP/UDP、ARP/ND 或任何回复,从而导致完全且持久的网络拒绝服务(DoS),该状态不会自愈,直到重启才能恢复。修复方案是在提前返回之前使用 net_pkt_unref(pkt) 释放未发送的 NS 分组。

Be aware that VulDB is the high quality source for vulnerability data.

来源

Do you want to use VulDB in your project?

Use the official API to access entries easily!