Kubernetes kubelet和kube-proxy授权问题漏洞公告(CVE-2020-8558)
漏洞详情
Kubernetes官方发布安全公告,其核心组件kube-proxy存在主机边界绕过漏洞(CVE-2020-8558)。利用漏洞攻击者可能通过同一局域网下的容器,或在集群节点上访问同一个二层域下的相邻节点上绑定监听了本地127.0.0.1端口的TCP/UDP服务,从而获取接口信息。如果绑定在端口上的服务没有设置身份验证,则会导致该服务容易受到攻击。例如,如果集群管理员运行监听了127.0.0.1:1234的TCP服务,由于这个bug,该服务将有可能被与该节点在同一局域网中的其他主机,或与该服务运行在同一节点上的容器所访问。如果端口1234上的服务不需要额外的认证(因为假设只有其他localhost进程可以),那么很容易受到利用此bug进行攻击。
华为云提醒使用kube-proxy的用户及时安排自检并做好安全加固。
详情请参考链接:https://github.com/kubernetes/kubernetes/issues/92315
漏洞类型 |
CVE-ID |
漏洞级别 |
披露/发现时间 |
---|---|---|---|
代码注入 |
高 |
2020-07-08 |
漏洞影响
当攻击者拥有主机网络配置能力或运行在一个具备了CAP_NET_RAW能力的容器实例时,就可以获取在目标节点上监听了127.0.0.1的服务socket信息。如果在目标主机上存在127.0.0.1可以访问到且不需要任何认证鉴权的暴露服务,那么该服务信息就能被攻击者获取。问题详情请参见Placeholder issue。
可能的攻击者:
- 同一交换机内的其他共享主机实例。
- 本机的运行容器。
在下列版本的kube-proxy组件均在此CVE的影响范围内:
- kube-proxy v1.18.0~v1.18.3
- kube-proxy v1.17.0~v1.17.6
- kube-proxy <v1.16.10
CCE集群控制面已经通过安全组进行防护,只允许从租户节点或者相邻节点访问安全端口,默认安全。
集群node节点上系统组件监听在127.0.0.1的端口只涉及健康检查、监控信息查询等请求,不会有信息泄露风险。
综上,该CVE对CCE集群影响不大。
漏洞修复方案
目前官方已提供安全版本修复了该漏洞,请受影响的用户升级至以下安全版本。
- kubelet/kube-proxy v1.18.4+
- kubelet/kube-proxy v1.17.7+
- kubelet/kube-proxy v1.16.11+
建议您采取以下安全防范措施:
- 如果业务容器需使用主机网络模式且又监听在非安全端口上,可以通过在节点上手动添加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服务器命令行来禁用端口。
- 如集群内运行有不受信的容器,需要manifest文件中关闭CAP_NET_RAW能力,可执行如下命令:
securityContext: capabilities: drop: ["NET_RAW"]
修复漏洞前请将资料备份,并进行充分测试。