前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CVE-2020-8554:Kubernetes的中间人漏洞

CVE-2020-8554:Kubernetes的中间人漏洞

作者头像
FB客服
发布2023-04-26 20:40:17
3390
发布2023-04-26 20:40:17
举报
文章被收录于专栏:FreeBufFreeBuf

漏洞概述

2020年12月4日,Kubernetes产品安全委员会披露了一个新的Kubernetes漏洞,即CVE-2020-8554。这是一个中危漏洞,所有的Kubernetes版本都会受到该漏洞的影响。该漏洞允许Kubernetes服务将集群流量拦截至任意IP地址,任何可以管理服务的用户可以利用此漏洞对群集中的Pod和节点执行中间人(MITM)攻击。

攻击者可以利用MITM攻击伪装成内部或外部节点,然后从网络流量中获取凭证,在将目标用户的数据发送到其预期目标之前篡改目标用户的数据,或完全阻止其与特定IP地址通信。不过,如果使用了TLS址类的加密协议的话,攻击者就没那么轻松了。

多用户集群受该漏洞的影响较大,因为它们最有可能拥有可以管理服务的非管理员用户。

Kubernetes产品安全委员会确定,修补CVE-2020-8554将导致Kubernetes的多个功能发生变化,因此短期内没有解决该漏洞的方案。相反,委员会提供了几种限制方案,可以缓解该漏洞的影响。

漏洞分析

CVE-2020-8554源于Kubernetes服务的两个特性中的设计缺陷:外部IP和负载平衡器IP。Kubernetes服务是将运行在一组Pod上的应用程序公开为网络服务的抽象方法。一个服务会暴露在一个或多个IP地址上,一旦部署完成,集群中的节点将把发往服务IP的流量路由到组成服务的一个后备Pod中。

在集群管理和分配服务IP时,一切都正常。但是当Kubernetes用户能够为其服务分配任意IP时,问题就出现了。在这种情况下,恶意用户可以分配已被其他节点(内部或外部)使用的IP,并截获这些IP的所有群集流量。我们有两种方法可以控制服务的IP:

分配一个外部IP; 通过loadBalancer.ingress.ip字段来分配一个负载均衡器IP,这个方法要求patch service/status权限。

下面的服务在部署至集群时,将会把所有的集群DNS流量拦截至8.8.8.8这个IP地址(Google的DNS服务器),然后路由到evil-dns-server Pod中:

为了接收到拦截的流量,攻击者必须控制支持其恶意服务的节点。在大多数情况下,我们会选择一个Pod,不过服务也可以由外部节点(而不是集群Pod)托管,这意味着攻击者还可以将截获的流量路由到集群外部的一个外部节点。这要求攻击者创建指向外部地址的Kubernetes节点,这需要create endpoint权限。

CVE-2020-8554入侵标识符IoC

如果你发现了以下几种情况之一的话,说明你可能受到攻击了:

服务不应该暴露给外部IP或负载均衡器IP; 一个服务的外部IP或负载均衡器IP匹配集群中的一个外部IP地址,比如说一个Pod IP或其他服务的集群IP; 一个服务的外部IP或负载均衡器IP指向一个已知的外部域名,比如说8.8.8,我们可以执行nslookup来判断一个IP是否指向一个已知域名; 一个服务的负载均衡器IP为0.0.1,表明节点主机流量已被劫持;

如需识别集群中的服务是否暴露给了外部IP地址,可以运行下列命令:

代码语言:javascript
复制
kubectl get services –all-namespaces -o=jsonpath='{“NAMESPACE\tNAME\tEXTERNAL IPS\n”}{range .items[?(.spec.externalIPs)]}{.metadata.namespace}{“\t”}{.metadata.name}{“\t”}{.spec.externalIPs}{“\n”}{end}’ | column -t -s “$(printf ‘\t’)”

如需识别集群中的服务是否暴露给了负载均衡器IP地址,可以运行下列命令:

代码语言:javascript
复制
kubectl get services –all-namespaces -o=jsonpath='{“NAMESPACE\tNAME\tLOAD BALANCER IPs\n”}{range .items[?(.status.loadBalancer.ingress[*].ip)]}{.metadata.namespace}{“\t”}{.metadata.name}{“\t[“}{range .status.loadBalancer.ingress[*]}{“\””}{.ip}{“\”,”}{end}{“]\n”}{end}’ | sed ‘s/\(.*\),/\1/’ |column -t -s “$(printf ‘\t’)”

Prisma Cloud Compute缓解方案

Prisma Cloud Compute针对Rego规则内置的Admission支持,可以用于实现Kubernetes产品安全委员会提出的缓解方案。

限制外部IP访问

客户可以使用以下方法设置许可规则,以阻止服务访问外部IP,客户害可以通过设置白名单来选择允许的IP地址。

按照Prisma Cloud Compute的文档在你的集群中启用Admission Control。

下载Mitigation for Kubernetes CVE-2020-8554 – External IPs规则模板,我们可以使用下列命令下载规则:

代码语言:javascript
复制
wget https://raw.githubusercontent.com/twistlock/k8s-cve-2020-8554-mitigations/main/PrismaExternalIPs.json

进入到‘Defend/Access/Admission’并点击‘Import’,然后选择已下载好的规则模板,并点击‘Add’按钮:

要将某些IP作为外部IP使用,请按照下图所示更新规则,以下规则白名单IP为54.74.83:

规则设置好之后,任何尝试将服务暴露给已禁止的外部IP的行为都将失败,并且还会触发警报。

总结

CVE-2020-8554是一个独特的漏洞,源于Kubernetes服务的设计缺陷。如果您的集群是多用户集群,或者允许未经授权的用户创建和更新服务,那么您将有可能受到该漏洞的影响。如果集群中的应用程序没有通过TLS强制加密通信,那么您将面临更大的风险。即使该漏洞未被修复,Kubernetes产品安全委员会提出的缓解措施也可以有效地防止此类攻击。

精彩推荐

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 漏洞概述
  • 漏洞分析
  • CVE-2020-8554入侵标识符IoC
  • Prisma Cloud Compute缓解方案
    • 限制外部IP访问
    • 总结
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档