🇰🇷 한글 설명
StreamsHub Console operator가 혼동된 대리인(Confused Deputy)으로 동작하여 발생하는 취약점입니다. 권한이 있는 테넌트가 Console 커스텀 리소스를 생성할 때 특정 네임스페이스를 지정하면, 오퍼레이터가 클러스터 전체 권한을 이용해 타겟 네임스페이스의 KafkaUser Secret을 읽어 공격자의 네임스페이스로 평문 복사할 수 있습니다.
💡 쉬운 설명
관리자 권한을 가진 프로그램이 사용자의 요청을 잘못 처리하여, 다른 사용자의 비밀번호나 인증 키를 공격자에게 전달해 주는 보안 결함입니다. 이를 통해 공격자는 허가되지 않은 다른 구역의 중요한 정보를 훔칠 수 있습니다.
🇺🇸 원문 (English)
The StreamsHub Console operator acts as a confused deputy: a Kubernetes tenant with permission to create a Console custom resource can set spec.kafkaClusters[].credentials.kafkaUser.namespace to any namespace. The operator, running with cluster-wide Secrets RBAC, reads the victim-namespace KafkaUser Secret (SASL credentials or TLS private keys) and writes the plaintext material into a Secret in the attacker's namespace. No same-namespace check or allowlist exists anywhere in the code path.
📍 영향받는 시스템
StreamsHub Console operator (버전 미상)
⚔️ 공격 벡터
Console 커스텀 리소스의 spec.kafkaClusters[].credentials.kafkaUser.namespace 필드에 타겟 네임스페이스를 입력하여 Secret 탈취
🛡️ 대응 방법
오퍼레이터 코드에 네임스페이스 일치 여부 검증 로직을 추가하거나, 허용된 네임스페이스 목록(Allowlist)을 적용해야 합니다.
🔧 검증 코드
출력된 결과에 본인의 네임스페이스가 아닌 다른 네임스페이스가 포함되어 있다면 취약한 설정이 존재할 가능성이 높습니다.
kubectl get console.streamshub.io -A -o jsonpath='{.items[*].spec.kafkaClusters[*].credentials.kafkaUser.namespace}'