2020年7月10日,监测到 CVE-2020-8558 kube-proxy 边界限制访问绕过漏洞。
kube-proxy是Kubernetes的核心组件,部署在每个Node节点上,它是实现Kubernetes Service的通信与负载均衡机制的重要组件。近日Kubernetes官方发布相关安全公告,kube-proxy组件在iptables和ipvs模式下均需要设置内核参数 net.ipv4.conf.all.route_localnet=1, 从而允许本地回环访问。攻击者可能通过共享主机网络的容器,或在集群节点上访问同一个LAN或二层网络下的相邻节点上绑定监听了本地127.0.0.1端口的TCP/UDP服务,从而获取接口信息。如果服务没有设置必要的安全认证,可能会造成信息泄露风险。阿里云应急响应中心提醒 kube-proxy 用户尽快采取安全措施阻止漏洞攻击。
漏洞评级
如果集群API Server开启了非认证端口(默认8080),那么攻击者可能获取到API Server接口相关信息,漏洞评级为高危,评分为8.8分。
如果集群API Server默认关闭了非认证端口,漏洞评级为中危,评分为5.4分。
影响版本
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集群影响不大
安全建议
1. 当前ACK集群默认关闭API Server 8080非认证端口,请勿手动开启该端口。
2. 执行以下命令,在集群中配置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
3. 严格控制集群节点共享主机的登录权限,及时吊销可能泄露的kubeconfig集群访问凭证。
4. 禁止Container开启CAP_NET_RAW能力,执行以下命令,可以在pod spec中关闭Container的CAP_NET_RAW能力。
securityContext:
capabilities:
drop: [“NET_RAW”]
5. 通过PodSecurityPolicy策略限制部署特权或共享主机网络容器,另外可以通过在策略中配置requiredDropCapabilities强制容器部署关闭CAP_NET_RAW能力。
相关链接
https://github.com/kubernetes/kubernetes/issues/90259