近期,Kubernetes仪表盘和外部IP代理接连被发现存在安全问题。针对这两个漏洞,Kubernetes发布了相应的补丁版本供会受漏洞影响的用户解决问题。本文将更深入解读这两个安全漏洞的原理、会对您的Kubernetes部署造成的影响以及相应的应对之策。
通过Kubernetes仪表盘访问自定义TLS证书
Kubernetes仪表盘漏洞(CVE-2018-18264)会影响v1.10.0或更早的仪表盘版本。因为这一漏洞,用户可以“跳过”登录过程,假设配置的服务帐户,最后获得仪表盘所使用的自定义TLS证书。如果您已将Kubernetes仪表盘配置为需要登录并将其配置为使用自定义TLS证书,那么这一漏洞会影响到您,您需要及时注意。
该漏洞的运作原理
此漏洞可以分为两部分来解释。
第一个是,因为登陆时用户可以选择“跳过”这一选项,那么任何用户都可以绕过登录过程,该过程在v1.10.0或更早版本中始终默认启用。这样一来,用户就完全跳过登录过程并能使用仪表盘配置的服务帐户。
第二个是,使用仪表盘配置的服务帐户,必须最低限度地有权限访问自定义TLS证书(以secret的形式存储)。未经身份验证的登录,加上仪表板使用配置的服务帐户来检索这些secret的能力,组合在一起的结果就是这一安全问题。
使用仪表盘v1.10.1补丁时,默认情况下将不再启用“跳过”选项,并且会禁用仪表盘在UI中检索和显示它的功能。
Kubernetes API服务器外部IP地址代理漏洞
下面让我们来探讨Kubernetes公告所描述的第二个漏洞。
Kubernetes API服务器使用节点、node或服务代理API,将请求代理到pod或节点。通过直接修改podIP或nodeIP,可以将代理请求定向到任何IP。API服务器总是被部署在某网络中的,利用这个漏洞就访问该网络中的任何可用IP了。尽管自从v1.10发布以来,Kubernetes已经在很大程度上增加了检查以缓解这个问题,但最近才发现有一条路径的问题并没有被完全解决——将代理指向本地地址到运行API服务器的主机。
该漏洞的运作原理
通过使用Kubernetes API,用户可以使用节点代理、pod代理或服务代理API请求与pod或节点的连接。Kubernetes接受此请求,找到podIP或nodeIP的关联IP,并最终将该请求转发到该IP。这些通常由Kubernetes自动分配。但是,集群管理员(或具有类似“超级用户”权限的不同角色)可以更新资源的podIP或nodeIP字段以指向任意IP。
这在很大程度上不是问题,因为“普通”用户无法更改资源的podIP或nodeIP。podIP和nodeIP字段位于pod和节点资源的状态子资源中。为了更新状态子资源,必须专门授予RBAC规则。默认情况下,除了集群管理员和内部Kubernetes组件(例如kubelet、controller-manager、scheduler)之外,没有Kubernetes角色可以访问状态子资源。想要利用此漏洞,首先得拥有对集群的高级别访问权限。
这一次Kubernetes官方发布的修复,是确定攻击向量可以存在于与集群分开管理控制面板的设置中。在这种情况下,集群管理员是不能访问运行API服务器的主机的。这种情况存在于您从云提供商处获得的托管Kubernetes服务中。在这种情况下,集群管理员可以通过将podIP / nodeIP修改为本地地址(如127.0.0.1)来访问API服务器的本地地址。今天发布的修复将阻止代理到本地地址。
您还可以通过下述两个链接了解到Kubernetes官方针对这两个漏洞的相应讨论:
https://discuss.kubernetes.io/t/security-release-of-dashboard-v1-10-1-cve-2018-18264/4069
https://discuss.kubernetes.io/t/security-impact-of-kubernetes-api-server-external-ip-address-proxying/4072
领取专属 10元无门槛券
私享最新 技术干货