🇰🇷 한글 설명
Traefik 2.11.46 이전, 3.x 3.6.17 이전, 3.7.0 버전은 Kubernetes Ingress 제공자에서 Ingress 및 Service 어노테이션에 대한 네임스페이스 검증이 없어 다른 네임스페이스의 Middleware, ServersTransport, TLSOption을 참조할 수 있습니다. 이로 인해 한 테넌트의 리소스를 생성하거나 수정할 수 있는 공격자가 다른 테넌트의 주입된 자격증명이나 클라이언트 인증서를 획득하여 네임스페이스 기반 테넌트 격리를 우회할 수 있습니다.
💡 쉬운 설명
Kubernetes에서 한 팀이 자신의 네임스페이스 안에서 설정을 바꿀 수 있을 때, 다른 팀의 보안 설정과 인증 정보를 빌려 쓸 수 있는 문제입니다. 여러 팀이 한 클러스터를 공유하는 환경에서 팀 간 격리가 깨질 수 있습니다.
🇺🇸 원문 (English)
Traefik before 2.11.46, 3.x before 3.6.17, and 3.7.0 lack namespace validation for Ingress and Service annotations in the Kubernetes Ingress provider, allowing references to Middlewares, ServersTransports, and TLSOptions in other namespaces. Attackers able to create or update Ingress or Service resources in one namespace can set router.middlewares or service.serverstransport annotations to obtain another tenant's injected credentials or reuse its client certificates, bypassing namespace-based tenant isolation.
📍 영향받는 시스템
Traefik 2.11.46 미만, 3.x 3.6.17 미만, 3.7.0 (Kubernetes Ingress 제공자 사용 환경)
⚔️ 공격 벡터
네임스페이스 내 Ingress 또는 Service 리소스를 생성·수정할 수 있는 공격자가 router.middlewares 또는 service.serverstransport 어노테이션에 다른 네임스페이스의 리소스를 지정해 자격증명이나 클라이언트 인증서를 탈취
🛡️ 대응 방법
Traefik을 2.11.46 이상 또는 3.6.17 이상(3.7.x는 수정 버전으로)으로 업그레이드하고, 네임스페이스별 RBAC로 Ingress/Service 쓰기 권한을 제한
🔧 검증 코드
출력된 Traefik 이미지 태그를 확인하여 2.11.46 미만, 3.x 3.6.17 미만, 또는 3.7.0이면 취약하며, 출력이 없으면 Kubernetes 클러스터에 Traefik이 배포되지 않은 것입니다.
kubectl get deployment -A -o jsonpath='{range .items[*]}{.spec.template.spec.containers[*].image}{"\n"}{end}' 2>/dev/null | grep -i traefik