🇰🇷 한글 설명
External Secrets Operator 2.2.0 이하의 v2 템플릿 엔진에서 getHostByName 함수가 사용자 제어 템플릿에 노출되어 DNS 익스필트레이션 공격을 가능하게 합니다. 공격자가 templated ExternalSecret을 생성/수정할 수 있으면 컨트롤러의 DNS 조회 기능으로 시크릿 정보를 DNS 쿼리를 통해 유출할 수 있습니다.
💡 쉬운 설명
Kubernetes의 External Secrets Operator가 사용자 템플릿에서 DNS 조회 기능을 실행할 수 있게 해줍니다. 악의적인 사용자가 이를 이용해 DNS 쿼리로 시스템의 암호 정보를 몰래 빼낼 수 있습니다.
🇺🇸 원문 (English)
External Secrets Operator reads information from a third-party service and automatically injects the values as Kubernetes Secrets. Versions 2.2.0 and below contain a vulnerability in runtime/template/v2/template.go where the v2 template engine removes env and expandenv from Sprig's TxtFuncMap() but leaves the getHostByName function accessible to user-controlled templates. Since ESO executes templates within the controller process, an attacker who can create or update templated ExternalSecret resources can invoke controller-side DNS lookups using secret-derived values. This creates a DNS exfiltration primitive, allowing fetched secret material to be leaked via DNS queries without requiring direct outbound network access from the attacker's workload. The impact is a confidentiality issue, particularly in environments where untrusted or lower-trust users can author templated ExternalSecret resources and the controller has DNS resolution capability. This issue has been fixed in version 2.3.0.
📍 영향받는 시스템
External Secrets Operator v2.2.0 이하
⚔️ 공격 벡터
ExternalSecret 리소스에 악의적인 템플릿 주입으로 getHostByName 함수 호출 및 DNS 익스필트레이션 수행
🛡️ 대응 방법
External Secrets Operator를 v2.3.0 이상으로 업그레이드
🔧 검증 코드
Helm으로 설치된 버전을 확인하거나 디플로이먼트 이미지 태그에서 현재 ESO 버전 확인
helm list -n external-secrets-system | grep external-secrets || kubectl get deployment external-secrets-webhook-service -n external-secrets-system -o jsonpath='{.spec.template.spec.containers[0].image}' 2>/dev/null