kube-proxy组件在iptables和ipvs模式下均需要设置内核参数net.ipv4.conf.all.route_localnet=1, 从而允许本地回环访问。攻击者可能通过共享主机网络的容器,或在集群节点访问同一个LAN或二层网络下的相邻节点上绑定监听了本地127.0.0.1端口的TCP/UDP服务,从而获取接口信息。如果服务没有设置必要的安全认证,可能会造成信息泄露风险。

影响范围

在下列版本的kube-proxy组件均在此CVE的影响范围内:
  • kube-proxy v1.18.0~v1.18.3
  • kube-proxy v1.17.0~v1.17.6
  • kube-proxy≤v1.16.10

当前ACK集群节点中默认监听127.0.0.1的系统服务是需要认证的,且API Server也统一禁用了非认证端口。唯一暴露的是kubelet 10255的非认证只读端口,由于kubelet只读接口同样监听在0.0.0.0,因此即使修复了该漏洞在本地或特权容器中也同样可以获取到接口信息。综上,该CVE对ACK集群影响不大。

漏洞影响

当攻击者拥有主机网络配置能力或运行在一个具备了CAP_NET_RAW能力的容器实例时,就可以获取在目标节点上监听了127.0.0.1的服务socket信息。如果在目标主机上存在127.0.0.1可以访问到且不需要任何认证鉴权的暴露服务,那么该服务信息就能被攻击者获取。问题详情请参见issue

漏洞评分:
  • 如果集群API Server开启了非认证端口(默认8080),那么攻击者可能获取到API Server接口相关信息,威胁等级为高危漏洞,评分为8.8分
  • 如果集群API Server默认关闭了非认证端口,威胁等级为中危漏洞,评分为5.4分
可能的攻击者:
  • 同一交换机内的其他共享主机实例。
  • 本机的运行容器。

防范措施

建议您采取以下安全防范措施:
  • 当前ACK集群默认关闭API Server 8080非认证端口,请勿手动开启该端口。
  • 执行以下命令,在集群中配置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
  • 严格控制集群节点共享主机的登录权限,及时吊销可能泄露的kubeconfig集群访问凭证。
  • 禁止Container开启CAP_NET_RAW能力,执行以下命令,可以在pod spec中关闭Container的CAP_NET_RAW能力。
    securityContext:
          capabilities:
            drop: ["NET_RAW"]
  • 通过PodSecurityPolicy策略限制部署特权或共享主机网络容器,另外可以通过在策略中配置requiredDropCapabilities强制容器部署关闭CAP_NET_RAW能力。