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智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码

公众号二维码


浙公网安备 33010602011771号