Kubernetes 命名空间删除竞争条件漏洞深度剖析:网络策略绕过与修复方案

本文详细解析了Kubernetes中编号为CVE-2024-7598的安全漏洞。该漏洞源于命名空间删除过程中由于对象删除顺序未定义而引发的竞争条件,可能导致网络策略保护被短暂绕过,为攻击者提供可乘之机。文中提供了具体的漏洞检测命令、临时缓解措施以及社区推荐的修复控制器。

CVE-2024-7598:命名空间终止期间因竞争条件导致的网络限制绕过

漏洞概述

CVE ID: CVE-2024-7598 CVSS 评分: 3.1(低危)- CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N 报告日期: 2024年8月7日 影响组件: kube-apiserver

一个安全漏洞在Kubernetes中被发现,恶意或已被攻陷的Pod可能在命名空间删除过程中,绕过由网络策略(Network Policies)强制实施的网络限制。问题的核心在于命名空间终止期间对象删除的顺序未被明确定义,网络策略有可能在它们所保护的Pod之前被删除。这可能导致一个短暂的时间窗口,在此期间Pod仍在运行并接受网络连接,但网络策略的限制却未被应用。

影响范围与检测

受影响版本

  • kube-apiserver >= v1.3 的所有版本均受影响。

我是否受影响?

所有依赖网络策略的集群都可能存在此漏洞。 要检查您的集群是否正在使用网络策略,可以运行以下命令:

1
kubectl get networkpolicies.networking.k8s.io --all-namespaces

漏洞缓解措施

目前,该漏洞尚未有官方的永久性修复版本。Kubernetes社区已提出长期的全面修复方案,记录在以下KEP(Kubernetes Enhancement Proposal)中:

在等待长期方案落地前,用户可以通过以下两种方式临时缓解此漏洞:

  1. 手动删除顺序管理:在开始删除命名空间之前,手动删除Pod和编排Pod的工作负载资源(如Deployment、StatefulSet等)。
  2. 为网络策略添加终结器(Finalizer):这是社区推荐的临时解决方案。通过为NetworkPolicy对象添加终结器,可以防止它们在受保护的Pod被删除之前被删除。以下概念验证(PoC)控制器可以自动化此过程:
    • 项目名称: network-policy-finalizer
    • GitHub仓库: kubernetes-sigs/network-policy-finalizer
    • 安装命令: kubectl apply -f https://github.com/kubernetes-sigs/network-policy-finalizer/blob/main/install.yaml

network-policy-finalizer 控制器工作原理

该控制器会为创建的每个NetworkPolicy对象添加一个终结器。当命名空间控制器尝试删除NetworkPolicy时,控制器会等待与该策略关联的所有Pod被删除后,才移除终结器,从而允许策略被最终删除。此控制器在KEP 5080实现后将不再需要

漏洞检测与报告

  • 检测:网络策略的用户可以通过检查网络日志来尝试发现潜在的滥用行为。具体检测方法因环境而异。
  • 报告:如果您发现此漏洞已被利用的证据,请联系 security@kubernetes.io

致谢

此漏洞由以下人员报告和协调:

  • 报告者:John McGuinness (@s1xtw03) 和 Aaron Coffey (@aaroncoffey)
  • 协调委员会:Antonio Ojea (@aojea), Tim Hockin (@thockin), Dan Winship (@danwinship), Shane Utt (@shaneutt), David Eads (@deads2k), Clayton Colemon (@smarterclayton), Mo Khan (@enj), Craig Ingram (@cji)
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计