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

CVE-2023-53611 Linux内核ipmi_si模块内存泄漏漏洞

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

漏洞信息

漏洞编号
CVE-2023-53611
漏洞类型
内存泄漏
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux内核ipmi_si模块

相关标签

内存泄漏Linux内核ipmi_si内核模块本地提权拒绝服务可用性影响CVE-2023-53611

漏洞概述

CVE-2023-53611是Linux内核ipmi_si(Intelligent Platform Management Interface System Interface)驱动模块中的一个内存泄漏漏洞。该漏洞位于`try_smi_init()`函数中,当在分配`new_smi->si_sm`之后但在注册`shutdown_smi()`处理器之前发生错误时,已分配的内存将不会被正确释放。Kmemleak工具检测到了这一泄漏问题,显示在modprobe加载ipmi_si模块时存在1024字节的未引用内存对象。该漏洞影响系统的可用性,虽然不会直接导致数据泄露或权限提升,但长期运行可能导致系统内存耗尽,影响系统稳定性。此漏洞已在Linux内核的多个稳定版本中得到修复,通过在错误处理路径中添加`kfree()`调用来解决内存泄漏问题。

技术细节

该漏洞的技术原理如下:在`try_smi_init()`函数中,系统首先通过`kmalloc()`分配`new_smi->si_sm`结构(大小为1024字节)。然而,在分配完成之后到`shutdown_smi()`注册之前的这段代码路径中,如果发生任何错误(例如硬件检测失败、配置错误等),原有的错误处理代码会跳过对新分配内存的释放,因为此时`shutdown_smi()`回调函数尚未注册到系统中,而该回调函数是正常清理路径中负责释放`si_sm`资源的唯一途径。

利用方式方面,攻击者需要具备本地低权限访问能力(PR:L),可以通过以下方式触发该漏洞:
1. 加载ipmi_si内核模块(通过modprobe ipmi_si命令)
2. 制造特定条件使得模块初始化过程中在关键路径上失败
3. 反复触发该错误路径,导致每次泄漏1024字节的内存
4. 持续累积内存泄漏,最终可能导致系统内存耗尽(OOM)或系统不稳定

该漏洞的CVSS向量为CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H,表明这是一个本地攻击、低复杂度、低权限要求、无需用户交互的漏洞,主要影响系统的可用性。

攻击链分析

STEP 1
步骤1
攻击者获取本地系统的低权限访问权限(PR:L),这是利用该漏洞的前提条件
STEP 2
步骤2
攻击者通过modprobe命令加载ipmi_si内核模块,触发try_smi_init()函数执行
STEP 3
步骤3
在模块初始化过程中,制造条件使得new_smi->si_sm分配之后但在shutdown_smi()注册之前发生错误
STEP 4
步骤4
由于错误处理路径缺少kfree()调用,已分配的1024字节内存未被释放,造成内存泄漏
STEP 5
步骤5
攻击者重复执行上述步骤,持续累积内存泄漏,最终可能导致系统内存耗尽,影响系统可用性

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2023-53611 - Linux kernel ipmi_si memory leak // This PoC demonstrates how to trigger the memory leak in try_smi_init() #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> // The vulnerability is triggered by repeatedly loading the ipmi_si module // under conditions that cause initialization to fail after si_sm allocation // but before shutdown_smi() registration. int main() { int i; printf("CVE-2023-53611 PoC - ipmi_si memory leak\n"); printf("Repeatedly loading ipmi_si module to trigger memory leak...\n"); for (i = 0; i < 100; i++) { // Load the ipmi_si module if (system("modprobe ipmi_si 2>/dev/null") == -1) { perror("modprobe failed"); } // Unload the module to allow reloading if (system("modprobe -r ipmi_si 2>/dev/null") == -1) { perror("modprobe -r failed"); } // Small delay between attempts usleep(100000); } printf("Check kernel log for kmemleak warnings:\n"); printf("dmesg | grep -i kmemleak\n"); return 0; } // Alternative trigger method using modprobe.d configuration: // Create a config file that causes ipmi_si initialization to fail // echo "options ipmi_si type=invalid_type" > /etc/modprobe.d/ipmi_si.conf // Then run: modprobe ipmi_si // Check: cat /sys/kernel/debug/kmemleak

影响范围

Linux kernel < 6.6
Linux kernel 6.6.x (修复前版本)
Linux kernel 6.1.x (修复前版本)
Linux kernel 5.15.x (修复前版本)

防御指南

临时缓解措施
如果无法立即升级内核,可以通过以下临时措施缓解:1)在系统不需要IPMI功能时,通过`echo "blacklist ipmi_si" >> /etc/modprobe.d/blacklist.conf`禁用该模块;2)限制普通用户的模块加载权限;3)监控系统内存使用情况,及时发现异常泄漏;4)启用内核的kmemleak功能进行监控(`echo 1 > /sys/kernel/debug/kmemleak`)。

参考链接

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