云安全之Kubernetes API Server 8080端口未授权

本文涉及的产品
Web应用防火墙 3.0,每月20元额度 3个月
云安全基线管理CSPM免费试用,1000次1年
云安全中心 防病毒版,最高20核 3个月
简介: 在Kubernetes中,API Server是与集群通信的核心组件之一。默认情况下,Kubernetes API Server会在端口8080上侦听请求,如果Kubernetes API Server在8080端口上启用了未授权访问,那么攻击者可以通过该端口访问API Server并获取敏感信息或执行攻击。这可能会影响任何使用未经身份验证的HTTP协议连接的版本,包括Kubernetes的早期版本和未经修补的漏洞版本。

一.具体原理

   在Kubernetes中,API Server是与集群通信的核心组件之一。默认情况下,Kubernetes API Server会在端口8080上侦听请求,如果Kubernetes API Server在8080端口上启用了未授权访问,那么攻击者可以通过该端口访问API Server并获取敏感信息或执行攻击。这可能会影响任何使用未经身份验证的HTTP协议连接的版本,包括Kubernetes的早期版本和未经修补的漏洞版本。

image.png



二.利用条件


  • 1)  k8s版本小于1.16.0

      2)  8080对公网开放


三.漏洞复现

   在一般比较新的Kubernetes版本中,8080端口的HTTP服务是默认不启动的,我们可以通过命令“netstat-anpt|grep 8080"命令查看8080端口是否启动,如图1-1通过所示,如果Kubernetes使用者在/etc/kubernetes/manifests/kube-apiserver.yaml中配置了“- -–insecure-port=8080”及“- -–insecure-bind-address=0.0.0.0”这两个配置项,如图1-2所示,那么攻击者只要网络可达就可以直接对K8S进行未授权攻击

image.png

图1-1 查看8080端口是否启动

image.png

图1-2 8080端口错误配置


当我们在etc/kubernetes/manifests/kube-apiserver.yaml错误配置了之后,我们再访问K8S的8080端口,就可以成功复现出了K8S未授权漏洞,如图1-3所示。

image.png

图1-3 API Server 8080端口未授权



四.利用过程


1)我们可以通过在本地或者攻击机上使用Kubectl命令获取相关K8S集群的信息,例如我们通过执行如下命令来获取Nodes节点信息,执行结果如图1-4所示。

kubectl -s http://xxx.xxx.xxx.xxx:8080 get nodes

image.png

图1-4 通过Kubectl命令来获取Nodes节点信息


2)同时也可以执行如下命令来直接查看当前K8S集群中所有Pod,执行结果如图1-5所示。

kubectl -s http://xxx.xxx.xxx.xxx:8080 get pods -A

image.png

图1-5 通过Kubectl命令来获取Pod信息



五.防御措施


   如果您发现Kubernetes API Server的8080端口未授权访问,这可能意味着存在一个安全风险,可能会导致未经授权的用户或攻击者对集群进行操作。解决此问题的一种常见方法是通过以下步骤限制对API Server的访问:

1).使用网络策略:在Kubernetes中,可以使用网络策略(Network Policies)来限制进出集群的流量。通过定义适当的网络策略,可以指定哪些Pod可以访问API Server的8080端口,以及允许访问的源IP范围等。

2). 启用身份验证和授权:确保API Server启用了身份验证和授权功能。Kubernetes提供了多种身份验证和授权机制,例如基于证书的身份验证、RBAC(Role-Based Access Control)等。配置适当的身份验证和授权规则,以确保只有经过身份验证的用户可以访问API Server。

3). 使用TLS加密:启用API Server的TLS加密,以加密传输过程中的数据。使用有效的证书和密钥来保护API Server的通信。

4). 使用网络隔离:确保API Server不直接暴露在公共网络中。可以使用防火墙规则或网络安全组来限制对API Server端口的访问,只允许受信任的IP地址或特定网络访问该端口。

5). 更新默认配置:Kubernetes提供了一些默认配置文件,建议不要直接使用这些默认配置,而是根据安全最佳实践进行自定义配置。检查您的API Server配置文件,确保已经采取了适当的安全措施。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
25天前
|
网络协议 API
检测指定TCP端口开放状态免费API接口教程
此API用于检测指定TCP端口是否开放,支持POST/GET请求。需提供用户ID、KEY、目标主机,可选指定端口(默认80)和地区(默认国内)。返回状态码、信息提示、检测主机、端口及状态(开放或关闭)。示例中ID和KEY为公共测试用,建议使用个人ID和KEY以享受更高调用频率。
45 14
|
1月前
|
网络协议 API
检测指定TCP端口开放状态免费API接口教程
该API用于检测目标主机指定TCP端口是否开放,适用于检测连通状态等场景。支持指定大陆、美国、香港等检测节点。请求地址为 `https://cn.apihz.cn/api/wangzhan/port.php`,支持POST和GET请求方式。请求参数包括 `id`、`key`、`type`、`host` 和 `port`。返回参数包含检测结果和状态码。示例请求:`https://cn.apihz.cn/api/wangzhan/port.php?id=88888888&key=88888888&type=1&host=49.234.56.78&port=80`。
|
2月前
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。
256 0
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
|
4月前
|
资源调度 Kubernetes API
在K8S中,能否实现不通过api-Server创建Pod?
在K8S中,能否实现不通过api-Server创建Pod?
|
4月前
|
Kubernetes 网络协议 Docker
在K8S中,ip-cer-pod与docker原生端口映射有何区别?
在K8S中,ip-cer-pod与docker原生端口映射有何区别?
|
4月前
|
Kubernetes 负载均衡 API
在K8S中,api-service 和 kube-schedule 高可用原理是什么?
在K8S中,api-service 和 kube-schedule 高可用原理是什么?
|
4月前
|
Kubernetes API 容器
在K8S中,Service的Nodeport端口范围?
在K8S中,Service的Nodeport端口范围?
|
4月前
|
Kubernetes 网络协议 网络安全
在K8S中,如果不能在容器内部使用netstat查看端口号的情况下,还有其他方式吗?
在K8S中,如果不能在容器内部使用netstat查看端口号的情况下,还有其他方式吗?
|
4月前
|
Kubernetes Linux 网络安全
在K8S中,nodePort默认端口范围是多少? 为什么是这个端口范围?
在K8S中,nodePort默认端口范围是多少? 为什么是这个端口范围?
|
4月前
|
Kubernetes 监控 API
在k8S中,各模块如何与API Server进行通信的?
在k8S中,各模块如何与API Server进行通信的?

热门文章

最新文章