
# 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>
表1漏洞信息 
| 漏洞类型 | CVE-ID                                                                        | 漏洞级别 | 披露/发现时间    |
|:---|:---|:---|:---|
| 代码注入 | [CVE-2020-8558](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8558) | 高    | 2020-07-08 |
   
#### 漏洞影响
当攻击者拥有主机网络配置能力或运行在一个具备了CAP_NET_RAW能力的容器实例时，就可以获取在目标节点上监听了127.0.0.1的服务socket信息。如果在目标主机上存在127.0.0.1可以访问到且不需要任何认证鉴权的暴露服务，那么该服务信息就能被攻击者获取。问题详情请参见[Placeholder issue](https://github.com/kubernetes/kubernetes/issues/92315)。
可能的攻击者：
- 同一交换机内的其他共享主机实例。
- 本机的运行容器。
在下列版本的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"]
  ```
  
![](https://support.huaweicloud.com/bulletin-cce/public_sys-resources/caution_3.0-zh-cn.png)
修复漏洞前请将资料备份，并进行充分测试。
