CVE-2022-50485CVE-2022-50485是Linux内核ext4文件系统中存在的一个安全漏洞。该漏洞源于ext4_iget()函数在获取引导加载程序inode时,允许返回一个未初始化的坏inode(bad inode)。在ext4文件系统的正常操作中,许多代码路径在遇到坏inode时会出现异常并导致内核崩溃(kernel panic)。然而,当获取引导加载程序inode时,ext4_iget()函数允许返回坏inode,因为该inode可能尚未初始化完成。攻击者可以利用这一机制绕过某些安全检查,触发内核中的未定义行为,最终导致系统拒绝服务。
该漏洞的CVSS 3.1评分为5.5分,属于中危级别。攻击向量为本地攻击(AV:L),攻击复杂度低(AC:L),需要低权限(PR:L),无需用户交互(UI:N)。其影响主要体现在可用性方面(A:H),因为漏洞利用会导致内核崩溃,造成系统完全不可用。机密性影响为无(C:N),完整性影响为无(I:N),说明该漏洞不会直接导致数据泄露或数据篡改,但其造成的内核崩溃可能间接影响系统完整性。
该漏洞由Linux内核ext4子系统的维护者发现并修复。修复方案是引入EXT4_IGET_BAD标志位,只有在明确设置该标志时,ext4_iget()函数才会返回坏inode;在其他情况下,如果inode是坏inode,函数将返回错误码。这一修复由Jan Kara建议,确保了坏inode处理的一致性和安全性。
在Linux内核的ext4文件系统中,ext4_iget()函数负责通过inode号获取对应的inode结构体。正常情况下,如果inode已损坏(标记为bad inode),ext4_iget()应当返回错误码以通知调用者处理异常。但在引导加载程序inode的获取路径中,由于该inode可能尚未完全初始化,系统允许返回坏inode。
这一设计缺陷带来安全隐患:ext4文件系统中存在大量代码路径会在遇到坏inode时执行不安全的操作或直接崩溃。攻击者可以通过精心构造的ext4文件系统映像或利用文件系统操作,使得引导加载程序inode处于坏inode状态,从而触发这些不安全路径。具体利用方式包括:
1. 创建或修改ext4文件系统映像,使特定inode(特别是引导加载程序相关inode)处于损坏状态;
2. 触发系统读取该损坏的inode,调用ext4_iget()获取该inode;
3. ext4_iget()返回坏inode而非错误码,绕过预期的安全检查;
4. 后续代码路径在处理坏inode时执行未定义操作,最终导致内核panic。
修复方案通过引入EXT4_IGET_BAD标志位来实现精确控制:只有显式设置该标志的调用路径才会接收坏inode,其他所有调用路径在遇到坏inode时将收到错误码(通常是-ESTALE或-EIO),从而避免了不安全的坏inode传播。