CVE-2020-8558

漏洞详情

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

漏洞影响

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

漏洞评分

  • 如果集群 API Server 开启了非认证端口(默认 8080),那么攻击者可能获取到 API Server 接口相关信息,威胁等级为高危漏洞,评分为 8.8 分。
  • 如果集群 API Server 默认关闭了非认证端口,威胁等级为中危漏洞,评分为 5.4 分。

防范措施

建议您采取以下安全防范措施:

如果业务容器需使用主机网络模式且又在非安全端口上监听,则可以通过在节点上手动添加 iptables 规则来缓解此漏洞。 执行以下命令在集群中配置 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 Server 不安全端口,可以将 --insecure-port=0 添加到 kubernetes API 服务器命令行来禁用端口。

如集群内运行不受信任的容器,可以禁止 Container 开启 CAP_NET_RAW 能力,在 pod spec 中关闭 ContainerCAP_NET_RAW 能力。

securityContext:
  capabilities:
    drop: 
    - "NET_RAW"

通过 PodSecurityPolicy 策略限制部署特权或共享主机网络容器,另外可以通过在策略中配置 requiredDropCapabilities 强制容器部署关闭 CAP_NET_RAW 能力。

官方修复的版本

  • v1.18.4
  • v1.17.7
  • v1.16.11

KLTS 修复的版本