CVE-2020-8558漏洞分析

2020-08-05 9,065

研究人员在Kubernetes的kube-proxy中发现了一个安全漏洞——CVE-2020-8558。

kube-proxy

kube-proxy是Kubernetes上每个节点上运行的网络代理。其任务是管理pod和服务的链接。Kubernetes服务会暴露单个clusterIP,也可能含有多个pod来进行负载均衡。每个服务可能含有3个pod,每个pod都有自己的IP地址,但只暴露一个clusterIP。访问该服务的pod会发送包到单个clusterIP,然后重定向到服务背后的pod。kube-proxy会为每个节点设置路由表,所以请求目标服务会被正确地路由到其中一个pod。

CVE-2020-8558

在kube-proxy中,集群中的每个节点都启用了route_localnet。节点的本地网络中的每个节点都可以访问节点的内部服务。每个无需认证就可以运行内部服务的节点都可能受到影响。除了节点的本地网络的邻居主机,节点上运行的pod就可以访问内部服务。

也就是说,pod只能访问节点的内部服务。为发起攻击,pod必须拥有处理CAP_NET_RAW的能力。然而Kubernetes默认会授权这种能力。

研究人员分析发现,Kubenetes API服务器可以通过insecure-port来处理localhost的非认证请求。不安全端口的存在允许其他运行在master上的控制面板组件与api 服务器进行会话。基于角色的访问控制和其他授权机制并未在该端口上强制实现。Kuber netes安装会经常在master节点运行api 服务器,意味着运行了启用了route_localnet 的kube-proxy。

如果 Kubernetes 不禁用insecure-port,master节点的host所在的本地网络就可以利用CVE-2020-8558来与api服务器通信,并获取集群的完全控制权限。

补丁

最初发布的补丁在kubelet的route_localnet上做了修改,route_localnet是引发节点丢弃到127.0.0.1 的包的节点。截止目前,route_localnet在kube-proxy 中仍然是启用的。

在那些应用了补丁的情况下,仍然存在本地网络攻击者可以发送包到节点的内部UDP服务的情况。但攻击者只存在于受害者节点禁用了逆向路径过滤的情况,但这种情况下攻击者无法得到响应。

漏洞影响

如果同时满足以下条件,那么该集群可能会受到CVE-2020-8558 漏洞的影响:

  • 集群运行着有漏洞的版本,即版本号低于v1.18.4、v1.17.7、v1.16.11;

  • 节点上运行着kube-proxy;

  • 节点运行着无需进一步认证的localhost-only服务;

此外,如果满足以下条件,那么攻击者通过api服务器insecure-port可以完全接管服务器:

  • 集群没有通过–insecure-port=0 禁用api服务器;

  • 节点上的api服务器还运行着kube-proxy;

  • 节点可以被本地网络中的恶意节点或节点上运行的含有CAP_NET_RAW的恶意pod攻击。

结论

CVE-2020-8558漏洞可能会引发很严重的后果,研究人员建议用户尽快更新补丁。CVE-2020-8558漏洞给我们一个启示:安全最佳实践确实可以减少攻击面。此外,还应禁用api服务器insecure-port。

https://unit42.paloaltonetworks.com/cve-2020-8558/


本文作者:ang010ela

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/136873.html

Tags:
评论  (0)
快来写下你的想法吧!

ang010ela

文章数:56 积分: 711

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号