CVE-2023-53679CVE-2023-53679是Linux内核mt7601u WiFi驱动程序中的一个整数下溢漏洞。该漏洞位于mt7601u_rx_process_seg()和mt7601u_rx_skb_from_seg()函数中,由于URB数据包中的dma_len变量可被操控,导致seg_len发生整数下溢,进而绕过mt7601u_rx_skb_from_seg()中的bad_frame检查,最终引发空指针解引用。该漏洞由经过修改的syzkaller模糊测试工具发现,CVSS评分为5.5,属于中危级别。攻击者需要本地低权限访问即可触发该漏洞,无需用户交互,但会对系统可用性造成高影响(系统崩溃/内核panic)。该漏洞影响使用mt7601u USB WiFi适配器的Linux系统,触发后会通过softirq上下文中的tasklet执行路径导致内核崩溃。KASAN(Kernel Address Sanitizer)报告了空指针解引用错误,崩溃发生在skb_add_rx_frag函数中,表明问题出在接收数据帧的处理流程中。
该漏洞的根本原因是mt7601u驱动程序在处理USB接收URB(USB Request Block)数据包时,未对dma_len进行充分的边界校验。具体技术细节如下:
1. 在mt7601u_rx_process_seg()函数中,seg_len的计算依赖于URB包中的dma_len字段。当攻击者通过恶意WiFi设备或USB流量注入控制dma_len值时,可能使其小于预期的最小段长度(min_seg_len)。
2. 当seg_len发生整数下溢(变为一个很大的无符号值),后续的bad_frame检查逻辑被绕过,因为下溢后的值会通过正常的范围检查。
3. 进入mt7601u_rx_skb_from_seg()函数后,由于传入的指针p为NULL(因为seg_len下溢导致跳过正常的内存分配),最终在skb_add_rx_frag()中触发空指针解引用。
4. 修复方案是在处理前增加条件判断,确保dma_len大于min_seg_len,从而防止整数下溢的发生。
利用条件:攻击者需要物理访问或本地权限,能够发送特制的USB数据包或使用恶意WiFi设备。漏洞通过softirq上下文触发,导致内核崩溃(kernel panic),系统拒绝服务。