🇰🇷 한글 설명
Contour 1.23.0부터 1.33.4 버전에서 TLS 폴백 인증서 활성화와 JWT 제공자 설정이 동시에 구성될 경우, 잘못된 구성임에도 이를 거부하지 않는 취약점이 발견되었습니다. 이로 인해 SNI를 보내지 않거나 일치하지 않는 SNI를 사용하는 클라이언트의 요청이 JWT 검증을 우회하여 업스트림 서비스로 전달될 수 있습니다.
💡 쉬운 설명
보안 인증(JWT)을 설정했음에도 불구하고, 특정 방식으로 접속하면 이 인증 과정을 건너뛰고 서버에 접근할 수 있는 보안 구멍이 있습니다. 인증 없이 서비스에 접속할 수 있어 데이터 유출이나 권한 없는 접근의 위험이 있습니다.
🇺🇸 원문 (English)
Contour is a Kubernetes ingress controller using Envoy proxy. In versions 1.23.0 through 1.33.4, when an `HTTPProxy` is configured with incompatible combination of both `.spec.virtualhost.tls.enableFallbackCertificate: true` and `.spec.virtualhost.jwtProviders`, Contour does not reject the configuration. Consequently, requests from clients that do not send TLS SNI or send an unrecognized SNI (one that does not match any `HTTPProxy` FQDN) bypass configured JWT verification and are proxied to upstream services without a valid token. This issue is fixed in Contour v1.33.5. Contour now rejects and marks invalid any `HTTPProxy` resources that combine `.spec.virtualhost.tls.enableFallbackCertificate: true` with `.spec.virtualhost.jwtProviders`. Affected resources will receive a status condition with the error reason `TLSIncompatibleFeatures`. As a workaround, do not enable `.spec.virtualhost.tls.enableFallbackCertificate` on `HTTPProxy` resources that also define `.spec.virtualhost.jwtProviders`. Remove one of the two settings to avoid the invalid configuration.
📍 영향받는 시스템
Contour v1.23.0 ~ v1.33.4
⚔️ 공격 벡터
TLS SNI를 생략하거나 일치하지 않는 SNI를 사용하여 JWT 검증 로직을 우회하는 방식
🛡️ 대응 방법
Contour를 v1.33.5 이상으로 업데이트하거나, JWT를 사용하는 HTTPProxy에서 enableFallbackCertificate 설정을 비활성화하십시오.
🔧 검증 코드
출력된 이미지 태그 버전이 1.23.0에서 1.33.4 사이라면 해당 취약점에 노출된 상태입니다.
kubectl get deployment contour -n contour -o jsonpath='{.spec.template.spec.containers[0].image}' | grep -E 'contour:1\.(2[3-9]|3[0-3]\.[0-4])'