jeffreygc
- 关注
本文仅用于学习研究为目的,禁止用于任何非法目的,否则后果自负
漏洞背景
flux
社区公布了kustomize-controller
一处命令注入漏洞,拥有创建Kubernetes
Secrets
、Service Accounts
和Flux Kustomization
对象的用户,可以通过在Kubernetes
Secret
中嵌入shell
脚本在kustomize-controller
容器内执行命令。在多租户场景下,拥有创建kustomize-controller
资源对象的用户,能够通过命令注入,在kustomize-controller
Pods
中运行命令,借用容器中的kubectl
,能够使得经过身份验证的Kubernetes
用户从低权限提权到集群管理员权限。
CVE-2021-41254被评估为8.8 HIGH。
漏洞分析与复现
漏洞分析
如下代码片段,拥有创建 KubernetesSecrets
、Service Accounts
和Flux Kustomization
资源对象的用户,能够通过在saToken
即Kubernetes
Secret
中嵌入shell
命令从而能够在容器中实现命令执行。且从代码中可以看到,容器中是有kubectl
工具的。
会直接使用GetServiceAccountToken
获取到servica account token
取值,然后将saToken
的值直接拼接到cmd里执行
cmd = fmt.Sprintf("%s --token %s", cmd, saToken)
同时,代码中会校验下secretName
和serviceAccountName
的一致性,secretName
的名字必须以serviceAccountName
的名字开头
因此,我们可以尝试在saToken
中嵌入恶意命令,从而产生命令执行的效果
通过登陆到kustomize-controller
的Pod
,可以看到镜像中是自带sh
和kubectl
命令的
畅读付费文章
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)