IPBUF安全漏洞报告
English
CVE-2026-43464 CVSS 7.5 高危

CVE-2026-43464 Linux内核mlx5e驱动XDP内存破坏漏洞

披露日期: 2026-05-08
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2026-43464
漏洞类型
内存引用错误
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelXDPDoSMemory Corruptionmlx5e

漏洞概述

Linux内核mlx5e驱动在处理XDP多缓冲区时存在引用计数错误。当XDP程序调用函数修改数据包布局(如收缩尾部)时,驱动未能正确追踪被丢弃的内存片段。这导致页面池引用计数异常,触发内核WARNING,进而可能引发系统崩溃或拒绝服务。

技术细节

漏洞根因在于Linux内核net/mlx5e驱动对XDP多缓冲区片段的计数逻辑错误。在legacy RQ模式下,当XDP程序通过bpf_xdp_pull_data或bpf_xdp_adjust_tail修改缓冲区布局时,驱动程序未能正确统计被丢弃的页面片段。此前修复虽然解决了布局变化的问题,却忽略了片段释放时的引用计数维护。在执行XDP_TX、XDP_REDIRECT或XDP_PASS动作时,若最后一个片段因数据包收缩而被释放,驱动侧仍保留原计数,导致pp_ref_count变为负数。这一错误会在mlx5e_page_release_fragmented函数中触发内核WARNING及回溯信息,严重时可导致系统崩溃。攻击者需能向目标系统发送网络流量并触发特定的XDP处理逻辑,从而造成拒绝服务。

攻击链分析

STEP 1
步骤1:发送特制流量
攻击者向目标服务器发送特定大小的网络数据包(如3600字节)。
STEP 2
步骤2:触发XDP处理
数据包到达网卡后,被挂载的XDP程序截获并处理。
STEP 3
步骤3:修改缓冲区布局
XDP程序调用bpf_xdp_adjust_tail收缩数据包尾部,改变内存布局。
STEP 4
步骤4:驱动计数错误
mlx5e驱动处理修改后的数据包时,未正确计算释放的尾部片段,导致引用计数下溢。
STEP 5
步骤5:系统崩溃
内核尝试释放页面时检测到负引用计数,触发WARNING并可能导致内核崩溃(DoS)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <linux/bpf.h> #include <bpf/bpf_helpers.h> // Conceptual PoC for CVE-2026-43464 // This XDP program triggers the vulnerability by shrinking the tail. SEC("xdp") int xdp_shrink_tail(struct xdp_md *ctx) { // Shrink the packet size by 256 bytes as mentioned in the description // Payload size should be around 3600 bytes to hit the specific frag logic int offset = 256; int ret = bpf_xdp_adjust_tail(ctx, -offset); if (ret) { return XDP_PASS; } // Return XDP_TX to trigger the frag counting logic in the driver return XDP_TX; } char _license[] SEC("license") = "GPL";

影响范围

Linux Kernel < 6.19.0-rc3

防御指南

临时缓解措施
建议立即应用官方发布的内核补丁。如果无法立即升级,可考虑暂时禁用网卡上的XDP功能或卸载相关的XDP程序,以避免触发该漏洞。

参考链接