![Kubernetes仪表盘和外部IP代理漏洞及应对之策](https://static001.infoq.cn/resource/image/88/19/88f1f8a50b660dfbcac195cd1698d519.png)
近期,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 中检索和显示它的功能。
![](https://static001.infoq.cn/resource/image/aa/78/aa680bad21661ad1c8902ca3fc438478.png)
该漏洞对 Rancher 1.6.x 和 2.x 意味着什么?
在 Rancher 2.x 中,默认情况下不会启用 Kubernetes 仪表盘,因为 Rancher 2.0 用户界面可用作替代方案。若您不会使用到仪表盘代码库,则不受此漏洞的影响。如果您更改了默认设置、在 Rancher 管理的任何 Kubernetes 集群之上部署了 Kubernetes 仪表盘,请务必使用 Kubernetes 官方提供的指南及补丁修复这一漏洞。
如果你使用的是 Rancher 1.6.x,则完全无需担心。在 Rancher 1.6.x 中,Kubernetes 仪表盘作为每个 Kubernetes 集群环境的一部分包含在内;但是,1.6.x 部署不受影响,因为 Rancher Server 充当了 Kubernetes 仪表盘的身份验证授权和代理。它不利用默认的 Kubernetes 仪表盘登录机制。此外,Rancher 部署的 Kubernetes 仪表盘不使用任何自定义 TLS 证书。
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 服务器的本地地址。今天发布的修复将阻止代理到本地地址。
![](https://static001.infoq.cn/resource/image/20/89/20ff15f29acc0fc45f8e2fb837062789.png)
这对 Rancher 用户意味着什么?
Rancher 托管集群的默认权限,仅允许集群所有者和成员更改 podIP 或 nodeIP 字段。将该权限提供给其他用户时,必须假定允许用户能够完全访问集群中的任何节点。所有其他默认角色(例如项目所有者/成员)都无权访问这些字段。今天发布的修复程序所适用的部署的 Kubernete 集群,是其控制面板网络与应用程序使用的网络不同的。在 Rancher 1.6.x 或 2.x 中创建的 Kubernete 集群,均默认集群管理员具有对控制面板节点的完全访问权限。如果您正在使用 Rancher 2.x,并且正在使用托管云提供商(例如 EKS、GKE、AKS),请与他们核实安全性是否存在问题,因为控制面板是归云提供商所有。
我们始终希望能确保 Rancher 用户能够在最短时间内使用到最新的安全修复程序和相应补丁,Kubernetes 版本 v1.10.12、v1.11.6 和 v1.12.4 解决了这两个安全漏洞,这三个版本的 Kubernetes 将可在 Rancher 版本 v2.1.5 和 v2.0.10 中使用。如果你是 Rancher v1.6.x 版本的用户,则无需做任何更新,因为标准的 v1.6.x 安装不受这次安全漏洞影响。
您还可以通过下述两个链接了解到 Kubernetes 官方针对这两个漏洞的相应讨论:
https://discuss.kubernetes.io/t/security-release-of-dashboard-v1-10-1-cve-2018-18264/4069
评论