CVE-2026-43040Linux内核的IPv6邻居发现协议(NDISC)组件中存在一个高危信息泄露漏洞(CVE-2026-43040)。该漏洞源于在处理带有用户选项的路由器通告(RA)时,内核构建的RTM_NEWNDUSEROPT netlink消息中包含未初始化的内存填充字段。具体而言,nduseroptmsg结构体中的三个填充字段未被清零,导致其保留了内核栈上的旧数据。具有本地低权限的攻击者可以通过监听netlink消息获取这些未初始化的数据,从而造成内核内存信息泄露。该漏洞CVSS v3.1评分为7.1,虽然不需要用户交互且利用难度较低,但由于需要本地访问权限,其危害主要在于作为进一步攻击的信息收集手段。
该漏洞位于Linux内核的net/ipv6/ndisc.c文件中,具体涉及`ndisc_ra_useropt`函数。当网络接口接收到IPv6路由器通告(RA)且其中包含用户选项时,内核需要将此信息通过Netlink套接字通知用户空间守护进程。为此,内核会在栈上分配一个`nduseroptmsg`结构体。
结构体定义中包含了`nduseropt_pad1`、`nduseropt_pad2`和`nduseropt_pad3`三个填充字段,用于字节对齐。然而,在旧代码逻辑中,仅仅声明了该结构体变量,并未使用memset或初始化器将这些填充区域清零。由于栈内存是复用的,这些填充字段中可能残留着之前函数调用留下的敏感数据(如内核指针、函数返回地址或其他进程的数据)。
当内核通过netlink协议将这个结构体发送给用户空间时,未初始化的内存内容随消息一同被发送。攻击者只需拥有本地低权限账号,并创建一个监听RTM_NEWNDUSEROPT消息的Netlink套接字,即可捕获这些数据包。通过分析捕获到的消息载荷中的特定偏移量(即padding字段的位置),攻击者可以解析出泄露的内核内存内容,从而绕过KASLR(内核地址空间随机化)等安全防御机制,为后续的本地提权或内核攻击奠定基础。修复方案非常直接,即在发送消息前显式地将整个结构体或特定的padding字段置零。