CVE-2020-8554:Kubernetes中間人攻擊漏洞
12月4日,Kubernetes 產品安全委員會公開了一個新的Kubernetes漏洞——CVE-2020-8554。該漏洞是中危漏洞,影響所有的Kubernetes 版本,而且目前仍然沒有修復。
漏洞分析
CVE-2020-8554漏洞是Kubernetes服務中External IPs和 Load Balancer IPs 2個特征中的設計漏洞。Kubernetes服務是一種將運行在pod集上的應用以網絡服務的形式暴露。一個服務會暴露給一個或多個IP。一旦部署,集群中的節點就會將到服務IP的流量路由到提供該服務的后端pod。
當集群管理和分配服務IP時,一切正常。但是如果Kubernetes 用戶能夠為其服務分配任意IP時就會出現問題。在這種情況下,惡意用戶可以分配一個其他終端已經使用的IP 地址,攔截所有到該IP的集群流量。控制服務IP的方法一共有2種:
- 分配一個外部IP地址。
- 通過修復status.loadBalancer.ingress.ip 域名分配一個Load Balancer IP。該方法要求有補丁服務/狀態權限。
下面是部署到集群后,攔截所有到IP地址8.8.8.8的DNS流量并路由到惡意DNS服務器pod的服務。
圖1. 濫用外部IP來攔截到8.8.8.8的DNS流量的服務
為了接收攔截的流量,攻擊者必須控制支持惡意服務的終端。在大多數情況下是一個pod,與上面例子中的惡意DNS服務器pod一樣。此外,外部終端也可以支持這樣的服務,也就是說攻擊者可以將攔截的流量路由到集群意外的外部終端。但這要求攻擊者創建一個指向外部地址的Kubernetes終端,也就是說需要創建endpoint 權限。
受影響的產品
該漏洞影響所有的Kubernetes 版本,而且目前仍然沒有修復。滿足以下條件的集群會受到該漏洞的影響:
- 允許非admin Kubernetes用戶創建或更新服務,或對服務狀態打補丁;
- 允許非特權用戶控制pod,包括創建、更新和執行;
- 允許非特權用戶創建或更新終端。
此外,多租戶集群是最危險的,因為其最有可能實現以上有漏洞的配置。多租戶集群一般使用Kubernetes 命名空間來分割租戶,限制每個租戶對其命名空間的權限。但只要有一個租戶可以管理自己命名空間中的服務和pod,就可以利用CVE-2020-8554 漏洞來竊取整個集群的流量。因此,攻擊者可以入侵其中一個租戶來利用該漏洞來攔截其他租戶的流量。
緩解措施
Kubernetes產品安全委員會認為,在不對Kubernetes 用戶功能特征做出修改的情況下是不可能修復該漏洞的。因此,建議限制對這些有漏洞的特征的訪問來預防漏洞利用。委員會為External IP的使用提供了2個解決方案:定制的Admission Controller 和OPA Gatekeeper 限制。但是對Load Balancer IP 目前還沒有解決方案。
總結
CVE-2020-8554是Kubernetes 服務中的一個設計漏洞。如果集群是多租戶的,那么非特權用戶也可以創建和更新服務。雖然漏洞目前還沒有修復,Kubernetes產品安全委員會也給出了有效的緩解措施。
本文翻譯自:https://unit42.paloaltonetworks.com/cve-2020-8554/