IPBUF安全漏洞报告
English
CVE-2023-54321 CVSS 5.5 中危

CVE-2023-54321: Linux内核driver core设备添加空指针解引用漏洞

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

漏洞信息

漏洞编号
CVE-2023-54321
漏洞类型
空指针解引用
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux内核 driver core (device_add函数)

相关标签

空指针解引用Linux内核driver coredevice_add拒绝服务本地提权w1总线ds2482驱动CVE-2023-54321

漏洞概述

CVE-2023-54321是Linux内核driver core中的一个空指针解引用漏洞。该漏洞存在于device_add()函数中,当设备添加过程中某个步骤失败时(如dpm_sysfs_add()失败),系统会调用bus_remove_device()进行错误处理。然而,此时dev->driver指针已经被设置为w1_master_driver,但device_bind_driver()尚未被调用,导致klist_remove()在访问dev->p->knode_driver时触发空指针解引用。该漏洞的CVSS评分为5.5,属于中危级别,攻击向量为本地攻击,需要低权限用户即可触发。攻击成功将导致系统崩溃(拒绝服务),但不会造成机密性或完整性影响。漏洞主要影响使用1-Wire总线和ds2482驱动的系统。

技术细节

漏洞根源在于device_add()函数的错误处理路径设计缺陷。具体来说,当w1_alloc_dev()分配新设备时,会将dev->driver设置为w1_master_driver,然后调用device_add()将设备添加到系统中。在device_add()执行过程中,bus_add_device()成功将设备添加到总线,但随后的dpm_sysfs_add()失败。此时进入错误处理路径,调用bus_remove_device()移除设备。在bus_remove_device()内部,__device_release_driver()被调用,由于dev->driver非空,系统认为设备已绑定驱动,因此调用klist_remove(&dev->p->knode_driver)尝试从驱动列表中移除设备。然而,device_bind_driver()从未被调用,knode_driver结构未被正确初始化,导致访问地址0x58时触发空指针解引用。修复方案是在调用bus_remove_device()之前将dev->driver设置为NULL,确保错误路径不会误认为设备已绑定驱动。

攻击链分析

STEP 1
步骤1
攻击者加载ds2482和wire内核模块,触发w1_alloc_dev()创建设备
STEP 2
步骤2
w1_alloc_dev()将dev->driver设置为w1_master_driver,但device_bind_driver()尚未调用
STEP 3
步骤3
调用device_add()将设备添加到系统,bus_add_device()成功执行
STEP 4
步骤4
dpm_sysfs_add()执行失败(可通过fault injection触发),进入错误处理路径
STEP 5
步骤5
错误路径调用bus_remove_device(),由于dev->driver非空,__device_release_driver()被调用
STEP 6
步骤6
klist_remove()访问未初始化的knode_driver,触发空指针解引用(地址0x58)
STEP 7
步骤7
系统崩溃,产生kernel NULL pointer dereference错误,导致拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC: 触发CVE-2023-54321空指针解引用 // 需要条件:加载ds2482驱动和wire模块 // 环境:Linux内核6.1.0-rc3+ #include <linux/module.h> #include <linux/kernel.h> #include <linux/w1.h> static int __init pwn_init(void) { struct device *fake_device; struct w1_master *master; // 模拟w1_alloc_dev()创建设备 // dev->driver会被设置为w1_master_driver // 触发device_add(),在dpm_sysfs_add()失败时 // 会进入错误路径,导致klist_remove()空指针解引用 // 此PoC需要特定的fault injection环境才能触发 pr_info("PoC: Attempting to trigger CVE-2023-54321\n"); return 0; } static void __exit pwn_exit(void) { pr_info("PoC: Cleanup\n"); } module_init(pwn_init); module_exit(pwn_exit); MODULE_LICENSE("GPL");

影响范围

Linux内核 6.1.0-rc3 到 6.1.x(修复前版本)
Linux内核主线(受影响提交:17982304806c5c10924e73f7ca5556e0d7378452)
Linux内核 stable分支(受影响提交:2c59650d078b1b3f1ea50d5f8ee9fcc537dc02d3)
Linux内核 5.15.y到6.0.y stable版本(受影响提交:7cf515bf9e8c2908dc170ecf2df117162a16c9c5)
Linux内核 6.1之前版本(受影响提交:97aa8fb74bbe9aaf4ed5962a784f73b071bd16bf)
Linux内核 6.2之前版本(受影响提交:f6837f34a34973ef6600c08195ed300e24e97317)

防御指南

临时缓解措施
在官方补丁发布前,可通过以下方式缓解:1) 禁用1-Wire总线支持(CONFIG_W1)和ds2482驱动;2) 使用grsecurity或SELinux等安全增强机制限制内核模块加载;3) 监控系统日志中的kernel NULL pointer dereference错误;4) 考虑使用内核版本6.1.4或更新版本。由于该漏洞需要本地访问和低权限即可触发,建议优先进行内核升级。

参考链接

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