CVE-2023-53662CVE-2023-53662是Linux内核ext4文件系统中存在的一个内存泄漏漏洞。该漏洞位于ext4_fname_setup_filename()和ext4_fname_prepare_lookup()两个函数中。当文件名大小写折叠(casefolding)操作失败时,fscrypt_name结构体中的crypto_buf.name成员所分配的内存未被正确释放,导致内存泄漏。
该漏洞由Linux内核安全团队发现并修复,CVSS评分为5.5分,属于中危级别。漏洞的攻击向量为本地攻击(AV:L),攻击者需要具备低权限(PR:L),无需用户交互(UI:N)。虽然机密性和完整性影响较低,但可用性影响为高(A:H),意味着该漏洞可被利用导致系统资源耗尽,进而引发拒绝服务。
该漏洞影响所有使用ext4文件系统并启用文件名加密(fscrypt)功能的Linux内核版本。在启用了casefolding功能的ext4文件系统中,当文件系统尝试对加密文件名进行大小写不敏感查找时,如果casefolding操作因异常情况失败,错误处理路径未能正确释放之前分配的加密缓冲区内存,从而产生内存泄漏。随着时间推移,持续触发该漏洞路径可能导致内核内存耗尽,影响系统稳定性。
该漏洞已在多个Linux内核稳定版本中得到修复,包括1fb3f1bbfdb511034b0360dbeb0f6a8424ed2a5c、36daf050be3f6f067631dc52054de2d3b7cc849f、7ca4b085f430f3774c3838b3da569ceccd6a0177和98fc9c2cc45cfcb56961a73de3ec69b474063fc0等提交修复了该问题。建议用户尽快升级到包含修复的内核版本。
该漏洞的技术根源在于ext4文件系统的文件名查找路径中内存管理不当。具体而言,ext4_fname_setup_filename()和ext4_fname_prepare_lookup()函数负责在执行目录查找操作前准备文件名,包括分配加密缓冲区(crypto_buf)用于存储加密后的文件名数据。
在正常执行流程中,这些函数会调用fscrypt_setup_filename()或相关函数来设置加密文件名,该过程会分配crypto_buf.name内存。如果在后续的casefolding操作(即大小写折叠处理)过程中发生错误,原始代码的错误处理路径(goto err或return -ERROR)未能调用kfree()释放已分配的crypto_buf.name内存,导致内存泄漏。
利用方式方面,攻击者需要满足以下条件:1)在本地拥有低权限账户;2)目标系统使用ext4文件系统且启用了fscrypt加密功能;3)文件系统挂载时启用了casefolding选项。攻击者可以通过创建特殊构造的文件名或目录名,触发casefolding失败路径,持续消耗内核内存。虽然每次泄漏的内存量较小,但通过反复触发可导致内核内存资源逐渐耗尽,最终触发OOM(Out of Memory)killer,影响系统可用性。
修复方案是在两个函数的错误处理路径中添加kfree(fname->crypto_buf.name)调用,确保在异常情况下正确释放已分配的内存资源。