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

CVE-2026-43277 Linux内核GHES越界读取漏洞

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

漏洞信息

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

相关标签

Linux KernelMemory CorruptionDoSGHESCVE-2026-43277

漏洞概述

Linux内核APEI/GHES组件存在安全漏洞。在处理CPER记录时,系统未校验记录长度与分配内存的大小。恶意固件可发送超长数据,导致内核访问越界内存,引发系统崩溃(OOPS),造成拒绝服务。

技术细节

该漏洞位于Linux内核的APEI(ACPI平台错误接口)GHES(通用硬件错误源)处理逻辑中。`ghes_new()`函数虽然限制了单条记录的最大长度(64KB),但内存分配是基于CPER BIOS表中的实际页数。如果恶意固件提供的CPER记录长度声明大于实际分配的内存大小,内核在处理该记录(特别是在`hex_dump_to_buffer`等函数中打印错误信息时)会尝试访问未分配的内存地址。这会导致内核发生无法处理的分页请求,触发DABT(数据中止)异常,最终导致系统内核崩溃。攻击者需要本地低权限(PR:L)才能触发此漏洞。

攻击链分析

STEP 1
获取本地访问权限
攻击者获得系统的本地低权限访问。
STEP 2
触发恶意固件事件
系统固件被篡改或恶意固件发送一个长度声明大于实际分配内存的CPER错误记录。
STEP 3
内核处理错误
Linux内核的GHES模块接收并尝试处理该错误记录。
STEP 4
越界内存访问
内核在打印错误日志时,未检查边界直接读取超出分配范围的内存。
STEP 5
系统崩溃
触发内核页错误,导致系统崩溃(Kernel Panic/OOPS),实现拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC Concept for CVE-2026-43277 * This simulates the vulnerable logic in ghes_new() where the CPER record length * is not checked against the actual allocated memory size. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define GHES_ESTATUS_MAX_SIZE 65536 // 64KB void simulate_vulnerability(size_t record_len, size_t allocated_size) { // Simulate allocation based on firmware table pages (could be smaller than requested) char *buffer = (char *)malloc(allocated_size); if (!buffer) { perror("malloc failed"); return; } printf("[+] Allocated buffer: %zu bytes\n", allocated_size); printf("[+] Malicious CPER record length: %zu bytes\n", record_len); // Check 1: Original code checks if record > MAX_SIZE (Passes here) if (record_len > GHES_ESTATUS_MAX_SIZE) { printf("[-] Record rejected: Exceeds GHES_ESTATUS_MAX_SIZE\n"); free(buffer); return; } // Vulnerability: Missing check for (record_len > allocated_size) // In the real kernel, accessing 'buffer' beyond 'allocated_size' causes a page fault. printf("[!] Attempting to access buffer beyond allocated size...\n"); // This loop simulates the kernel reading the record (e.g., in hex_dump_to_buffer) for (size_t i = 0; i < record_len; i++) { // Accessing memory outside the allocated block triggers the crash volatile char c = buffer[i]; if (i == allocated_size) { printf("[!!!] OOPS: Access violation at offset %zu (Boundary crossed!)\n", i); } } free(buffer); } int main() { // Scenario: Firmware allocates 1 page (4KB) but sends a 8KB record size_t alloc_size = 4096; size_t malicious_len = 8192; simulate_vulnerability(malicious_len, alloc_size); return 0; }

影响范围

Linux Kernel (具体受影响版本请参考Git补丁链接)

防御指南

临时缓解措施
及时更新BIOS/UEFI固件,确保固件提供的CPER记录合法有效,避免使用来源不明的固件。

参考链接

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