XFS 中允许读取原始块设备数据的漏洞

XFS 文件系统代码中发现了一个漏洞 (CVE-2021-4155),该漏洞允许本地非特权用户直接从块设备读取未使用的块数据。 所有早于 5.16 且包含 XFS 驱动程序的 Linux 内核主要版本均受此问题影响。 该修复包含在版本 5.16 以及内核更新 5.15.14、5.10.91、5.4.171、4.19.225 等中。 可以在以下页面上跟踪为解决发行版中的问题而生成的更新的状态:Debian、RHEL、SUSE、Fedora、Ubuntu、Arch。

该漏洞是由两个特定于 XFS 的 ioctl(XFS_IOC_ALLOCSP) 和 ioctl(XFS_IOC_FREESP) 的不正确行为引起的,这两个 ioctl(XFS_IOC_FREESP) 是内核范围 Fallocate() 系统调用的功能类似物。 当增加非块对齐的文件大小时,ioctls XFS_IOC_ALLOCSP/XFS_IOC_FREESP 不会将尾部字节重置为零,直到下一个块边界。 因此,在标准块大小为 4096 字节的 XFS 上,攻击者可以从每个块中读取最多 4095 字节的先前写入数据。 这些区域可能包含来自已删除文件、碎片整理文件和具有重复数据删除块的文件的数据。

您可以使用简单的漏洞利用原型来测试您的系统是否存在该问题。 如果在执行建议的命令序列后,可以阅读莎士比亚的文本,则 FS 驱动程序容易受到攻击。 最初安装 XFS 分区进行演示需要 root 权限。

由于 ioctl(XFS_IOC_ALLOCSP) 和 ioctl(XFS_IOC_FREESP) 的功能实际上与标准 fallocate() 相同,并且它们唯一的区别是数据泄漏,因此它们的存在类似于后门。 尽管一般政策是不改变内核中现有的接口,但在 Linus 的建议下,决定在下一版本中完全删除这些 ioctl。

来源: opennet.ru

添加评论