CVE-2026-31472Linux内核的xfrm子系统(具体为IPTFS组件)存在一个安全漏洞,该漏洞源于未对解密后IPTFS载荷中的内部IPv4包头长度字段进行充分验证。攻击者可以通过发送特制的ESP数据包(其中包含tot_len为0的内部IPv4头)来触发此漏洞。这会导致内核在软中断上下文中陷入无限循环,从而消耗系统资源并导致拒绝服务。该问题的根本原因是IPTFS在数据包到达标准IP协议栈验证层之前就对其进行了提取和处理,绕过了常规的安全检查。
漏洞具体存在于Linux内核net/xfrm/iptfs.c文件的`__input_process_payload()`函数中。当IPTFS处理解密后的载荷时,代码解析内部IPv4数据包的`tot_len`和`ihl`字段,但缺乏必要的边界检查。攻击者可以构造一个恶意的ESP数据包,将其内部IPv4头的`tot_len`字段设置为0。在处理过程中,`iplen`变量将被赋值为0,导致`capturelen = min(0, remaining)`的结果也为0。因此,在处理循环`while(data < tail)`中,数据指针永远不会向后移动,导致循环无法终止。由于此循环运行在软中断(softirq)上下文中,系统CPU将被该进程完全占用,无法响应其他网络请求或系统任务,从而导致系统拒绝服务。正常的IP协议栈通常在`ip_rcv_core()`函数中进行此类长度验证,但IPTFS机制在数据包到达该层之前就提前提取并处理了内部数据包,从而导致了这一安全盲区。