描述
CVSS评分: CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H 在Kubernetes中发现一个安全漏洞:向kubelet未认证只读HTTP端点发送大量容器检查点请求,可能导致节点拒绝服务,原因是填满了节点的磁盘。
我是否受影响?
所有运行以下受影响版本、启用了kubelet只读HTTP端口并且使用了支持容器检查点功能的容器运行时(例如,将 enable_criu_support 设置为 true 的CRI-O v1.25.0+,或安装了criu的containerd v2.0+)的集群均受影响。
受影响版本
- kubelet v1.32.0 至 v1.32.1
- kubelet v1.31.0 至 v1.31.5
- kubelet v1.30.0 至 v1.30.9
如何缓解此漏洞?
可以通过以下方式缓解此问题:在kubelet配置中将 ContainerCheckpoint 特性门控设置为 false、禁用kubelet只读端口、限制对kubelet API的访问,或升级到下面列出的已修复版本。已修复版本对kubelet检查点API强制执行了身份验证。
已修复版本
- kubelet master - 通过 #129739 修复
- kubelet v1.32.2 - 通过 #130010 修复
- kubelet v1.31.6 - 通过 #130011 修复
- kubelet v1.30.10 - 通过 #130012 修复
- kubelet v1.29.14 - 通过 #130014 修复
注意:容器检查点支持在v1.25至v1.29版本中是一个默认关闭的Alpha特性。
检测
节点上出现大量发往kubelet只读HTTP服务器的 /checkpoint 端点的请求,或者(默认情况下)/var/lib/kubelet/checkpoints 目录下存储了大量检查点,可能表明有人试图利用此漏洞进行拒绝服务攻击。
如果您发现此漏洞已被利用的证据,请联系 security@kubernetes.io。
致谢
此漏洞由Google的Tim Allclair (@tallclair) 报告并修复。 该问题由以下人员协调处理:
- Tim Allclair (@tallclair)
- Sascha Grunert (@saschagrunert)
- Craig Ingram (@cji)
- Jordan Liggitt (@liggitt)
讨论记录
- dims 评论(2025年2月13日):查看了相关PR,询问修复方式是否是将注册检查点URL的部分移到
--enable-debugging-handlers下作为缓解措施。 - tallclair 回复(2025年2月14日):回答正确。但"调试处理程序"在这里具有误导性。默认处理程序会安装在未经认证的"只读"端口和经过认证的端口上,而"调试处理程序"只安装在经过认证的端口上。他在 #129354 中初步尝试使其更清晰,并建议改进
EnableDebuggingHandlers选项的文档。