CVE-2023-53629CVE-2023-53629是Linux内核中分布式锁管理器(DLM,Distributed Lock Manager)中间件通信(midcomms)模块中存在的一个高危释放后使用(Use-After-Free)漏洞。该漏洞位于fs/dlm/midcomms.c文件中的dlm_midcomms_commit_mhandle函数中。当DLM在softirq(软中断)上下文中处理消息时,存在对已释放内存的非法访问问题。
根据KASAN(Kernel Address Sanitizer)报告,该漏洞在lock_torture测试场景下被触发。当进程执行锁转换(convert_lock)操作时,DLM会分配消息句柄(mhandle)并通过send_common函数发送消息。然而,在软中断上下文中处理消息时,dlm_midcomms_commit_mhandle函数尝试访问已被释放的mhandle对象,导致内核读取已释放内存中的数据。
该漏洞的CVSS评分为7.8,属于高危级别。攻击者需要本地低权限访问权限,无需用户交互即可利用。成功利用此漏洞可能导致内核崩溃(拒绝服务)、权限提升或任意代码执行,对系统的机密性、完整性和可用性均产生高影响。该漏洞影响了多个Linux内核稳定版本,需要及时修复以确保系统安全。
该漏洞的根本原因在于DLM中间件通信模块中消息句柄(mhandle)的生命周期管理不当。具体技术细节如下:
1. **消息分配阶段**:当用户空间进程通过dlm_lock系统调用发起锁操作时,内核会调用dlm_midcomms_get_mhandle函数分配一个新的消息句柄mhandle,然后通过_create_message创建消息结构。
2. **消息发送阶段**:消息通过send_common函数发送到目标节点。在此过程中,mhandle对象被传递给midcomms层进行传输。
3. **释放后使用触发**:问题出现在dlm_midcomms_commit_mhandle函数中。当消息在softirq上下文(即网络软中断)中处理时,该函数尝试读取mhandle中的字段(如mheader->h_seq或类似字段),但此时mhandle可能已经被释放。
4. **竞争条件**:漏洞涉及软中断上下文与进程上下文之间的竞争条件。在软中断处理过程中,消息句柄可能在被访问之前就被释放,导致use-after-free。
5. **触发路径**:从调用栈可以看出,触发路径为dlm_lock -> convert_lock -> _convert_lock -> send_common -> create_message -> dlm_midcomms_get_mhandle(分配),然后在softirq上下文中dlm_midcomms_commit_mhandle触发use-after-free。
利用方式:本地攻击者可以通过反复执行DLM锁转换操作来触发竞争条件,导致内核读取已释放的内存。通过精心构造时序,攻击者可能实现权限提升或在内核上下文中执行任意代码。