CVE-2023-53572CVE-2023-53572是Linux内核中i.MX SoC平台时钟驱动(clk: imx: scu)中的一个高危释放后使用(Use-After-Free)漏洞。该漏洞位于Linux内核的时钟管理子系统中,具体涉及NXP i.MX系列处理器使用的SCU(System Controller Unit,系统控制单元)固件接口驱动。
该漏洞的根本原因在于内核驱动在遍历链表并释放节点时,使用了不安全的链表迭代宏。代码中使用标准的list_for_each_entry()宏来遍历链表中的时钟节点(clk),但在循环体内对当前节点执行了释放操作(kfree)。当标准迭代宏尝试通过已被释放的节点指针获取下一个节点时,会导致对已释放内存的解引用操作,从而触发内核级别的Use-After-Free漏洞。
该漏洞的CVSS 3.1评分为7.8分,属于高危级别。攻击者需要本地访问权限和低权限即可利用此漏洞,无需用户交互。成功利用后,攻击者可以实现权限提升,可能导致内核崩溃(拒绝服务)或执行任意内核代码,对系统的机密性、完整性和可用性造成严重影响。该漏洞影响多个Linux内核稳定版本,包括5.10.x、5.15.x、6.1.x和6.6.x等长期支持分支。
该漏洞的技术原理如下:
在Linux内核的clk-imx-scu.c驱动文件中,存在一个链表遍历循环,用于清理或释放时钟资源。原始代码使用了list_for_each_entry()宏进行链表迭代,该宏的工作原理是通过当前节点的next指针获取下一个节点。然而,当循环体内部调用kfree(clk)释放当前节点后,next指针指向的内存已被释放,但标准迭代宏仍会尝试通过该已释放的指针访问下一个节点,从而触发Use-After-Free。
利用方式:
1. 攻击者需要具有本地系统访问权限和低权限用户账号(PR:L)。
2. 触发条件涉及i.MX SCU时钟子系统的特定代码路径,例如在系统关机、模块卸载或时钟资源清理过程中。
3. 攻击者可以通过精心设计的系统调用序列,强制内核进入存在缺陷的链表遍历代码路径。
4. 当内核尝试解引用已释放的clk结构体时,可能导致:
- 内核崩溃(NULL指针解引用或无效内存访问),造成拒绝服务攻击。
- 在特定条件下,通过控制被释放内存的内容(堆喷射),实现任意代码执行,进而获取内核权限。
修复方案是使用list_for_each_entry_safe()宏替代标准的list_for_each_entry()。安全版本的迭代宏会在循环开始前预先保存下一个节点的指针,即使当前节点被释放,也能安全地获取下一个有效节点,从而避免Use-After-Free问题。