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

本文涉及的产品
云安全中心 免费版,不限时长
简介: 在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配置文件,确保已经采取了适当的安全措施。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
5月前
|
Kubernetes 应用服务中间件 API
5 分钟了解 Kubernetes Ingress 和 Gateway API
5 分钟了解 Kubernetes Ingress 和 Gateway API
110 0
|
6月前
|
安全 Java API
解决 Swagger API 未授权访问漏洞:完善分析与解决方案
Swagger 是一个用于设计、构建、文档化和使用 RESTful 风格的 Web 服务的开源软件框架。它通过提供一个交互式文档页面,让开发者可以更方便地查看和测试 API 接口。然而,在一些情况下,未经授权的访问可能会导致安全漏洞。本文将介绍如何解决 Swagger API 未授权访问漏洞问题。
|
1月前
|
存储 运维 Java
nacos常见问题之nacos提示ack server push request如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
|
3月前
|
Kubernetes 容器
Kubernetes高可用集群二进制部署(三)部署api-server
Kubernetes高可用集群二进制部署(三)部署api-server
|
9月前
|
Kubernetes 网络协议 Java
k8s的请求dns端口是容器端口还是nodeport端口
k8s的请求dns端口是容器端口还是nodeport端口
151 0
|
4月前
|
Kubernetes API 网络架构
k8s学习-CKS真题-启用API Server认证,禁止匿名访问
k8s学习-CKS真题-启用API Server认证,禁止匿名访问
65 0
|
5月前
|
JSON Kubernetes API
kubernetes REST Api详解(导入Swagger至Postman)
kubernetes REST Api详解(导入Swagger至Postman)
96 1
|
5月前
|
API
Unable to register node “xxx“ with API server: Unauthorized
Unable to register node “xxx“ with API server: Unauthorized
196 0
|
6月前
|
Kubernetes API 容器
Kubenetes 添加节点报错—couldn‘t validate the identity of the API Server
Kubenetes 添加节点报错—couldn‘t validate the identity of the API Server
351 0
|
7月前
|
Kubernetes JavaScript API
使用 Kubernetes API
使用 Kubernetes API
44 0