btrfs:修复 __btrfs_free_extra_devids() 中块设备文件的释放后使用问题(CVE-2024-50217)
CVE编号
CVE-2024-50217利用情况
暂无补丁情况
N/A披露时间
2024-11-09漏洞描述
在Linux内核中,已经解决了以下漏洞:btrfs:修复在__btrfs_free_extra_devids()中块设备文件使用释放后的漏洞(UAF)问题。在某些执行顺序下,挂载具有相同文件系统ID(fsid)和两个不同设备UUID的两个镜像可能会触发该漏洞,导致在__btrfs_free_extra_devids()中的变量'device->bdev_file'发生使用释放后的对象(UAF)。以下是漏洞的详细情况:1. 将image_1连接到loop0,将image_2连接到loop1,并通过ioctl(BTRFS_IOC_SCAN_DEV)扫描btrfs设备:文件系统设备指向loop设备上的镜像文件。例如:/ btrfs_device_1 → loop0 fs_device \ btrfs_device_2 → loop1。2.挂载/dev/loop0到/mnt目录,执行btrfs_open_devices操作。在这个过程中,btrfs_device_1和btrfs_device_2的bdev_file分别通过btrfs_get_bdev_and_sb函数获取loop设备的文件对象。然后执行btrfs_fill_super和open_ctree操作。但在执行过程中可能会因为内存不足(-ENOMEM)导致失败,进而调用btrfs_close_devices关闭设备。在关闭过程中,会调用btrfs_close_bdev和fput函数关闭并释放设备文件对象(即btrfs_device_1->bdev_file和btrfs_device_2->bdev_file)。此时,btrfs_device_1的bdev_file已经被释放。3.尝试挂载/dev/loop1到/mnt目录时,再次执行btrfs_open_devices操作。在这个过程中,会尝试获取新的设备文件对象用于btrfs设备。然而,由于之前已经释放了btrfs_device_1的bdev_file对象,此时再访问该对象会导致访问已释放的内存区域,从而触发漏洞。在调用btrfs_free_extra_devids函数时,如果尝试访问已经释放的btrfs_device_1的bdev_file对象(通过fput函数),就会触发使用释放后的对象(UAF)的问题。修复此漏洞的方式是在关闭btrfs设备时(即btrfs_close_one_device函数中),将设备的文件对象(即device->bdev_file)设置为NULL。这样可以避免后续操作访问已经释放的内存区域,从而避免使用释放后的对象的问题。解决建议
建议您更新当前系统或软件至最新版,完成漏洞的修复。
参考链接 |
|
---|---|
https://git.kernel.org/stable/c/47a83f8df39545f3f552bb6a1b6d9c30e37621dd | |
https://git.kernel.org/stable/c/aec8e6bf839101784f3ef037dcdb9432c3f32343 |
- 攻击路径 N/A
- 攻击复杂度 N/A
- 权限要求 N/A
- 影响范围 N/A
- 用户交互 N/A
- 可用性 N/A
- 保密性 N/A
- 完整性 N/A
CWE-ID | 漏洞类型 |
Exp相关链接

版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
评论