CVE-2026-23003CVE-2026-23003是Linux内核中的一个高危安全漏洞,位于net/ipv6/ip6_tunnel.c文件中的ip6_tunnel模块。该漏洞源于__ip6_tnl_rcv()函数在处理带有VLAN封装的IPv6隧道数据包时,未能正确处理VLAN封装结构。漏洞使用了pskb_inet_may_pull()函数而非专门处理VLAN的skb_vlan_inet_prepare()函数,导致在ECN(显式拥塞通知)解封装过程中访问了未初始化的内存区域。该问题最初由syzbot模糊测试工具发现,触发了KMSAN(Kernel Memory Sanitizer)检测到的uninit-value错误。攻击者可通过构造特制的IPv6隧道数据包(包含VLAN标签)来触发此漏洞,可能导致内核崩溃(拒绝服务)。由于CVSS评分达到7.5分且无需认证即可远程利用,该漏洞对互联网上的Linux服务器构成中等威胁。
该漏洞发生在Linux内核的IPv6隧道处理代码中。当__ip6_tnl_rcv()函数接收到带有VLAN标签的IPv6数据包时,代码流程如下:首先数据包通过tun设备进入系统(tun_get_user函数),然后经过gre_rcv()函数处理,在ip6_tnl_rcv()中调用__ip6_tnl_rcv()。问题出现在ECN解封装阶段:IP6_ECN_decapsulate函数尝试访问数据包的IP头信息,但由于VLAN标签的存在,实际的IP头位置计算错误。代码使用pskb_inet_may_pull()来准备skb数据,但该函数不会处理VLAN标签偏移。正确做法是使用skb_vlan_inet_prepare(),该函数专门处理VLAN和IP层的组合偏移。这导致__INET_ECN_decapsulate在读取未正确初始化的内存时触发KMSAN警告。漏洞影响所有使用ip6_tunnel模块处理外部VLAN封装的IPv6隧道流量。修复方案是在相关代码路径中使用skb_vlan_inet_prepare()替代pskb_inet_may_pull()。