CVE-2025-0426:通过kubelet检查点API实现节点拒绝服务攻击的安全漏洞分析

本文详细分析了Kubernetes中发现的安全漏洞CVE-2025-0426,该漏洞允许通过向kubelet的未认证只读HTTP端点发送大量容器检查点请求,导致节点磁盘被填满,从而引发节点拒绝服务攻击。

描述

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 选项的文档。
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计