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用户启动容器,或设置参数allowPrivilegeEscalation为false,详情请参见【已弃用】使用Pod安全策略。
- 对节点上的/etc/hosts文件进行有效的监控,比如在云安全中心中启用网页防篡改保护,详情请参见网页防篡改。
- 在集群节点上执行以下命令,可以发现运行在该节点上的Pod存在异常大小的etc-hosts文件。
find /var/lib/kubelet/pods/*/etc-hosts -size +1M