CVE-2026-43254Linux内核OpenVPN (ovpn) TCP处理模块存在安全漏洞。在接收TCP流数据时,ovpn_tcp_recv函数处理包含合并数据包的大克隆skb时出错。主要问题包括头偏移溢出导致skb_reset_network_header失败及数据包丢失,以及协议头未对齐导致的性能问题。攻击者可通过特制网络流量触发该漏洞,导致系统丢包甚至拒绝服务。
该漏洞源于Linux内核drivers/net/ovpn/tcp.c文件中ovpn_tcp_recv函数的实现缺陷。当OpenVPN通过TCP传输数据时,内核会将数据包聚合成流。原始代码使用pskb_pull在克隆的skbs上移动数据指针以提取数据包。首先,当处理聚合的大数据包时,计算出的偏移量可能超过skb->network_header的u16存储上限。这导致后续调用skb_reset_network_header失败,触发数据包丢弃逻辑,造成可用性受损。其次,OpenVPN在TCP数据包前使用2字节长度前缀,这导致后续的4字节操作码和包ID字段在内存中自然未对齐。在不对齐访问效率低的架构上,这会严重影响性能,且可能引发潜在的稳定性问题。攻击者可利用此缺陷发送特制的TCP流数据,诱导内核处理包含特定偏移量的聚合数据包,从而触发上述逻辑错误,导致服务拒绝。