CVE-2023-53601CVE-2023-53601是Linux内核bonding(网络绑定)驱动中的一个安全漏洞。该漏洞源于bonding驱动在其ndo_start_xmit()网络设备发送函数中错误地假设了skb(socket buffer)的mac_header已被正确设置。当通过AF_PACKET原始套接字发送数据包时,由于未经过正常的网络协议栈处理流程,skb的mac_header可能未被初始化或设置,导致在调用skb_mac_offset()宏时触发内核警告(WARNING)并可能导致系统不稳定。
该漏洞由syzkaller模糊测试工具发现,在Linux内核6.1.30版本中被捕获。漏洞触发时会在skbuff.h的skb_mac_offset处产生内核警告信息,调用链涉及bond_xmit_hash、bond_xmit_3ad_slave_get、bond_3ad_xor_xmit以及__bond_start_xmit等关键函数。虽然CVSS评分为5.5分(中等严重程度),但该漏洞可导致系统可用性受损,在特定配置下可能引发拒绝服务攻击。受影响的场景包括使用bonding驱动的3AD XOR模式的系统。
从技术层面分析,该漏洞的根本原因在于Linux内核网络子系统中skb结构体的mac_header字段使用约定。正常情况下,当数据包经过网络协议栈时,内核会调用skb_reset_mac_header()来设置mac_header指向以太网帧头。然而,通过AF_PACKET套接字使用packet_direct_xmit路径直接发送数据包时,可能不会设置mac_header。
在bonding驱动的bond_3ad_xor_xmit函数中,调用链依次为:__bond_start_xmit -> bond_3ad_xor_xmit -> bond_xmit_3ad_xor_slave_get -> bond_xmit_hash。在bond_xmit_hash函数中(drivers/net/bonding/bond_main.c:4170),代码调用了skb_mac_offset(skb)宏,该宏内部访问skb->mac_header字段。当mac_header未被设置时,宏内部的检查条件skb_mac_header_was_set(skb)返回false,触发BUG_ON或WARN_ON断言,导致内核打印警告信息。
利用方式:攻击者需要本地低权限访问权限,通过创建AF_PACKET套接字并发送特定构造的数据包到配置为3AD XOR模式的bonding接口即可触发该漏洞。漏洞的CVSS向量为CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H,表明这是一个本地攻击、低复杂度、低权限要求的漏洞,主要影响系统可用性。修复方案是使用skb->data直接访问数据,而非依赖mac_header字段。