CVE-2026-48800 — Notepad++ 任意代码执行漏洞
免责声明本项目仅用于授权安全研究、漏洞复现、资产自查与防御验证。请勿在未授权环境下使用。目录漏洞简介漏洞根因攻击链路利用方式漏洞复现漏洞检测修复方案漏洞对比漏洞简介项目内容CVE 编号CVE-2026-48800漏洞类型OS 命令注入 / 任意代码执行影响版本Notepad ≤ v8.9.6修复版本Notepad v8.9.6.1影响平台Windows触发方式本地用户交互需执行 Run 命令本漏洞并非「打开即中招」的内存破坏型问题而是一种配置信任边界失效Configuration Trust Boundary Failure。攻击者通过污染 Notepad 的shortcuts.xml配置文件将合法的 Run 命令替换为任意程序路径。当用户执行常规操作如Run → Get PHP Help时受污染的配置诱导ShellExecute执行攻击者预设的恶意程序从而实现任意代码执行。漏洞根因配置文件 shortcuts.xml用户可写 │ ▼ Notepad 读取 Command 字段 │ ▼ 未对命令路径做任何安全校验 │ ▼ 构造 Command 对象 → ShellExecute │ ▼ 任意代码执行核心问题Notepad 从%APPDATA%\Notepad\shortcuts.xml读取UserDefinedCommands下的Command字段读取后未验证命令路径的合法性、安全性用户触发 Run 操作时直接将配置内容传入ShellExecute执行攻击者获得配置文件写入权限后即可劫持任意 Run 命令攻击链路┌─────────────────────────────────────────────────────────────┐ │ 攻击链路完整流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 攻击者获取目标主机文件写入权限 │ │ │ │ │ ▼ │ │ 2. 构造 malicious_shortcuts.xml │ │ └─ 将 Command 替换为恶意程序路径 │ │ │ │ │ ▼ │ │ 3. 写入目标用户 %APPDATA%\Notepad\shortcuts.xml │ │ └─ 覆盖或追加到配置文件 │ │ │ │ │ ▼ │ │ 4. 等待受害者执行 Run 命令或对应快捷键 │ │ └─ 例如Run → Get PHP Help / AltF1 │ │ │ │ │ ▼ │ │ 5. ShellExecute 执行攻击者控制的程序路径 │ │ │ │ │ ▼ │ │ 6. 攻击成功 → 任意代码执行 │ │ │ └─────────────────────────────────────────────────────────────┘利用方式利用方式说明直接写入 shortcuts.xml攻击者获得目标主机文件写入权限后直接替换配置文件恶意 .lnk 快捷方式利用-settingsDir参数指向攻击者控制的配置目录云同步投毒污染 OneDrive / Dropbox 等同步目录中的配置文件社工诱导诱导用户下载并替换配置文件常见攻击场景内网渗透攻击者已获取目标主机低权限 Shell通过写入shortcuts.xml配合恶意 Run 命令进行权限提升供应链攻击污染开源项目或安装包中的默认配置文件社工钓鱼诱导用户下载优化版 Notepad 配置漏洞复现测试环境Notepad v8.9.2前置条件攻击者具备目标用户%APPDATA%\Notepad\目录的写入权限方法一直接替换 shortcuts.xml步骤 1 - 备份原始配置Copy-Item$env:APPDATA\Notepad\shortcuts.xml$env:APPDATA\Notepad\shortcuts.xml.bak步骤 2 - 构造恶意配置说明快捷键可通过Run → Modify Shortcut/Delete Command手动设置或直接编辑shortcuts.xml获取对应 Key 值注意避免与其他快捷键冲突。?xml version1.0 encodingUTF-8?UserDefinedCommands!-- 将快捷键设置为 CtrlZ (Key90)执行 calc.exe --CommandnameGet PHP helpCtrlyesAltnoShiftnoKey90calc.exe/Command/UserDefinedCommands将上述内容写入%APPDATA%\Notepad\shortcuts.xml覆盖原文件或追加均可。步骤 3 - 触发漏洞用户执行以下任一操作菜单栏Run → Get PHP Help快捷键CtrlZ![[Pasted image 20260603183150.png]]步骤 4 - 验证结果命令执行成功。![[Pasted image 20260603183226.png]]方法二使用-settingsDir参数通过启动参数指定攻击者控制的数据目录notepad.exe -settingsDirC:\attacker\settings在C:\attacker\settings\shortcuts.xml中放置恶意配置受害者启动 Notepad 后即加载污染的配置。漏洞检测PowerShell 检测脚本# 检测是否存在可疑的外部程序调用$contentGet-Content$env:APPDATA\Notepad\shortcuts.xml-Raw# 提取所有 Command 字段内容if($content-matchCommand[^]*([^])/Command){$matches[1]|ForEach-Object{Write-Host[Found Command]$_}}# 检测是否包含非系统目录的可执行程序$suspicious$content-match(cmd|powershell|wscript|cscript|mshta|rundll32|regsvr32)\.exe.*(?!System32|SysWOW64)if($suspicious){Write-Warning检测到可疑命令配置}修复后的预期状态shortcuts.xml中的Command仅应包含 Notepad 内置程序路径或系统白名单解释器cmd.exe/powershell.exe/bash.exe且路径应在%SystemRoot%\System32\下。修复方案1. 升级 Notepad首选项目版本最低修复版本v8.9.6.1下载地址https://notepad-plus-plus.org/downloads/2. 配置白名单临时缓解仅允许系统目录下的已知解释器%SystemRoot%\System32\cmd.exe %SystemRoot%\System32\powershell.exe %SystemRoot%\System32\bash.exe3. 限制配置文件写入权限# 仅允许管理员和当前用户修改 shortcuts.xmlicacls$env:APPDATA\Notepad\shortcuts.xml/inheritance:r/grant:r%USERNAME%:F4. 监控云同步目录若使用 OneDrive / Dropbox / GitHub sync 等工具同步 Notepad 配置建议启用同步目录的版本历史功能对配置文件修改启用异常告警避免使用来源不明的预置配置文件漏洞对比对比维度CVE-2026-48800本漏洞CVE-2026-48778典型远程 RCE攻击入口本地配置污染本地配置污染网络请求用户交互必须执行 Run 命令必须执行特定操作视漏洞而定利用难度中需文件写入权限中低到高隐蔽性高配置文件本身不显眼高中到高稳定性高不依赖内存破坏高低到中影响范围仅当前用户仅当前用户可大范围同批次修复的漏洞v8.9.6.1CVE 编号漏洞类型严重等级CVE-2026-48778config.xml 任意代码执行HIGH (7.8)CVE-2026-48770畸形结构导致的崩溃HIGHCVE-2026-48800shortcuts.xml 任意代码执行CRITICAL参考链接Notepad Official DownloadsNotepad GitHub RepositoryMicrosoft ShellExecute Documentation免责声明本项目仅用于授权安全研究、漏洞复现、资产自查与防御验证。请勿在未授权环境下使用。目录漏洞简介漏洞根因攻击链路利用方式漏洞复现漏洞检测修复方案漏洞对比漏洞简介项目内容CVE 编号CVE-2026-48800漏洞类型OS 命令注入 / 任意代码执行影响版本Notepad ≤ v8.9.6修复版本Notepad v8.9.6.1影响平台Windows触发方式本地用户交互需执行 Run 命令本漏洞并非「打开即中招」的内存破坏型问题而是一种配置信任边界失效Configuration Trust Boundary Failure。攻击者通过污染 Notepad 的shortcuts.xml配置文件将合法的 Run 命令替换为任意程序路径。当用户执行常规操作如Run → Get PHP Help时受污染的配置诱导ShellExecute执行攻击者预设的恶意程序从而实现任意代码执行。漏洞根因配置文件 shortcuts.xml用户可写 │ ▼ Notepad 读取 Command 字段 │ ▼ 未对命令路径做任何安全校验 │ ▼ 构造 Command 对象 → ShellExecute │ ▼ 任意代码执行核心问题Notepad 从%APPDATA%\Notepad\shortcuts.xml读取UserDefinedCommands下的Command字段读取后未验证命令路径的合法性、安全性用户触发 Run 操作时直接将配置内容传入ShellExecute执行攻击者获得配置文件写入权限后即可劫持任意 Run 命令攻击链路┌─────────────────────────────────────────────────────────────┐ │ 攻击链路完整流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 攻击者获取目标主机文件写入权限 │ │ │ │ │ ▼ │ │ 2. 构造 malicious_shortcuts.xml │ │ └─ 将 Command 替换为恶意程序路径 │ │ │ │ │ ▼ │ │ 3. 写入目标用户 %APPDATA%\Notepad\shortcuts.xml │ │ └─ 覆盖或追加到配置文件 │ │ │ │ │ ▼ │ │ 4. 等待受害者执行 Run 命令或对应快捷键 │ │ └─ 例如Run → Get PHP Help / AltF1 │ │ │ │ │ ▼ │ │ 5. ShellExecute 执行攻击者控制的程序路径 │ │ │ │ │ ▼ │ │ 6. 攻击成功 → 任意代码执行 │ │ │ └─────────────────────────────────────────────────────────────┘利用方式利用方式说明直接写入 shortcuts.xml攻击者获得目标主机文件写入权限后直接替换配置文件恶意 .lnk 快捷方式利用-settingsDir参数指向攻击者控制的配置目录云同步投毒污染 OneDrive / Dropbox 等同步目录中的配置文件社工诱导诱导用户下载并替换配置文件常见攻击场景内网渗透攻击者已获取目标主机低权限 Shell通过写入shortcuts.xml配合恶意 Run 命令进行权限提升供应链攻击污染开源项目或安装包中的默认配置文件社工钓鱼诱导用户下载优化版 Notepad 配置漏洞复现测试环境Notepad v8.9.2前置条件攻击者具备目标用户%APPDATA%\Notepad\目录的写入权限方法一直接替换 shortcuts.xml步骤 1 - 备份原始配置Copy-Item$env:APPDATA\Notepad\shortcuts.xml$env:APPDATA\Notepad\shortcuts.xml.bak步骤 2 - 构造恶意配置说明快捷键可通过Run → Modify Shortcut/Delete Command手动设置或直接编辑shortcuts.xml获取对应 Key 值注意避免与其他快捷键冲突。?xml version1.0 encodingUTF-8?UserDefinedCommands!-- 将快捷键设置为 CtrlZ (Key90)执行 calc.exe --CommandnameGet PHP helpCtrlyesAltnoShiftnoKey90calc.exe/Command/UserDefinedCommands将上述内容写入%APPDATA%\Notepad\shortcuts.xml覆盖原文件或追加均可。步骤 3 - 触发漏洞用户执行以下任一操作菜单栏Run → Get PHP Help快捷键CtrlZ步骤 4 - 验证结果命令执行成功。方法二使用-settingsDir参数通过启动参数指定攻击者控制的数据目录notepad.exe -settingsDirC:\attacker\settings在C:\attacker\settings\shortcuts.xml中放置恶意配置受害者启动 Notepad 后即加载污染的配置。漏洞检测PowerShell 检测脚本# 检测是否存在可疑的外部程序调用$contentGet-Content$env:APPDATA\Notepad\shortcuts.xml-Raw# 提取所有 Command 字段内容if($content-matchCommand[^]*([^])/Command){$matches[1]|ForEach-Object{Write-Host[Found Command]$_}}# 检测是否包含非系统目录的可执行程序$suspicious$content-match(cmd|powershell|wscript|cscript|mshta|rundll32|regsvr32)\.exe.*(?!System32|SysWOW64)if($suspicious){Write-Warning检测到可疑命令配置}修复后的预期状态shortcuts.xml中的Command仅应包含 Notepad 内置程序路径或系统白名单解释器cmd.exe/powershell.exe/bash.exe且路径应在%SystemRoot%\System32\下。修复方案1. 升级 Notepad首选项目版本最低修复版本v8.9.6.1下载地址https://notepad-plus-plus.org/downloads/2. 配置白名单临时缓解仅允许系统目录下的已知解释器%SystemRoot%\System32\cmd.exe %SystemRoot%\System32\powershell.exe %SystemRoot%\System32\bash.exe3. 限制配置文件写入权限# 仅允许管理员和当前用户修改 shortcuts.xmlicacls$env:APPDATA\Notepad\shortcuts.xml/inheritance:r/grant:r%USERNAME%:F4. 监控云同步目录若使用 OneDrive / Dropbox / GitHub sync 等工具同步 Notepad 配置建议启用同步目录的版本历史功能对配置文件修改启用异常告警避免使用来源不明的预置配置文件漏洞对比对比维度CVE-2026-48800本漏洞CVE-2026-48778典型远程 RCE攻击入口本地配置污染本地配置污染网络请求用户交互必须执行 Run 命令必须执行特定操作视漏洞而定利用难度中需文件写入权限中低到高隐蔽性高配置文件本身不显眼高中到高稳定性高不依赖内存破坏高低到中影响范围仅当前用户仅当前用户可大范围同批次修复的漏洞v8.9.6.1CVE 编号漏洞类型严重等级CVE-2026-48778config.xml 任意代码执行HIGH (7.8)CVE-2026-48770畸形结构导致的崩溃HIGHCVE-2026-48800shortcuts.xml 任意代码执行CRITICAL参考链接Notepad Official DownloadsNotepad GitHub RepositoryMicrosoft ShellExecute Documentation