CVE-2023-53687CVE-2023-53687是Linux内核中三星串口驱动(samsung_tty)的一个内存泄漏漏洞。该漏洞位于s3c24xx_serial_getclk()函数中,在搜索最佳时钟频率(best clk)的过程中存在内存泄漏问题。具体而言,当函数遍历所有可能的时钟源并寻找最佳匹配时,如果找到了更好的匹配项,之前已分配的时钟资源(如果存在)需要被正确释放。同样,如果已经找到了更好的匹配项,新的候选时钟也需要被释放,否则将导致内存泄漏。该漏洞的CVSS评分为5.5,属于中危级别,攻击向量为本地攻击,需要低权限认证,无需用户交互。虽然机密性和完整性影响较低,但可用性影响为高,攻击者可能通过反复触发该漏洞路径导致系统内存资源耗尽,从而引发拒绝服务(DoS)状态。该漏洞影响使用三星Exynos等基于ARM架构的SoC的Linux设备,包括许多嵌入式系统和移动设备。漏洞已在2025年10月7日公开披露,并已在多个Linux内核稳定版本中修复。
该漏洞的技术原理在于s3c24xx_serial_getclk()函数中时钟资源管理的逻辑缺陷。在Linux内核的三星串口驱动中,当系统需要获取合适的时钟源时,会调用s3c24xx_serial_getclk()函数遍历所有可用的时钟(clk),并选择最匹配的一个。问题出在迭代过程中:
1. 函数通过循环遍历所有可能的时钟节点;
2. 在每次迭代中,如果当前时钟比之前找到的'最佳'时钟更匹配,代码会更新'最佳'时钟指针;
3. 但在更新之前,没有释放之前已选择的时钟资源,导致旧的时钟句柄泄漏;
4. 此外,如果已经找到了最佳匹配,对于后续不匹配的候选时钟,如果代码路径中分配了新的时钟但未正确释放,也会造成泄漏。
利用方式方面,由于该漏洞需要本地低权限访问(PR:L),攻击者可以通过以下方式利用:
1. 拥有目标系统本地账户的低权限用户;
2. 通过反复打开/关闭串口设备或触发相关的驱动初始化路径;
3. 每次触发都会泄漏一小部分内存;
4. 长时间运行后,系统内存逐渐耗尽;
5. 最终导致系统性能下降或内核因内存不足而崩溃(kernel panic),形成拒绝服务攻击。
修复方案是在更新最佳时钟之前,正确调用clk_put()释放旧时钟,并在不需要新时钟时释放新分配的时钟资源。