CVE-2025-39951CVE-2025-39951是Linux内核中virtio_uml模块存在的一个高危释放后使用(Use-After-Free)漏洞。该漏洞位于User-Mode Linux(UML)架构的virtio_uml驱动中,具体出现在virtio_uml_probe()函数的错误处理路径中。当register_virtio_device()函数调用失败时,代码错误地将vu_dev->registered标志设置为1,但此时设备实际上并未成功注册。这种不一致的状态管理会导致后续的put_device()调用触发释放后使用漏洞,可能造成内存损坏、系统崩溃或权限提升。攻击者需要具有本地低权限访问权限即可利用此漏洞,无需用户交互。该漏洞的CVSS 3.1评分为7.8分,属于高危级别,对系统的机密性、完整性和可用性均产生高影响。此漏洞影响了多个Linux内核稳定版本,Linux内核维护团队已发布多个补丁进行修复,涉及多个稳定分支的提交记录。
该漏洞的核心问题在于virtio_uml_probe()函数中错误的状态管理逻辑。在Linux内核的virtio_uml驱动中,当probe函数调用register_virtio_device()尝试注册virtio设备时,如果注册过程失败(例如由于资源不足或设备状态异常),函数应当正确处理失败情况。然而,原始代码在错误处理路径中错误地将vu_dev->registered设置为1,这表示设备已经被注册,但实际上注册操作已经失败。
当registered标志被错误地设置为1时,后续的清理代码(如put_device调用)会认为设备已经成功注册并执行相应的清理流程,但实际上设备结构可能已经被部分释放或处于不一致状态。这导致了一个典型的释放后使用场景:内核代码在设备已经被释放或部分释放的内存区域上继续执行操作。
利用方式方面,攻击者首先需要获得目标系统的本地低权限访问权限(PR:L)。然后通过触发virtio_uml设备的probe流程失败(例如通过精心构造的设备配置或资源限制),使代码进入错误处理路径。由于registered标志的错误设置,内核会在错误的内存区域执行put_device操作,可能导致:1)内核panic或系统崩溃;2)通过控制被释放的内存内容实现权限提升;3)读取或修改内核内存中的敏感数据。由于该漏洞影响可用性、完整性和机密性三个维度,且无需用户交互即可触发,构成了严重的安全威胁。