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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2026-52885 — CVE-2026-52885 的技术分析:Notepad++ v8.9.6.2 中存在一个 TOCTOU 竞态条件,允许通过 HMAC 完整性绕过实现任意命令执行。包括根本原因、攻击场景、PoC 及补丁分析。 | Kitploit
工具/GitHubGitHub/v3s9er/cve-2026-52885
漏洞分析代码分析漏洞利用二进制分析论文与研究学习与教育
GitHubv3s9er/cve-2026-52885

CVE-2026-52885

CVE-2026-52885 的技术分析:Notepad++ v8.9.6.2 中存在一个 TOCTOU 竞态条件,允许通过 HMAC 完整性绕过实现任意命令执行。包括根本原因、攻击场景、PoC 及补丁分析。

查看仓库
327天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

TOCTOU:HMAC 校验磁盘,从内存执行

Notepad++ v8.9.6.2 — 通过 HMAC 竞争条件实现攻击者控制的 UserCommand 执行

公告

GHSAGHSA-qm4c-qg8p-qfcr
CVECVE-2026-52885
严重程度高
受影响版本v8.9.6.2
已修复版本v8.9.6.4
补丁提交4f7563c
受影响文件PowerEditor/src/NppCommands.cpp :4328–4359
平台Windows 11 Pro x64
所需权限标准用户(对 shortcuts.xml 有写入权限)
研究者v3s9er
披露日期2026-06-05

总结

Notepad++ v8.9.6.2 引入了对 shortcuts.xml 的 HMAC-SHA256 完整性检查,以防止注入任意 UserCommand 条目。

该检查存在 TOCTOU 缺陷:HMAC 在触发时针对磁盘上的文件进行验证,但执行的命令是从启动时加载的内存中的 _userCommands 向量读取的。这两个来源从未重新同步。

能够写入 shortcuts.xml 的攻击者可以在启动前植入恶意命令,让 Notepad++ 将其加载到内存中,恢复磁盘上的合法文件,然后触发命令。HMAC 检查通过(磁盘是干净的),但恶意载荷执行(内存是过时的)。


技术概述

完整性机制验证当前磁盘上的 shortcuts.xml,而命令执行使用之前加载的内存表示。由于这两个数据源是独立的,攻击者可以在启动前修改文件,使其被解析到内存中,然后在命令执行前恢复原始文件——导致 HMAC 检查通过,而恶意载荷运行。


根本原因

NppCommands.cpp 第 4328–4359 行:

root@kitploit:~
// 检查时机 — 读取磁盘文件
std::string currentHMAC = computeHMAC(
    getMachineGUID(),
    getFileContent(nppParams.getShortcutsPath().c_str())
);
if (currentHMAC != nppGUI._shortcutsXmlHmacInConfig) { return; }
// 针对磁盘验证

// 使用时机 — 读取内存向量(启动时加载,从未刷新)
int i = id - ID_USER_CMD;
const vector<UserCommand>& cmds = nppParams.getUserCommandList();
UserCommand ucmd = cmds[i];
Command cmd(string2wstring(ucmd.getCmd(), CP_UTF8));
cmd.run(_pPublicInterface->getHSelf()); // 从内存执行载荷
操作来源时机
检查(HMAC)磁盘文件触发时
使用(执行)内存向量启动时加载
时间差攻击者可控启动 → 触发

攻击场景

前提条件: 对 shortcuts.xml 有写入权限

  • 便携式安装:与 notepad++.exe 同一目录
  • 标准安装:%AppData%\Notepad++\

步骤:

  1. 将磁盘上的 shortcuts.xml 覆盖为恶意版本(cmd=calc.exe)
  2. 启动 Notepad++ — _userCommands 从恶意文件填充
  3. 将合法 shortcuts.xml 恢复到磁盘 — HMAC 现在与 config.xml 匹配
  4. 发送 WM_COMMAND(21000)(ID_USER_CMD+0)或按下 Ctrl+Alt+P
  5. HMAC 检查读取磁盘上的合法文件 → 通过
  6. 执行从内存中读取 _userCommands[0] → calc.exe 运行

结果: 在当前用户权限下执行攻击者控制的命令。无需管理员、无需UAC、无用户警告。


执行时间线


影响


概念验证

参见 poc_8962_toctou.ps1。

要求:

  • Notepad++ v8.9.6.2 便携式 x64
  • doLocalConf.xml 存在于 Notepad++ 目录中(便携模式)
  • config.xml 中包含合法 shortcuts.xml 的有效 HMAC
root@kitploit:~
.\poc_8962_toctou.ps1 -NppPath "C:\path\to\notepad++.exe"

已验证: calc.exe 生成(PID 35932),磁盘全程显示合法的 shortcuts.xml。


补丁分析

修复(提交 4f7563c)将 HMAC 验证移至启动时,与初始文件解析同时进行。检查和使用现在同时操作同一对象,消除了 TOCTOU 窗口。

v8.9.6.2(易受攻击)v8.9.6.4(已修复)
HMAC 检查触发时,重新读取磁盘启动时,与解析使用相同字节
命令来源启动时加载的内存启动时验证的内存
TOCTOU 窗口启动 → 触发已消除

参考

  • GHSA-qm4c-qg8p-qfcr
  • 补丁提交 4f7563c
  • Notepad++ v8.9.6.4 发布
下载工具
时间事件状态
T+0.0秒攻击者写入恶意 shortcuts.xml磁盘=恶意
T+0.0秒攻击者启动 Notepad++磁盘=恶意
T+0.1秒Notepad++ 读取 shortcuts.xml → _userCommands[0]="calc.exe"内存=恶意
T+4.2秒Notepad++ 完全加载内存=恶意
T+4.2秒攻击者恢复合法 shortcuts.xml磁盘=合法 / 内存=恶意
T+4.7秒攻击者发送 WM_COMMAND(21000)
T+4.7秒HMAC 检查:从磁盘读取合法文件 → 通过检查通过
T+4.7秒执行:从内存读取 _userCommands[0] → calc.exe利用成功
T+4.7秒calc.exe 生成(PID 35932)已确认
类型
任意命令执行
是否需要管理员否
UAC 提示否
可检测性低 — 磁盘全程显示合法文件;载荷仅存在于内存
CVSS(估计)AV:L / AC:H / PR:L / UI:N / S:U / C:H / I:H / A:H