🇰🇷 한글 설명
ACM/MCE 보조 서비스에서 pull-secret 검증 실패 시 참조된 원본 내용을 InfraEnv.status.conditions[].message에 그대로 기록하는 취약점입니다. 이를 통해 'view' 권한만 가진 네임스페이스 사용자가 직접 접근할 수 없는 Secret의 .dockerconfigjson 데이터를 탈취할 수 있습니다.
💡 쉬운 설명
권한이 낮은 사용자가 원래는 볼 수 없는 비밀번호나 인증 정보를 시스템의 상태 메시지를 통해 몰래 훔쳐볼 수 있는 보안 구멍입니다. 이는 시스템의 접근 제어 규칙을 우회하여 중요한 정보를 노출시킵니다.
🇺🇸 원문 (English)
ACM/MCE assisted-service writes raw referenced pull-secret contents into `InfraEnv.status.conditions[].message` when pull-secret validation fails. A namespace principal with the stock `view` ClusterRole cannot directly read Secrets, but can read `InfraEnv` objects and recover the referenced Secret's `.dockerconfigjson` data from status.
This bypasses the Kubernetes/OpenShift RBAC separation between read-only namespace viewers and Secret readers. In the reproduced proof, the same ServiceAccount was denied `get` and `list` on Secrets, but recovered synthetic pull-secret `username`, `password`, `email`, and base64 `auth` fields through `InfraEnv.status`.
📍 영향받는 시스템
ACM/MCE assisted-service가 설치된 Kubernetes/OpenShift 환경
⚔️ 공격 벡터
view 권한을 가진 계정으로 InfraEnv 객체의 status 메시지를 조회하여 Secret 정보 탈취
🛡️ 대응 방법
ACM/MCE assisted-service를 최신 보안 패치가 적용된 버전으로 업데이트하고, status 메시지에 민감 정보가 포함되지 않도록 설정
🔧 검증 코드
명령어 실행 결과로 사용자 이름, 비밀번호 또는 인증 정보(auth)가 포함된 문자열이 출력되면 취약한 상태입니다.
kubectl get infraenv -n <namespace> -o jsonpath='{.status.conditions[*].message}' | grep -E 'username|password|auth'