Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-23416-POC — CVE-2026-23416 的 POC(linux kernel 6.17 – linux kernel 7 rc5) - 由 Antonius 发现的漏洞 | Kitploit
工具/GitHubGitHub/bluedragonsecurity/cve-2026-23416-poc
漏洞分析漏洞利用论文与研究学习与教育二进制利用
GitHubbluedragonsecurity/cve-2026-23416-poc

CVE-2026-23416-POC

CVE-2026-23416 的 POC(linux kernel 6.17 – linux kernel 7 rc5) - 由 Antonius 发现的漏洞

查看仓库

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
8133个月前尚未审核
分享

CVE-2026-23416 — PoC

mm/mseal: 合并时正确更新 VMA 结束地址

漏洞发现者:Antonius / Blue Dragon Security


概述

字段详情
CVE IDCVE-2026-23416
子系统mm/mseal — mm/vma.c
影响范围Linux 内核 6.17 至 7.0-rc5
修复版本Linux 7.0-rc6,稳定版回溯 6.18.21、6.19.11
所需权限非特权用户(UID 1000,无 capabilities)
使用的系统调用memfd_create、mmap、mseal
可复现性100% 确定性,< 1 秒
保留时间2026-01-13
发布时间2026-04-02

漏洞描述

该漏洞存在于 mm/mseal.c 的 mseal_apply() 函数中。在遍历 VMA 以应用 mseal(2) 系统调用时,该函数使用 curr_start 和 curr_end 来跟踪位置:

root@kitploit:~
/* 修复前的简化逻辑 */
curr_end = vma->vm_end;
/* ... 处理 VMA ... */
curr_start = curr_end;  /* 前进到下一个 VMA */

问题在于:迭代过程中调用的 vma_modify_flags() 可以合并 VMA,从而原地修改 vma->vm_end。这使得合并前捕获的 curr_end 值过时。在下一次迭代中,curr_start 被设置为已经过时的 curr_end,导致起始地址错误。

在调试内核(CONFIG_DEBUG_VM)中,这种不一致的 vmg 状态会触发:

root@kitploit:~
VM_WARN_ON_VMG(middle &&
    ((middle != prev && vmg->start != middle->vm_start) ||
     vmg->end > middle->vm_end))

位于 mm/vma.c:830,产生内核 WARNING。

在生产内核(WARN 被编译为空操作)中,过时的 curr_start 会静默继续运行——这意味着 VM_SEALED 可能被错误地应用于不正确的地址范围,而没有任何可见的错误,破坏了 mseal(2) 本来设计要提供的安全保证。

调用路径

root@kitploit:~
mseal(2)
  └─ do_mseal()              [mm/mseal.c]
       └─ mseal_apply()
            └─ vma_modify_flags()   [mm/vma.c]
                 └─ vma_modify()
                      └─ vma_merge_existing_range()
                           └─ VM_WARN_ON_VMG 在 830 行触发

根本原因

root@kitploit:~
/* 修复前 — mm/mseal.c mseal_apply() */
curr_end = vma->vm_end;           // 此处捕获
/* ... vma_modify_flags() 可能合并 VMA,改变 vma->vm_end ... */
curr_start = curr_end;            // 过时!合并未被反映

修复方案是:每次迭代中,在任何可能的合并之后无条件地将 curr_end 设置为 vma->vm_end,并额外将 curr_start/curr_end 作为从输入范围和 VMA 边界派生的常量值进行限制:

root@kitploit:~
/* 修复后 */
curr_end = vma->vm_end;           // 无条件,始终最新

触发时的 VMA 布局

PoC 在第二次 mseal() 调用前构建了以下布局:

root@kitploit:~
[0x21da6000 - 0x21de5fff]  VMA-A  (fd2, MAP_SHARED|MAP_FIXED) ← 步骤 1 后已被 VM_SEALED
[0x21de6000 - 0x21e82fff]  VMA-B  (fd2, MAP_SHARED|MAP_FIXED) ← 未 seal
[0x21e83000 - 0x21e84fff]  VMA-C  (剩余)

第二次 mseal(m2, 0x70000) 的目标范围是 [0x21da6000 – 0x21e15fff],横跨 VMA-A(已 seal)和 VMA-B(未 seal)。在 mseal_apply() 内部,过时的 curr_end(来自 VMA-A)被用作处理 VMA-B 时的 curr_start,从而产生不一致的 vmg 状态。


安全影响

  1. 可从非特权用户空间触及——仅需 memfd_create + mmap + mseal,无需 CAP_*。
  2. mseal(2) 是一种安全原语——它保护 VMA 的不可变性。在其应用过程中的逻辑错误意味着当横跨混合 seal 状态的 VMA 时,VM_SEALED 可能被静默错误应用。
  3. 在生产环境为静默——在非调试内核上,不一致状态继续运行而不发出任何警告,可能导致 VMA 树处于错误的 seal 状态。

概念验证

文件: cve-2026-23416-poc.c

编译

root@kitploit:~
gcc -o poc cve-2026-23416-poc.c

运行

root@kitploit:~
./poc

预期输出(启用了 CONFIG_DEBUG_VM 的调试内核)

root@kitploit:~
============================================
CVE-2026-23416-POC
发现者:Antonius / Blue Dragon Security
  https://bluedragonsec.com
  https://github.com/bluedragonsecurity
============================================
[iter 0]
[iter 1]
...
[+] WARNING 总共触发了 N 次

检查 dmesg 输出:

root@kitploit:~
WARNING: CPU: X PID: Y at mm/vma.c:830 vma_merge_existing_range+0x...

要求

  • Linux 内核 6.17 – 7.0-rc5
  • CONFIG_DEBUG_VM=y 才能观察到 VM_WARN_ON_VMG(在生产内核上,该漏洞仍然存在,但静默)
  • 无需 root 或特殊 capabilities

修复

三个上游修复提交(已应用于 7.0-rc6 和稳定版回溯):

提交树
40b3f4700e55stable

已修复的内核版本: 7.0-rc6, 6.18.21, 6.19.11


参考

  • CVE-2026-23416 — cve.org
  • CVE-2026-23416 — NVD
  • 技术文章 — Medium (@w1sdom)
  • Blue Dragon Security

披露时间线

日期事件
2026-01-13CVE ID 保留
2026-04-02CVE 发布,修复提交合并

作者

Antonius (@w1sdom)
Blue Dragon Security — 印度尼西亚,坦格朗
GitHub: bluedragonsecurity


此 PoC 仅供教育和研究用途发布。

下载工具
83737e34b83a
stable
2697dd8ae721stable