kube-proxy安全漏洞CVE-2020-8558,Kubernetes:Node允许相邻主机绕过localhost [高]

半兽人 发表于: 2020-07-09   最后更新时间: 2020-07-09  

kube-proxy中发现了一个安全漏洞,它允许相邻的主机(运行在同一局域网或第2层域的主机)访问绑定在127.0.0.1的节点上的TCP和UDP服务。例如,如果集群管理员运行监听了127.0.0.1:1234的TCP服务,由于这个bug,该服务将有可能被与该节点在同一局域网中的其他主机,或与该服务运行在同一节点上的容器所访问。如果端口1234上的服务不需要额外的认证(因为假设只有其他localhost进程可以),那么很容易受到利用此bug进行攻击。

Kubernetes API Server的默认不安全端口,侦听的是127.0.0.1:8080,它允许未经身份验证的请求。许多Kubernetes安装程序明确地禁用了API服务器的不安全端口,但在没有禁用该端口的集群中,攻击者能够访问同一局域网上的另一个系统或控制在master上运行的容器来操作Kubernetes API,并在集群上执行任意API请求。该端口已被废弃,并将在 Kubernetes v1.20 中删除

该漏洞评级 (CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N),编号CVE-2020-8558.

注意,在未禁用Kubernetes API Server不安全端口的集群中,此漏洞评分[高]

如何判断你的集群是否有风险?

如果出现以下情况,会很受到攻击:

  • 你运行的是一个有漏洞的版本(见文)

  • 你的集群节点运行在一个环境中,在这个环境中,未受信的主机与节点共享同一个2层域(即同一个LAN)。

  • 你的集群允许不受信任的pods用CAP_NET_RAW运行容器(Kubernetes默认是允许这个功能)。

  • 你的节点(或主机网络Pod)运行的服务不需要身份验证(仅仅只限制了本地访问)。可以在节点上运行以下命令列出可能受影响的服务:

    • lsof +c 15 -P -n -i4TCP@127.0.0.1 -sTCP:LISTEN
    • lsof +c 15 -P -n -i4UDP@127.0.0.1

    在master节点上,像下面的lsof表示,Kubernetes API Server正在使用不安全的端口进行监听。

    COMMAND        PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    kube-apiserver 123 root 7u IPv4  26799      0t0  TCP 127.0.0.1:8080 (LISTEN)
    

受影响的版本

  • kube-proxy v1.18.0-1.18.3
  • kube-proxy v1.17.0-1.17.6
  • kube-proxy <1.16.10

如何临时解决这个漏洞?

在升级之前,可以通过在节点上手动添加一个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

另外,如果你的集群还没有禁用API服务器的不安全端口,我们强烈建议你禁用它。在你的kubernetes API Server命令行中添加:--insecure-port=0

检测

线路上的IPv4目标在127.0.0.0/8范围内并且节点的第2层目标MAC地址上的数据包可能表明攻击者正在针对此漏洞。

已修复的版本

  • kube-proxy v1.19.0+ (not yet released)
  • kube-proxy v1.18.4+
  • kube-proxy v1.17.7+
  • kube-proxy v1.16.11+

要升级,请参考:https://kubernetes.io/docs/tasks/administer-cluster/cluster-management/#upgrading-a-cluster

更多的细节可参考:https://github.com/kubernetes/kubernetes/issues/92315



您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容




上一条: 到头了!
下一条: Kubernetes v1.17稳定版本发布