CVE-2023-53625CVE-2023-53625是Linux内核drm/i915/gvt子系统中存在的一个空指针解引用漏洞,位于vgpu(虚拟GPU)debugfs清理路径中。该漏洞发生在设备移除(remove)过程中,当intel_gvt_destroy_vgpu函数尝试调用intel_gvt_debugfs_remove_vgpu清理vgpu的debugfs条目时,由于drm minor的debugfs根目录可能已经被销毁,导致对已释放的debugfs根节点进行操作,从而触发内核空指针解引用,引发内核oops(kernel oops)甚至系统崩溃。
该漏洞的触发场景为:当用户通过driverctl等工具卸载i915驱动或相关kvmgt模块时,系统会调用设备移除回调链,最终执行intel_gvt_clean_device和intel_gvt_destroy_vgpu。在此过程中,如果drm minor的debugfs root已经被提前销毁(例如在设备分离过程中),而代码没有正确检查debugfs root的可用性就直接调用debugfs_remove,就会因为访问NULL指针而导致内核崩溃。
从CVSS评分来看,该漏洞评分为5.5分,属于中等严重等级。攻击者需要本地低权限访问即可触发此漏洞,无需用户交互。该漏洞主要影响系统的可用性(Availability: High),不影响机密性和完整性。虽然需要本地权限触发,但利用门槛较低,攻击者可以通过简单的驱动卸载操作导致系统拒绝服务(内核崩溃)。该漏洞影响多个Linux内核稳定版本,已通过多个补丁进行修复。
该漏洞的根本原因在于intel_gvt_debugfs_remove_vgpu函数在销毁vgpu时没有充分检查debugfs根目录的有效性。具体技术细节如下:
1. **漏洞触发路径**:当i915驱动被卸载时,内核会调用i915_driver_remove -> intel_gvt_driver_remove -> intel_gvt_clean_device -> mdev_unregister_parent -> mdev_device_remove_cb -> device_del -> device_release_driver_internal -> device_release -> intel_vgpu_release_dev -> intel_gvt_destroy_vgpu -> intel_gvt_debugfs_remove_vgpu -> debugfs_remove。
2. **根本原因**:在设备移除过程中,drm minor的debugfs根目录(debugfs root)可能已经被销毁,但intel_gvt_debugfs_remove_vgpu函数没有对此进行检查。当debugfs_remove被调用时,它会通过simple_recursive_removal尝试对已销毁的debugfs根节点进行加锁操作(down_write),由于根节点指针为NULL或已释放,导致在__lock_acquire中访问地址0x0000000000000150时发生空指针解引用。
3. **触发条件**:需要系统中存在使用i915 GVT-g虚拟GPU功能的环境(如Intel GVT-g被启用且至少创建了一个vgpu),然后通过driverctl等工具触发驱动卸载即可触发该漏洞。
4. **利用方式**:攻击者只需具有本地低权限,执行`driverctl`命令或类似操作触发i915驱动移除,即可导致内核崩溃(kernel oops),造成系统拒绝服务。
5. **修复方案**:补丁通过在intel_gvt_debugfs_remove_vgpu中添加对debugfs根目录有效性的检查,确保在根目录可用时才进行清理操作,避免对已销毁的debugfs根节点进行操作。