CVE-2020-8554 Kubernetes中间人攻击漏洞复现与解析,附演示视频
发布时间:
2020-12-20 11:28
漏洞简介
Kubernetes存在安全漏洞,该漏洞于2020年12月8日在Kubernetes的安全通告中被披露。漏洞编号:CVE-2020-8554。如果攻击者可以创建或编辑服务和容器,则此安全问题使攻击者能够拦截来自群集中其他容器(或节点)的流量。攻击者可利用该漏洞通过Kubernetes上的LoadBalancer或ExternalIP充当中间人,以便在会话中读取或写入数据。值得注意的是,该漏洞披露起初是在大约一年前发现的,它揭示了一个影响所有Kubernetes版本的设计缺陷,并且目前还没有缓解该问题的软件更新。
影响范围
kubernetes 所有版本
背景
长期修复方案仍未确定,官网可能从以下四个方面入手修复该漏洞
1)决定停止支持外部IP,弃用并最终删除该功能
2)尝试重新设计外部IP功能,弃用旧行为并管理向新功能的迁移
3)接受当前状态,并将externalip-webhook升级为内置准入控制器
4)接受当前状态,并支持externalip-webhook作为长期解决方案
为了印证该漏洞的影响,我们对该漏洞进行了复现与解析。
原理
集群内某些服务绑定了某些本地网络以外的IP,导致集群内发往这些ip的数据包被k8s路由到以上的服务,而非默认网关中。
复现
准备环境
集群环境
准备以下环境,其中ubuntu为主节点,ubuntu2004-0和ubuntu1804-0 工作节点
yaml文件
test-nettools.yaml
test-nettools.yaml为工具容器的yaml文件,用于测试http访问结果。
echoserver.yaml
echoserver.yaml为攻击者创建Deployment的yaml文件,用于在集群内接收被劫持流量
mitm-externalip.yaml
mitm-externalip.yaml,为部署service的yaml文件,用以部署劫持服务。
web服务
kali.dosec 是集群外内网web服务
复现过程
1)test-nettools容器默认在default namespace 下运行
之后我们会模拟劫持前后使用test-nettools容器访问kali.dosec这个web服务,来观测劫持前后的变化
2)记录kali.dosec 的ip地址

3)记录流量被劫持前,test-nettools容器访问kali.dosec的回显
kali.dosec是内部搭建的一个web测试站点,该站点默认回显内容为hello,world. This is kali.dosec
4)修改,部署poc

5)验证部署状态

6)利用验证
test-nettools 访问 kali.dosec 但很明显应答是由 echoserver 做出的,即劫持成功,漏洞利用验证通过

漏洞分析
总体来说,该漏洞的成因是Kubernetes的设计缺陷。利用该漏洞至少需要RBAC权限才能创建,更新或修补服务资源。尤其是:
1、能够创建ClusterIP服务并设置spec.externalIPs字段的攻击者可以拦截到该IP的流量。
2、能够修补LoadBalancer服务status.loadBalancer.ingress.ip的status.loadBalancer.ingress.ip字段的攻击者可以拦截到该IP的流量。
加固建议
1)关注官方对该问题的修复,参考连接如下:
https://github.com/kubernetes/kubernetes/issues/97110
2) 对LoadBalancer和ExternalIP进行限制
参考连接为:https://github.com/kubernetes-sigs/externalip-webhook





