CVE-2026-31664该漏洞存在于Linux内核的xfrm(IPsec)框架中。由于`build_polexpire()`函数在构建`struct xfrm_user_polexpire`结构体时,未对`hard`字段后的填充字节执行`memset_after()`清零操作,导致结构体尾部包含未初始化的内核堆内存数据。当内核通过Netlink多播向`XFRMNLGRP_EXPIRE`组发送策略过期消息时,这些未初始化的内存内容会被泄露给用户空间的监听进程。本地低权限攻击者可通过监听Netlink消息获取内核敏感信息,可能辅助绕过安全防御机制。
此漏洞属于典型的内核堆信息泄露漏洞。在Linux内核中,结构体通常为了内存对齐会包含填充字节。`build_polexpire()`函数负责构建策略过期的Netlink消息,它在堆上分配`struct xfrm_user_polexpire`结构体并设置字段。然而,与`build_expire()`函数不同,该函数未在设置`hard`字段后清理后续的填充区域。由于内核堆内存会被频繁复用,这些填充字节可能残留着之前释放对象的数据(如函数指针、密钥片段等)。当内核向订阅了`XFRMNLGRP_EXPIRE`组的用户空间进程发送多播消息时,整个结构体(包括未初始化的填充区)被拷贝到用户空间。攻击者只需拥有本地低权限,编写简单的Netlink监听程序即可捕获这些消息,通过分析填充位的数据推断内核内存布局,进而为KASLR绕过或内核利用链构建提供情报。修复方法是在发送前调用`memset_after()`显式清零尾部。