前言
2021年4月,Kubernetes社区披露了一个编号为CVE-2020-8562的安全漏洞,授权用户可以通过此漏洞访问 Kubernetes 控制组件上的私有网络。
通过查阅此漏洞披露报告可发现,这个漏洞拥有较低的CVSS v3评分,其分值仅有2.2分,与以往披露的Kubernetes高危漏洞相比,这个拥有较低评分的漏洞极其容易被安全研究人员以及运维人员所忽视。但经过研发测试发现,在实际情况中,这个低风险的漏洞却拥有着不同于其风险等级的威胁:在与云上业务结合后,CVE-2020-8562漏洞将会为云厂商带来不可忽视的安全挑战。
在这篇文章中,云鼎实验室将为大家带来业内首个CVE-2020-8562漏洞分析报告,一同来看一下这个被忽视的低风险漏洞引发的“血案”。
CVE-2020-8555漏洞简述
Kubernetes为了缓解CVE-2020-8555等历史漏洞带来的安全问题,对APIServer Proxy请求进行域名解析以校验请求的IP地址是否处于本地链路 (169.254.0.0/16) 或 localhost (127.0.0.0/8) 范围内,Kubernetes通过此方式禁止由用户触发的对Services,Pods,Nodes,StorageClass对象的内网Proxy访问权限。
但是在完成校验并通过校验之后,Kubernetes立即进行第二次域名解析,此次域名解析后并不再进行IP地址的校验,这将导致上述校验存在绕过问题,如果一个DNS服务器不断返回不同的非缓存解析请求,攻击者可以利用此方式绕过Kubernetes的API Server Proxy IP地址限制,并访问内网ControlPlane管控组件。
详细的漏洞细节可参见如下图Issue所示:
图 1 CVE-2020-8562漏洞细节
Issue地址如下:
https://github.com/kubernetes/kubernetes/issues/101493
在正式开始介绍这个漏洞是如何对Kubernetes集群带来危害之前,我们先来看看这个漏洞中应用到主要攻击技巧:DNS重绑定攻击(DNS Rebinding)。
DNS重绑定攻击
DNS重绑定攻击技术的实现主要依赖于攻击者可将其自建的DNS服务器中DNS TTL配置为设置为0或者极小值。DNS TTL表示DNS记录的生存时间,数值越小, DNS记录在DNS服务器上缓冲的时间越小。
在攻击者将DNS TTL数值设置为一个极小值时,当受害目标第一次访问恶意域名时并发起域名解析请求时,恶意DNS服务器会返回一个ip地址A;当受害目标第二次发起域名解析请求时,却会得到ip地址B的解析结果。具体的原理,我们可以通过一道CTF题目,深入了解一下:
$dst = @$_