🇰🇷 한글 설명
Kyverno 2.5.2 이전 버전의 PropertyCard.vue 컴포넌트에서 v-html 지시어로 인해 URL 검증을 우회한 HTML 페이로드가 DOM에 직접 주입됩니다. Kubernetes PolicyReport의 results[].properties 필드에 저장된 악의적인 콘텐츠를 통해 XSS 공격이 발생하며, 클러스터 내 PolicyReport 쓰기 권한이 있는 모든 사용자가 악용 가능합니다.
💡 쉬운 설명
Kyverno 웹 화면이 사용자 입력을 충분히 검증하지 않아, 악의적인 웹 코드를 삽입할 수 있는 결함입니다. 쿠버네티스 클러스터의 정책 리포트에 숨은 악성 코드를 넣으면 관리자의 브라우저에서 실행될 수 있습니다.
🇺🇸 원문 (English)
Kyverno is a policy engine designed for cloud native platform engineering teams. Prior to 2.5.2, Vue 3's v-html directive is the framework-documented mechanism for injecting raw HTML, and it intentionally disables the auto-escaping that {{ }} interpolation provides. The PropertyCard.vue component uses v-html for the else branch of the URL check, meaning any non-URL string value flows directly into the DOM as HTML. The isURL() guard only filters values that parse as http: or https: URLs, so any HTML payload not starting with those schemes bypasses it entirely. The data originates from Kubernetes PolicyReport .results[].properties fields, which are arbitrary string maps populated by policy engines and potentially by any principal with write access to PolicyReport objects in the cluster. This vulnerability is fixed in 2.5.2.
📍 영향받는 시스템
Kyverno < 2.5.2
⚔️ 공격 벡터
Kubernetes PolicyReport 객체의 properties 필드에 v-html 우회 HTML/JavaScript 페이로드 주입을 통한 Stored XSS
🛡️ 대응 방법
Kyverno를 2.5.2 이상으로 즉시 업그레이드
🔧 검증 코드
출력의 kyverno 이미지 버전 태그가 2.5.2 이상이면 안전, 미만이면 취약
kubectl get deployment -A -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.spec.template.spec.containers[*].image}{"\n"}{end}' | grep kyverno