CVE-2023-53604CVE-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()调用,确保资源被正确释放。