Kubernetes 网络策略绕过漏洞深度解析

本文详细披露了在AWS EKS环境中,由于VPC CNI控制器错误处理“已完成”Pod的网络策略规则,导致其他Pod能意外继承其网络访问权限,从而绕过Kubernetes NetworkPolicy限制的安全漏洞。文章包含漏洞原理、复现步骤与影响分析。

漏洞概述

亚马逊VPC CNI控制器在配置为管理NetworkPolicy规则时,会错误地将已完成的Pod(例如运行Job后处于“Completed”状态的Pod)的防火墙规则,如同Pod仍在运行一样继续应用。这会导致当其他无关的Pod被分配了与某个已完成的Pod相同的IP地址时,会错误地继承其网络访问权限,从而绕过NetworkPolicy的限制。

受影响版本

此漏洞在EKS 1.33版本中经过测试确认,影响以下配置:

  • 启用自动模式并开启了网络策略控制器。
  • 非自动模式,使用VPC CNI插件版本 v1.19.5-eksbuild.1。
  • 非自动模式,使用VPC CNI插件版本 v1.20.1-eksbuild.3。 严格模式对此漏洞无影响。

漏洞原理

预期行为:当Pod完成(例如Job执行结束)时,其状态应被视为与Pod删除相同,并立即移除相关的防火墙规则。

实际缺陷行为

  1. Pod A(例如一个被NetworkPolicy允许访问的Job)获得IP地址X,控制器在节点上为该IP地址X添加相应的防火墙规则。
  2. Pod A执行完毕进入“Completed”状态,但其防火墙规则未被移除。
  3. Pod A的IP地址X被释放回地址池。
  4. Pod B(一个本不应被NetworkPolicy允许任何访问的Pod)恰好被分配了相同的IP地址X。
  5. Pod B将继承Pod A曾拥有的网络访问权限,直到已完成的Pod A被删除。

复现步骤

  1. 环境准备:创建一个启用自动模式的EKS集群,并配置kubectl访问。
  2. 启用网络策略管理:应用配置,启用网络策略管理并排空现有节点。
  3. 部署测试资源:应用YAML文件,创建一个测试命名空间 networkpolicy-test、一个简单的whoami部署(Deployment)及其服务(Service),并配置一个NetworkPolicy。该策略规定,只有带有标签 test: allowed 的Pod才能访问whoami服务的80端口。
  4. 验证策略生效
    • 部署一个标签为 test: blocked 的Job(blocked-job.yaml)。该Pod将因策略阻止而无法访问whoami服务,最终超时并显示Error状态。
    • 删除此测试Job。
  5. 创建“允许”的Pod:部署多个标签为 test: allowed 的Job(如20个)。这些Pod将能够成功访问whoami服务并进入Completed状态。
  6. 创建“阻止”的Pod:立即部署多个标签为 test: blocked 的Job(如20个)。
  7. 验证漏洞
    • 检查所有test: blocked Pod的状态。
    • 漏洞确认:如果部分本应被阻止的Pod显示为Completed状态(成功访问了服务),而另一些则显示为ErrorRunning状态(访问被正确阻止),则漏洞存在。
    • 进一步验证:通过kubectl get pod -o wide查看IP地址。所有IP地址与某个“允许”Pod的IP地址发生碰撞的“阻止”Pod,其状态都应为Completed;IP地址未发生碰撞的“阻止”Pod,状态应为ErrorRunning

安全影响

  • 摘要:在依赖Kubernetes NetworkPolicy规则来限制网络访问的EKS集群中,存在已完成的、曾被允许某些访问的Pod,将导致其他Pod获得相同的未授权访问权限。
  • 具体影响
    • 防火墙绕过:同一Kubernetes集群上的Pod能够访问其本应被NetworkPolicy规则阻止访问的网络端点。
    • 策略失效:NetworkPolicy规则被随机误用(基于IP地址分配),这使得EKS中的NetworkPolicy规则实际上变得无效。
    • 保密性:依赖网络控制来保护数据的EKS服务,其数据可能被暴露。
    • 完整性:依赖NetworkPolicy规则来防止未授权访问端点的服务可能被访问。

修复与状态

AWS VDP团队已确认此漏洞。修复程序已部署到所有EKS区域,用户无需执行任何操作即可应用此修复。该漏洞报告已被披露,状态标记为“已解决”。

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