漏洞概述
漏洞CVE-2020-8554是一个能够影响多用户Kubernetes群集的漏洞,如果潜在的攻击者可以创建或编辑服务和Pod,那么他们就可以拦截来自集群中其他Pod或节点的流量了。
攻击者如果能够创建一个ClusterIP服务并设置.spec.externalIPs字段的话,他们就能够拦截全部到该IP的流量。除此之外,攻击者还可以修复LoadBalancer服务的状态,并通过设置status.loadBalancer.ingress.ip来实现类似的效果。通常来说,这种都属于特权操作,一般不会授予普通用户去进行操作访问。
这个漏洞属于Kubernetes设计缺陷,如果不对用户层面的运行机制进行修改的话,该漏洞将很难被修复或缓解。
安全按等级
中危
漏洞分析
Kubernetes (简称K8s)是是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署、规划、更新、维护的一种机制。K8s 最早是由谷歌开发的,目前由Cloud Native Computing Foundation 基金会维护。
研究人员在K8s 中发现一个影响所有K8s版本的设计漏洞,允许租户创建和更新服务的多租户集群成为最易受到攻击的目标。如果攻击者可以创建或编辑服务或pod,可能就可以拦截集群中来自其他pod的流量。如果用任意的外部IP 来创建一个服务,集群中到该IP 的流量就会被路由到该服务,这样有权限利用外部IP 来创建服务的攻击者就可以拦截到任意目标IP的流量。
CVE-2020-8554漏洞是中危漏洞,有创建和编辑服务和pod等基本租户权限的攻击者可以在没有任何用户交互的情况下远程利用该漏洞。
由于External IP (外部IP)服务并没有广泛应用于多租户集群中,而且授予租户LoadBalancer IP 的补丁服务/状态权限并不推荐,因此该漏洞只影响少量的Kubernetes 部署。
使用Falco检测CVE-2020-8554
检测针对该漏洞的漏洞利用尝试或攻击活动是防范此类网络攻击的关键,我们现在可以使用Falco来在主机和容器层面检测针对该漏洞的而已活动。Falco是CNCF的开源项目,可以用于容器和Kubernetes的运行时威胁检测。
Falco的好处之一是其功能强大而灵活的规则语言,当Falco发现由一组可定制的规则定义的异常行为时,它将为我们生成并报告安全事件。与此同时,Falco还提供了一些现成的检测规则可供我们使用。
接下来,我们一起看一看如何使用Falco来检测何时有人试图使用外部IP创建集群类型的服务事件。
如前文所述,漏洞CVE-2020-8554是由Kubernetes设计缺陷造成的。它允许具有创建/修复服务权限的用户将网络流量重定向到外部IP地址。大多数情况下,当一个只用于内部通信的服务被创建时,一个私有IP地址被分配给这个服务。
由于这是一个私有IP地址,那么Kubernetes集群中就没有人可以访问这种服务了。不过,用户还可以给这个服务配置并绑定一个外部IP地址。
实际上,这种操作行为是符合规范的。但是,恶意攻击者也可以利用该功能来执行中间人(MitM)攻击。
Falco规则:检测绑定外部IP地址的Kubernetes服务
如果你认为自己受到了漏洞CVE-2020-8554的影响,可以使用下列Falco规则来进行漏洞检测:
- - macro: service_with_external_IP
- condition: (jevt.value[/requestObject/spec/externalIPs] exists and jevt.value[/requestObject/spec/externalIPs] != "<NA>")
- - rule: Create/Update ClusterIP Service with External IP
- desc: Detect an attempt to modify a ClusterIP type service with external IP assigned (CVE-2020-8554)"
- condition:kevt and service and kmodify and jevt.value[/responseObject/spec/type]=ClusterIP and service_with_external_IP
- output: ClusterIP type service created/updated with external IP assigned (user=%ka.user.name service=%ka.target.name ns=%ka.target.namespace operation=%ka.verb ports=%ka.req.service.ports external IP=%jevt.value[/requestObject/spec/externalIPs])
- priority: WARNING
- source: k8s_audit
当有人使用外部IP地址创建或修改一个服务的话,Falco将会输出下列安全事件:
总结
请记住,漏洞CVE-2020-8554是一个由于设计缺陷而无法修复的漏洞,因此我们建议广大用户应该使用适当的安全工具来对Kubernetes集群进行安全监控。