CVE-2023-53683CVE-2023-53683是Linux内核HFSplus文件系统中的一个中等严重性漏洞。该漏洞位于hfsplus_cat_read_inode()和hfsplus_cat_write_inode()函数中,由syzbot模糊测试工具发现。漏洞的根本原因是内核在这些函数中使用了WARN_ON()断言来检查长度字段的合法性,但当处理经过精心构造的HFSplus文件系统镜像时,镜像中可能包含伪造的(bogus)长度值,导致WARN_ON()条件被触发。由于WARN_ON()在某些配置下可能导致内核panic或系统不稳定,攻击者可以利用这一缺陷对系统可用性造成严重影响。
该漏洞的CVSS 3.1评分为5.5分,属于中等严重级别。攻击者需要具有本地访问权限和低权限用户身份即可触发该漏洞,无需用户交互。漏洞主要影响系统的可用性(完整性影响为无,机密性影响为低),攻击成功后可能导致系统崩溃或内核panic,从而造成拒绝服务。
此漏洞影响多个Linux内核稳定版本,Linux内核维护团队已通过多个提交修复了该问题,主要的修复方式是移除或替换hfsplus_cat_read_inode()和hfsplus_cat_write_inode()函数中的WARN_ON()调用,改用更温和的错误处理方式(如返回错误码),因为这些条件并非真正的内核bug,不应导致内核panic。
该漏洞存在于Linux内核的HFSplus文件系统驱动中,具体涉及hfsplus_cat_read_inode()和hfsplus_cat_write_inode()两个函数。HFSplus是苹果公司开发的HFS+文件系统格式,Linux内核通过fs/hfsplus目录中的代码提供对该文件系统的读写支持。
在正常情况下,当内核读取或写入HFSplus文件系统的目录条目(catalog)时,会从磁盘上的文件系统结构中读取各种长度字段(如文件名长度、记录长度等)。这些长度字段用于后续的内存分配和数据拷贝操作。原始代码使用WARN_ON()宏来检查这些长度值是否在合理范围内。
然而,WARN_ON()在Linux内核中具有特殊语义:在默认配置下,它会打印警告信息和堆栈回溯;在启用了panic_on_warn的内核配置中,它会直接触发内核panic。这意味着即使是合法的错误条件(如损坏的文件系统),也可能导致系统不可用。
攻击者可以创建一个包含恶意长度值的HFSplus文件系统镜像(例如通过mkfs.hfsplus工具的修改版本或直接编辑二进制数据),然后通过挂载该镜像或访问镜像中的文件来触发hfsplus_cat_read_inode()或hfsplus_cat_write_inode()函数。当函数读取到伪造的长度值时,WARN_ON()条件被满足,触发内核警告,在特定配置下导致系统panic。
修复方案是使用pr_warn()或WARN()等更温和的警告方式,或者直接返回-EIO等错误码,避免触发panic。同时增加对长度值的合理范围检查,确保不会因为异常值导致后续操作出现问题。