🔍 CVE-2023-39347

7.6
CVSS Score
HIGH
2023-09-27
2026-06-17 06:12
✅ 완료

🇰🇷 한글 설명

Cilium의 eBPF 기반 데이터플레인에서 Pod 라벨을 업데이트할 수 있는 공격자가 잘못된 네트워크 정책을 적용하도록 유도할 수 있는 취약점입니다. 공격자가 존재하지 않는 네임스페이스 이름을 라벨로 제공하면 해당 Pod에 적용되어야 할 모든 네임스페이스 단위 네트워크 정책을 우회할 수 있습니다. 이 문제는 Cilium 1.14.2, 1.13.7, 1.12.14 버전에서 해결되었습니다.

💡 쉬운 설명

해커가 Pod의 이름표(라벨)를 조작하여 보안 규칙이 적용되지 않도록 속이는 취약점입니다. 이를 통해 원래는 차단되어야 할 네트워크 통신을 허용할 수 있습니다.

🇺🇸 원문 (English)

Cilium is a networking, observability, and security solution with an eBPF-based dataplane. An attacker with the ability to update pod labels can cause Cilium to apply incorrect network policies. This issue arises due to the fact that on pod update, Cilium incorrectly uses user-provided pod labels to select the policies which apply to the workload in question. This can affect Cilium network policies that use the namespace, service account or cluster constructs to restrict traffic, Cilium clusterwide network policies that use Cilium namespace labels to select the Pod and Kubernetes network policies. Non-existent construct names can be provided, which bypass all network policies applicable to the construct. For example, providing a pod with a non-existent namespace as the value of the `io.kubernetes.pod.namespace` label results in none of the namespaced CiliumNetworkPolicies applying to the pod in question. This attack requires the attacker to have Kubernetes API Server access, as described in the Cilium Threat Model. This issue has been resolved in: Cilium versions 1.14.2, 1.13.7, and 1.12.14. Users are advised to upgrade. As a workaround an admission webhook can be used to prevent pod label updates to the `k8s:io.kubernetes.pod.namespace` and `io.cilium.k8s.policy.*` keys.

📍 영향받는 시스템

Cilium 1.14.2 미만, 1.13.7 미만, 1.12.14 미만 버전

⚔️ 공격 벡터

Kubernetes API 서버 접근 권한을 이용해 Pod 라벨에 존재하지 않는 네임스페이스 등의 값을 주입하여 정책 우회

🛡️ 대응 방법

Cilium을 최신 패치 버전(1.14.2, 1.13.7, 1.12.14 이상)으로 업그레이드하거나, Admission Webhook을 사용하여 특정 라벨 수정을 차단

🔧 검증 코드

명령어 결과에 패치된 버전(1.14.2, 1.13.7, 1.12.14 이상)이 나타나지 않으면 취약할 가능성이 있습니다.

Shell / Script
cilium version | grep -E 'v(1\.14\.[2-9]|1\.13\.[7-9]|1\.12\.[1-4])' || echo 'Vulnerable or Unknown'

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:H