Kubernetes网络策略绕过漏洞:已完成Pod导致EKS集群防火墙失效

漏洞描述

亚马逊VPC CNI控制器在配置为管理NetworkPolicy规则时,会错误地将针对"已完成"状态的Pod(例如Job执行结束)的防火墙规则,应用给后续恰好分配到相同IP地址的其他无关Pod。

例如,假设Pod A拥有IP地址X,并通过NetworkPolicy被授予了某些网络访问权限。VPC CNI控制器通过为节点上IP地址X添加防火墙规则来实现此策略。当Pod A运行完成(例如它是一个Job)后,这些防火墙规则并未被移除。由于Pod已结束,其IP地址可以被重新分配给其他Pod。如果Pod B(未被NetworkPolicy授予任何访问权限)被分配到了相同的IP地址X,那么Pod B将继承Pod A曾拥有的网络访问权限,直到"已完成"的Pod A被删除。

正确的行为应当是检查Pod的完成状态,并将Pod完成视同Pod删除,在其结束时移除相应的防火墙规则。

受影响版本

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

  • 启用了网络策略控制器的"自动"模式。
  • 非"自动"模式下,使用VPC CNI附加组件 v1.19.5-eksbuild.1。
  • 非"自动"模式下,使用VPC CNI附加组件 v1.20.1-eksbuild.3。
    "严格"模式对此漏洞无影响。

概念验证(POC)

在一个启用了"自动"模式或enableNetworkPolicy设为true的VPC CNI控制器的EKS集群上,应用以下预备性Kubernetes资源:


apiVersion: apps/v1
kind: Deployment
metadata:
  name: whoami
  namespace: networkpolicy-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: whoami
  template:
    metadata:
      labels:
        app: whoami
    spec:
      containers:
        - name: whoami
          image: traefik/whoami:latest
          ports:
            - containerPort: 80

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: ingress
  namespace: networkpolicy-test
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          test: allowed
    ports:
    - protocol: TCP
      port: 80

上述NetworkPolicy配置将允许以下Job连接到Deployment:


apiVersion: batch/v1
kind: Job
metadata:
  name: blocked
  namespace: networkpolicy-test
spec:
  template:
    metadata:
      name: curl
      labels:
        test: blocked
    spec:
      containers:
        - name: curl
          image: "alpine/curl:latest"
          command: ["curl", "-v", "whoami.networkpolicy-test.svc.cluster.local:80"]
      restartPolicy: Never

然而,如果存在一个处于"已完成"状态的允许访问的Job,被阻止的Pod将有机会获得与该已完成Pod相同的IP地址。当这种情况发生时,被阻止的Pod将能够(违反NetworkPolicy)访问Deployment。

为了方便复现,建议应用所附文件创建20个允许访问的Job。等待所有20个Job完成,然后应用所附文件创建20个被阻止的Job。几乎可以肯定,一些被阻止的Pod将被分配到与已完成的允许访问Pod匹配的IP地址,从而能够成功连接到Deployment并正常退出。而另一些被阻止的Pod将被分配不同的IP地址,因此将正确地无法连接到Deployment,挂起然后报错。

影响

摘要:在依赖Kubernetes NetworkPolicy规则来限制网络访问的EKS集群上,存在被允许某些访问的"已完成"Pod将导致其他Pod获得相同的访问权限。

详细影响

  • 防火墙绕过:同一Kubernetes集群上的Pod能够访问本应被NetworkPolicy规则阻止的网络端点。
  • 规则随机失效:NetworkPolicy规则被错误应用(基于IP地址分配)。某些Pod将获得本不应拥有的访问权限。这实际上使得EKS中的NetworkPolicy规则失效。

安全影响分析

  • 机密性:依赖网络控制来保护数据的EKS中运行的服务,其数据可能被暴露。
  • 完整性:依赖NetworkPolicy规则来防止未授权访问端点的服务可能被访问。
  • 可用性:基本不适用。

修复与处理

在报告提交后,AWS VDP团队确认并验证了该漏洞,随后进行了修复。修复已部署到所有EKS区域,用户无需采取任何操作即可应用此修复。漏洞报告最终被公开披露。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

posted @ 2025-12-03 18:01  qife  阅读(0)  评论(0)    收藏  举报