Kubernetes 高危漏洞 CVE-2024-10220:gitRepo 卷可能导致任意命令执行

本文详细分析了 Kubernetes 中的 CVE-2024-10220 安全漏洞。该漏洞允许拥有 Pod 创建权限的用户,通过配置 gitRepo 卷并利用 Git 仓库中的 hooks 目录,在容器边界之外执行任意命令,CVSS 评分为 8.1 分(高危)。文章列出了受影响的版本、修复版本、缓解措施及检测方法。

CVE-2024-10220: 通过 gitRepo 卷执行任意命令

在 Kubernetes 中发现了一个安全漏洞,该漏洞可能允许拥有创建 Pod 并关联 gitRepo 卷权限的用户,执行超出容器边界的任意命令。此漏洞利用了目标仓库中的 hooks 文件夹来在容器边界之外运行任意命令。

请注意,此问题最初已于 7 月公开披露并修复,现在我们追溯性地为其分配一个 CVE,以协助提高认知和跟踪。

此问题被评为 高危 (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N) (得分:8.1),并分配了 CVE-2024-10220

我是否受影响?

此 CVE 影响那些 Pod 使用内建(in-tree)gitRepo 卷将仓库克隆到子目录的 Kubernetes 集群。如果 Kubernetes 集群运行在下面列出的受影响版本之一,那么它就受此漏洞影响。

受影响版本

  • kubelet v1.30.0 至 v1.30.2
  • kubelet v1.29.0 至 v1.29.6
  • kubelet <= v1.28.11

如何缓解此漏洞?

要缓解此漏洞,您必须将 Kubernetes 集群升级到下面列出的已修复版本之一。

此外,由于 gitRepo 卷已被弃用,推荐的解决方案是使用 init 容器执行 Git 克隆操作,然后将目录挂载到 Pod 的容器中。此方法的示例在此处提供

已修复版本

  • kubelet master/v1.31.0 - 由 #124531 修复
  • kubelet v1.30.3 - 由 #125988 修复
  • kubelet v1.29.7 - 由 #125989 修复
  • kubelet v1.28.12 - 由 #125990 修复

检测

要检测此漏洞是否已被利用,您可以使用以下命令列出所有使用内建 gitRepo 卷并克隆到 .git 子目录的 Pod。

1
kubectl get pods --all-namespaces -o json | jq '.items[] | select(.spec.volumes[].gitRepo.directory | endswith("/.git")) | {name: .metadata.name, namespace: .metadata.namespace}'

如果您发现此漏洞已被利用的证据,请联系 security@kubernetes.io

致谢

此漏洞由 Imre Rad 报告并协助缓解。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计