CVE-2026-3008 — Notepad++ 8.9.3 格式字符串注入漏洞 漏洞概述 Notepad++ 8.9.3 版本在搜索操作产生结果时,存在格式字符串注入漏洞。漏洞函数 从 文件中检索本地化字符串,并将其直接作为格式字符串传递给 函数,未进行任何验证。 漏洞原理: 字符串来源于 中的 属性 数据流:TinyXML 解析器读取 XML 属性(无内容验证)→ NativeLangSpeaker (UTF-8 转 UTF-16,无验证) → ( 替换替换 - 格式说明符存活) 仅调用两个参数 - 无可变数据参数。任何格式说明符在 中读取的值来自 x64 调用约定的参数槽(R8, R9, stack),其中包含残留的寄存器垃圾 影响范围 受影响组件: (查找结果面板初始化器) 触发条件: 任何产生结果的搜索操作(查找全部、在文件中查找、标记全部、替换全部) 攻击向量: 文件不存在于默认安装中 - 英语语言安装不受影响。当用户通过设置选择非英语语言时,Notepad++ 会写入相应的文件 受影响语言: 在 94 个本地化文件中,43 个包含 元素。如果用户的 被篡改(例如通过恶意社区语言包),则易受攻击 影响 崩溃 - %S(拒绝服务): 每个 解释垃圾寄存器或栈值为 指针。第一个无效地址触发立即访问违规。Notepad++ 在每次后续搜索时崩溃,直到恶意文件被移除 - 可靠的一次性 DoS 信息泄露 - %08lx: 栈和寄存器内容作为 DWORD 值读取并以十六进制格式化,在查找结果面板标签中可见 利用限制: (user32.dll)不支持 - 没有写什么原语。其硬编码的 1024 字符输出限制与目标缓冲区大小完全匹配,排除了堆缓冲区溢出的可能性。漏洞被确认为 DoS + 信息泄露。代码执行无法通过此格式字符串单独实现 修复方案 对 中的 属性进行验证 避免将用户可控数据直接作为格式字符串使用 更新 Notepad++ 至修复版本 概念验证代码 使用方法: 将上述文件放置在 (便携版)或 (安装版),然后打开 Notepad++ 并执行任何产生结果的搜索(Ctrl+F - 在当前文档中查找全部)。 结果: Notepad++ 立即崩溃,在 中发生访问违规。 其他有效载荷变体位于 目录中。