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 的所有版本均受影响。
我是否受影响?
所有依赖网络策略的集群都可能存在此漏洞。 要检查您的集群是否正在使用网络策略,可以运行以下命令:
|
|
漏洞缓解措施
目前,该漏洞尚未有官方的永久性修复版本。Kubernetes社区已提出长期的全面修复方案,记录在以下KEP(Kubernetes Enhancement Proposal)中:
在等待长期方案落地前,用户可以通过以下两种方式临时缓解此漏洞:
- 手动删除顺序管理:在开始删除命名空间之前,手动删除Pod和编排Pod的工作负载资源(如Deployment、StatefulSet等)。
- 为网络策略添加终结器(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)