Portainer CE 2.45.0에서 GitOps 자동 배포가 보안 검증을 우회해 공유 Docker 호스트를 장악할 수 있는 취약점이 발견됐다. Portainer 2.45.2는 자동 재배포 전에 검증을 추가했으며, 사용자는 2.45.2 이상으로 업그레이드해야 한다.

Sable의 테스트에서 스택 관리 권한과 해당 스택의 Git 저장소 수정 권한을 가진 일반 사용자는 호스트 접근을 허용하는 컨테이너 설정을 배포할 수 있었다. 이 설정은 수동 배포에서는 거부됐지만, 웹훅과 예약된 폴링을 통한 GitOps 업데이트에서는 적용됐다. 그 결과 컨테이너가 호스트 루트 파일 시스템에 접근했고, 테스트에서는 일반 사용자 계정으로 호스트의 PID 1 네임스페이스에 진입해 호스트에서 root 권한을 확인했다.

취약점은 자동 업데이트 경로가 새 Compose 설정을 실행하기 전에 스택 보안 검증을 거치지 않는 데서 비롯됐다. 웹훅과 폴링은 모두 api/stacks/deployments/deploy.go의 redeployWhenChangedSecondStage로 이어졌다. 반면 수동 Git 재배포는 같은 커밋을 거부했다.

Sable은 Portainer CE 2.45.0에서 동작을 확인했다. 다른 릴리스 버전은 런타임 테스트하지 않았다. Portainer 2.45.2는 자동 GitOps 재배포 전에 ValidateStackForUser를 호출하도록 수정했다. 자세한 내용은 2.45.2 릴리스와 수정된 Go 소스에서 확인할 수 있다.

GitOps 기반 배포 시스템을 운영한다면 초기 승인 여부와 관계없이 모든 변경을 새 배포로 다뤄야 한다. 웹훅·예약 폴링·재시도 등 모든 배포 경로가 실행 직전에 동일한 권한 및 환경 정책 검증을 거치는지 확인하고, 호스트 수준 권한을 추가하는 변경에는 검토 절차를 두는 것이 중요하다.