CVE-2023-53677CVE-2023-53677是Linux内核drm/i915图形驱动中的一个内存泄漏漏洞。该漏洞位于i915驱动的自测试(selftests)代码中,具体在fake_get_pages函数中。当该函数在错误处理路径上提前返回(error escape)时,未能正确释放已分配的内存资源,导致内存泄漏问题。该漏洞由Linux内核安全团队发现并修复,原始修复提交为8bfbdadce85c4c51689da10f39c805a7106d4567,随后被回移植到稳定内核版本中。
根据CVSS 3.1评分标准,该漏洞评分为5.5分,属于中等严重等级。攻击者需要本地访问权限和低权限账户即可触发该漏洞,但无需用户交互。该漏洞不会影响系统的机密性和完整性,但会对系统可用性产生高影响——随着内存泄漏的持续累积,可能导致系统内存耗尽,从而引发系统性能下降甚至拒绝服务状态。由于该漏洞存在于内核自测试代码中,触发条件相对有限,主要影响运行i915驱动自测试的系统环境,如开发测试平台或持续集成环境。
该漏洞的技术原理在于Linux内核i915驱动的自测试框架中fake_get_pages函数的错误处理逻辑存在缺陷。fake_get_pages函数用于模拟获取GEM(Graphics Execution Manager)对象的物理页面,在自测试环境中模拟真实的页面分配行为。
在原始代码实现中,当函数执行过程中遇到错误条件时,会通过goto语句或直接return方式跳转到错误处理路径。然而,在这些错误转义路径(error escape paths)中,之前通过kmalloc、kvmalloc等内存分配函数成功分配的内存缓冲区未被正确释放,导致每次错误路径触发时都会泄漏一定数量的内存。
具体而言,漏洞触发流程如下:
1. fake_get_pages函数被i915 selftests调用以模拟页面获取操作
2. 函数内部分配了用于存储模拟页面数据的内存结构(如struct page数组或scatterlist)
3. 在后续处理过程中(如sg_alloc_table_from_pages或类似操作)发生错误
4. 错误处理路径直接返回,跳过了之前分配的内存的释放逻辑
5. 随着自测试的反复执行或长时间运行,泄漏的内存不断累积
利用方式方面,由于该漏洞位于内核自测试代码中,攻击者通常需要能够触发i915驱动的自测试模块执行才能利用此漏洞。在生产环境中利用价值较低,但在开发环境或测试环境中,攻击者可以通过反复触发相关selftest路径来耗尽系统内存资源,导致系统不稳定或拒绝服务。该漏洞的利用需要本地低权限访问权限,但不需要特殊权限提升。