CVE-2023-53544CVE-2023-53544是Linux内核cpufreq子系统davinci驱动中的一个释放后使用(Use-After-Free)漏洞。该漏洞位于驱动移除函数中,在调用cpufreq_unregister_driver()注销驱动之前,代码首先释放了时钟(clk)资源。由于注销操作与时钟释放之间存在竞态条件,如果在此时间窗口内有cpufreq回调函数被触发,将导致对已释放时钟资源的非法访问。该漏洞的CVSS评分为7.8,属于高危级别。攻击者需要本地低权限访问即可利用此漏洞,可能造成内核崩溃、信息泄露或权限提升等严重后果。该漏洞影响了多个Linux内核稳定版本,Linux内核维护者已发布多个补丁版本进行修复。漏洞的根本原因在于资源释放顺序不当,未能正确处理驱动注销与资源释放之间的同步问题,属于典型的内核驱动编程错误。
该漏洞的技术原理如下:在Linux内核的cpufreq davinci驱动中,remove函数负责在设备卸载时清理资源。原始代码的执行顺序为:1)首先释放clk时钟资源;2)然后调用cpufreq_unregister_driver()注销cpufreq驱动。然而,在第1步和第2步之间存在一个时间窗口,如果在此期间有cpufreq回调函数(如target、get等)被调用,这些回调函数会尝试访问已经被释放的clk指针,从而触发use-after-free漏洞。攻击利用方式:本地攻击者可以通过反复触发设备的热插拔操作(如绑定/解绑驱动),在remove函数执行clk_free后但cpufreq_unregister_driver完成前的时间窗口内,触发cpufreq回调函数,从而导致对已释放内存的访问。成功利用可能导致:1)内核崩溃(拒绝服务);2)通过控制释放后的内存内容实现权限提升;3)潜在的内核信息泄露。修复方案是调整资源释放顺序,先调用cpufreq_unregister_driver()确保不再有回调访问clk资源,然后再释放clk。