K8s产品委员会于本周一发布了一个安全公告,该公告揭露了一个K8s影响多租户集群的安全漏洞。该漏洞由Anevia的Etienne Champetier报告。如果潜在的攻击者已经可以创建或编辑服务和Pod,则他们可能能够拦截来自集群中其他Pod(或节点)的流量。

kubesphere无法访问 k8s nodeport无法访问_kubesphere无法访问

委员会已将此问题等级列为中等严重性,并分配为CVE-2020-8554 。

kubesphere无法访问 k8s nodeport无法访问_Pod_02

能够创建ClusterIP服务并设置spec.externalIPs字段的攻击者可以拦截到该IP的流量。能够修补LoadBalancer服务状态(通常被认为是特权操作,通常不应授予用户)的攻击者可以将status.loadBalancer.ingress.ip设置为类似效果。

此问题是设计缺陷,由于K8s开发团队尚未提供安全更新来解决此问题,建议k8s管理员通过限制对易受攻击功能的访问来缓解CVE-2020-8554漏洞。

受影响的组件和配置

所有Kubernetes版本都会受到影响。授予租户创建和更新服务和Pod的能力的多租户群集最容易受到攻击。

苹果公司负责Kubernetes安全的软件工程师Tim Allclair解释说:“如果潜在的攻击者已经可以创建或编辑服务和Pod,那么他们可能就能够拦截集群中其他Pod(或节点)的流量。如果使用任意外部IP创建服务,则从群集内部到该外部IP的流量将被路由到该服务,这使攻击者有权使用外部IP创建服务,以拦截到任何目标IP的流量。”

幸运的是,由于外部IP服务未在多租户群集中广泛使用,并且不建议为租户用户授予LoadBalancer IP补丁服务/状态权限,因此该漏洞只会影响少量的Kubernetes集群环境。

缓解措施

官方目前没有针对此问题的补丁程序,当前只能通过限制对易受攻击功能的访问来缓解。由于in-tree内的修复程序需要进行重大更改,因此,在解除限制后,我们将展开有关长期修复该程序的缓解措施。

为了限制外部IP的使用,我们提供了一个准入webhook容器:

k8s.gcr.io/multitenancy/externalip-webhook:v1.0.0

源代码和部署说明发布在:

github.com/kubernetes-sigs/externalip-webhook

或者,可以使用OPA Gatekeeper限制外部IP 。可以在这里找到示例ConstraintTemplate和Constraint:

github.com/open-policy-agent/gatekeeper-library/tree/master/library/general/externalip

由于我们不建议授予用户补丁程序服务/状态权限,因此没有为LoadBalancer IP提供缓解措施。如果需要LoadBalancer IP限制,则可以复制外部IP缓解措施。

侦测

ExternalIP服务并未得到广泛使用,因此我们建议手动审核任何外部IP使用情况。用户不应修补服务状态,因此对于已通过用户身份验证的修补服务状态请求的审核事件可能是可疑的。

额外细节

请参阅GitHub问题以获取更多更新:

github.com/kubernetes/kubernetes/issues/97076