kube-proxy組件在iptables和ipvs模式下均需要設定核心參數net.ipv4.conf.all.route_localnet=1, 從而允許本地迴環訪問。攻擊者可能通過共用主機網路的容器,或在叢集節點訪問同一個LAN或二層網路下的相鄰節點上綁定監聽了本地127.0.0.1連接埠的TCP/UDP服務,從而擷取介面資訊。如果服務沒有設定必要的安全認證,可能會造成資訊泄露風險。
影響範圍
在下列版本的kube-proxy組件均在此CVE的影響範圍內:
- kube-proxy v1.18.0~v1.18.3
- kube-proxy v1.17.0~v1.17.6
- kube-proxy≤v1.16.10
當前ACK叢集節點中預設監聽127.0.0.1的系統服務是需要認證的,且API Server也統一禁用了非認證連接埠。唯一暴露的是kubelet 10255的非認證唯讀連接埠,由於kubelet唯讀介面同樣監聽在0.0.0.0,因此即使修複了該漏洞在本地或特權容器中也同樣可以擷取到介面資訊。綜上,該CVE對ACK叢集影響不大。
漏洞影響
當攻擊者擁有主機網路設定能力或運行在一個具備了CAP_NET_RAW能力的容器執行個體時,就可以擷取在目標節點上監聽了127.0.0.1的服務socket資訊。如果在目標主機上存在127.0.0.1可以訪問到且不需要任何認證鑒權的暴露服務,那麼該服務資訊就能被攻擊者擷取。問題詳情請參見issue。
漏洞評分:
可能的攻擊者:
- 同一交換器內的其他共用主機執行個體。
- 原生運行容器。
防範措施
建議您採取以下安全防範措施:
- 當前ACK叢集預設關閉API Server 8080非認證連接埠,請勿手動開啟該連接埠。
- 執行以下命令,在叢集中配置iptables規則,用於拒絕非本地對127.0.0.1的訪問流量。
iptables -I INPUT --dst 127.0.0.0/8 ! --src 127.0.0.0/8 -m conntrack ! --ctstate RELATED,ESTABLISHED,DNAT -j DROP - 嚴格控制叢集節點共用主機的登入許可權,及時吊銷可能泄露的kubeconfig叢集訪問憑證。
- 禁止Container開啟CAP_NET_RAW能力,執行以下命令,可以在pod spec中關閉Container的CAP_NET_RAW能力。
securityContext: capabilities: drop: ["NET_RAW"] - 通過PodSecurityPolicy策略限制部署特權或共用主機網路容器,另外可以通過在策略中配置requiredDropCapabilities強制容器部署關閉CAP_NET_RAW能力。