kubelet的驱逐管理器(eviction manager)中没有包含对Pod中挂载的/etc/hosts文件的临时存储占用量管理,因此在特定的攻击场景下,一个挂载了/etc/hosts的Pod可以通过对该文件的大量数据写入占满节点的存储空间,从而造成节点的拒绝访问(Denial of Service)。本文介绍该漏洞的影响范围、漏洞影响和防范措施。

影响范围

下列版本的kubelet组件均在此CVE的影响范围内:
  • kubelet v1.18.0~v1.18.5
  • kubelet v1.17.0~v1.17.9
  • kubelet<v1.16.13

漏洞影响

kubelet的驱逐管理器(eviction manager)中没有包含对Pod中挂载的/etc/hosts文件的临时存储占用量管理,因此在特定的攻击场景下,一个挂载了/etc/hosts的Pod可以通过对该文件的大量数据写入占满节点的存储空间,从而造成节点的拒绝访问(Denial of Service)。该漏洞为中危漏洞,CVSS评分为5.5

具备以下特权的Pod拥有节点上/etc/hosts文件的写入权限:
  • Pod中的容器具备CAP_DAC_OVERRIDE系统权限(默认具备)。
  • Pod以root(UID为0)用户启动或者Pod Security Context中的allowPrivilegeEscalation设置为true(默认为true)。

防范措施

建议您采取以下安全防范措施:
  • 通过使用集群Pod安全策略或其他admission准入机制强制Pod删除CAP_DAC_OVERRIDE系统权限,详情请参见使用Pod安全策略
  • 通过使用集群Pod安全策略或其他admission准入机制限制以root用户启动容器,或设置参数allowPrivilegeEscalationfalse,详情请参见使用Pod安全策略
  • 对节点上的/etc/hosts文件进行有效的监控,比如在云安全中心中启用网页防篡改保护,详情请参见启用网页防篡改保护
  • 在集群节点上执行以下命令,可以发现运行在该节点上的Pod存在异常大小的etc-hosts文件。
    find /var/lib/kubelet/pods/*/etc-hosts -size +1M