🇰🇷 한글 설명
CloudNativePG의 특정 버전에서 역할 생성 및 변경 시 비밀번호가 평문으로 노출되는 취약점이 발견되었습니다. 공격자가 pg_stat_statements를 통해 관리자 비밀번호를 탈취할 경우, 데이터베이스 권한을 넘어 운영체제 명령을 실행할 수 있습니다.
💡 쉬운 설명
데이터베이스 관리 도구가 비밀번호를 암호화하지 않고 그대로 노출하여, 해커가 관리자 비밀번호를 훔쳐낼 수 있는 문제입니다. 이를 통해 해커는 데이터베이스뿐만 아니라 서버 전체를 조종할 위험이 있습니다.
🇺🇸 원문 (English)
CloudNativePG is a platform designed to manage PostgreSQL databases within Kubernetes environments. Prior to 1.28.4 and 1.29.2, CloudNativePG embedded cleartext role passwords in `ALTER ROLE` and `CREATE ROLE` statements generated by SetUserPassword in pkg/management/postgres/utils/roles.go and appendPasswordOption in internal/management/controller/roles/postgres.go. When pg_stat_statements was preloaded with track_utility enabled and an untrusted tenant held pg_monitor or pg_read_all_stats, the tenant could recover platform-managed superuser or application-owner passwords, reconnect through enabled superuser TCP access, and execute operating system commands in the database pod with `COPY ... FROM PROGRAM`. Clusters using SCRAM-SHA-256 verifiers in managed-role Secrets were not affected. This issue is fixed in versions 1.28.4, 1.29.2, and 1.30.0.
📍 영향받는 시스템
CloudNativePG 1.28.4 미만 및 1.29.2 미만 버전 (SCRAM-SHA-256 미사용 시)
⚔️ 공격 벡터
pg_stat_statements의 track_utility 기능을 이용해 로그에 남은 평문 비밀번호를 탈취한 후 superuser 권한으로 접속하여 OS 명령 실행
🛡️ 대응 방법
CloudNativePG를 1.28.4, 1.29.2 또는 1.30.0 이상의 버전으로 업데이트하거나 managed-role Secret에 SCRAM-SHA-256 검증기 사용
🔧 검증 코드
명령어 결과에 수정된 버전(1.28.4, 1.29.2, 1.30.0 중 하나)이 출력되면 안전하며, 아무것도 출력되지 않으면 취약할 수 있습니다.
helm list -n cloudnative-pg -o json | jq -r '.[] | select(.chart | contains("cloudnative-pg")) | .chart' | grep -E '1.28.4|1.29.2|1.30.0'