CVE-2023-53651CVE-2023-53651是Linux内核中exc3000输入设备驱动程序存在的一个中等严重性安全漏洞,CVSS评分为5.5。该漏洞的根本原因在于驱动程序在卸载(unbind)或探测失败(probe failure)时未能正确停止已启动的定时器(timer)。exc3000驱动用于支持EETI的exc3000系列触摸屏控制器,当驱动程序被卸载或初始化失败时,如果没有调用del_timer_sync()等函数来停止之前注册的定时器,该定时器仍可能在后台继续运行。由于定时器回调函数可能会访问已经被释放或重新分配的驱动程序数据结构,这将导致Use-After-Free(UAF)漏洞,触发内核Oops甚至更严重的系统崩溃。该漏洞的攻击向量为本地攻击(AV:L),攻击者需要具备低权限(PR:L),无需用户交互(UI:N),对机密性影响较低(C:L),对完整性无影响(I:N),但对系统可用性影响较高(A:H)。该漏洞已在Linux内核的多个稳定版本中通过提交526a177ac6353d65057eadb5d6edafc168f64484、79c81d137d36f9635bbcbc3916c0cccb418a61dd和bee57c20fc0ca5ef9b9a53a0335eab2ac9e9cae1进行了修复。
从技术层面分析,该漏洞存在于Linux内核的drivers/input/touchscreen/exc3000.c驱动文件中。exc3000驱动使用内核定时器(kernel timer)机制来实现触摸屏数据的轮询或周期性检测功能。在驱动的probe函数中,初始化时会通过setup_timer()或timer_setup()注册定时器,并通过mod_timer()或add_timer()启动定时器。然而,在驱动的disconnect(移除)或probe失败的处理路径中,开发人员遗漏了调用del_timer_sync()来安全地停止并等待定时器执行完毕。当驱动模块被卸载或probe失败时,内核会释放驱动相关的私有数据结构(如exc3000_data),但定时器仍然处于激活状态并可能在未来某个时刻触发。定时器回调函数在执行时会尝试访问已释放的私有数据,导致经典的Use-After-Free场景。这种UAF可能导致多种后果:1)内核Oops崩溃(最常见);2)如果攻击者能够控制被释放内存的内容,可能实现权限提升;3)系统不稳定或拒绝服务。修复方案是在remove()函数和probe错误处理路径中添加timer_shutdown_sync()或del_timer_sync()调用,确保在释放资源前先停止定时器。该漏洞的利用需要本地访问权限,攻击者通常需要能够加载和卸载内核模块(如通过有物理访问权限或通过其他低权限漏洞),然后触发exc3000设备的插拔事件来触发定时器竞争条件。