2022 年 Kubernetes 高危漏洞盘点

news2024/9/24 10:53:36

2022 年,Kubernetes继续巩固自己作为关键基础设施领域的地位。从小型到大型组织,它已成为广受欢迎的选择。出于显而易见的原因,这种转变使 Kubernetes 更容易受到攻击。但这还没有结束,开发人员通常将Kubernetes 部署与其他云原生组件一起使用来构建一个完善的工作系统。不幸的是,这种组合会导致具有更多组件的更复杂的基础架构。这最终会增加易受攻击的表面积和范围。

65a472e1ece136fac48070728004b85d.png

根据 Red Hat 的2022 年 Kubernetes 安全状况报告https://www.redhat.com/rhdc/managed-files/cl-state-of-kubernetes-security-report-2022-ebook-f31209-202205-en.pdf,去年接受调查的人中有 93% 报告了至少一次影响 Kubernetes 环境的事件。在报告的全部安全事件中,53% 是由于配置错误造成的,38% 是由于利用漏洞造成的。该趋势表明漏洞数量增加主要是由于攻击面的增加和漏洞管理的复杂性。

在本文中,我们讨论了 2022 年 Kubernetes 漏洞以及我们可以从中学到什么。为了确保我们都在同一页面上,让我们重温一下 NIST SP 800-53中的标准漏洞定义:系统安全程序、设计、实施或内部控制中的缺陷或弱点可能会被执行(意外触发或故意利用)并导致安全漏洞或违反系统安全政策。

在哪里寻找 Kubernetes 漏洞?

有各种受信任的数据源负责识别、收集和发布公共领域中的漏洞。主要有 NVD(国家漏洞数据库)CVE 数据库、GitHub 安全公告、Exploit-DB、供应商通知和官方项目公告。

以下是查找 Kubernetes 漏洞的来源列表:

  • https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=kubernetes

  • https://kubernetes.io/docs/reference/issues-security/official-cve-feed/

  • https://groups.google.com/g/kubernetes-security-announce

  • https://www.cvedetails.com/vulnerability-list/vendor_id-15867/product_id-34016/Kubernetes-Kubernetes.html

  • https://github.com/advisories?query=kubernetes

Kubernetes相关漏洞分类

拒绝服务

当合法用户或客户端由于恶意威胁行为者的行为而无法访问服务或系统时,就会出现此漏洞。例如,假设有人正在通过大量请求您的Kubernetes API 服务器;API 服务器可能会停止响应其他合法请求。

特权升级

某些系统弱点允许攻击者在安全范围内获得未经授权的访问。在 Kubernetes 中,容器逃逸是一个常见的弱点,当黑客利用它时,可以以提升的权限访问主机。

绕过一些东西

这是一类漏洞的更广泛术语,包括身份验证绕过、执行代码绕过、权限绕过等。

缓冲区溢出

通常,由于代码中的错误(例如对越界内存缓冲区的处理不当),可能会发生缓冲区溢出。它允许恶意行为者访问其他共同托管进程的内存并泄露不需要的信息。

任意代码执行

在这里,攻击者利用代码中的缺陷并使用它来执行任意恶意代码,通常是为了获得更高的访问权限、网络访问权限或对主机系统的控制。

目录或文件遍历

利用此漏洞,黑客可以利用代码中的弱点遍历主机系统或网络上的任意文件和目录。

2022 主要漏洞盘点

1. CVE-2022-0811 – CRI-O 运行时中的容器转义漏洞

今年早些时候, CrowdStrike安全研究人员披露了 Kubernetes 使用的容器运行时 CRI-O 中的这个漏洞,其 CVE 评分为 9.0(严重)。它允许具有访问权限的恶意行为者在 Kubernetes 集群中创建 pod,以通过滥用 kernel.core_pattern 参数在主机上设置任意内核参数。该漏洞允许黑客逃离 Kubernetes 容器并获得对主机的 root 访问权限,从而可能使他们能够部署恶意软件、窃取数据并在集群中实现横向移动。

漏洞详细影响:

直接受影响的软件 CRI-O 版本1.19 + 要确定主机是否受到影响:

run crio —version

虽然该漏洞存在于 CRI-O 中,但依赖它的软件和平台也可能存在漏洞,包括:

  • OpenShift 4+

  • 用于 Kubernetes 的 Oracle 容器引擎

https://www.crowdstrike.com/blog/cr8escape-new-vulnerability-discovered-in-cri-o-container-engine-cve-2022-0811/

预防措施
  • 使用策略来阻止对内核资源的不安全访问,例如Pod Security Admission Controllers ,它已经从 Kubernetes 1.25取代了Pod Security Policies 。您还可以使用来自 Kyverno 的第三方准入控制器。

  • 定期对集群进行扫描和审计,一旦发布补丁,第一时间修补漏洞。

2. CVE-2022-1708 – 通过 execSync 请求耗尽内存的节点 DOS

这又是 CRI-O 容器运行时中的一个漏洞,会导致节点上的内存或磁盘空间耗尽,从而影响系统可用性。它的 CVE 评分为 7.5(高)。任何有权访问 Kubernetes API 的人都可以调用 execSync,它运行命令或从容器同步获取日志。如果命令的输出量很大,可能会把内存或磁盘填满,导致节点或其他共管服务不可用。

CVE-2022-31030也类似于 CVE-2022-1708,但 CVE-2022-31030 是由于 containerd 容器运行时而不是 CRI-O。

漏洞详细影响:

在 CRI-O 中发现了一个漏洞,该漏洞会导致任何有权访问 Kube API 的人在节点上耗尽内存或磁盘空间。ExecSync 请求在容器中运行命令并记录命令的输出。命令执行后,CRI-O 会读取此输出,并以读入与命令输出对应的整个文件的方式读取。因此,如果命令的输出很大,则可能耗尽CRI-O 读取命令输出时节点的内存或磁盘空间。此漏洞的最大威胁是系统可用性。

https://nvd.nist.gov/vuln/detail/CVE-2022-1708

预防措施:
  • 使用最小权限原则来降低被攻击的风险。如果您不授予在 Pod 上运行“exec”命令的权限,或者不授予与 Kubernetes API 服务器交互的应用程序使用的服务帐户的最低权限,黑客将无法利用该漏洞。

  • 补丁发布后立即更新实施。

3. CVE-2022-29165 – ArgoCD 身份验证绕过

这个得分最高为 10.0 的严重漏洞让 ArgoCD 的用户感到恐慌,ArgoCD 是一种流行的 GitOps 持续交付工具,用于在 Kubernetes 集群上部署应用程序。该漏洞允许未经身份验证的用户获得匿名访问权限,使他们能够通过发送特制的 JSON Web 令牌 (JWT) 来冒充包括管理员在内的任何其他用户。

利用很容易,因为攻击者不需要 ArgoCD 中的任何帐户。默认情况下,ArgoCD 服务帐户获得集群管理员角色,从而使攻击者能够完全访问 Kubernetes 集群。

漏洞详细影响:

如果启用了对实例的匿名访问,攻击者可以:

提升他们的权限,有效地允许他们在集群上获得与 Argo CD 实例相同的权限,在默认安装中是集群管理员。这将允许攻击者创建、操纵和删除集群上的任何资源。

通过部署具有提升权限的恶意工作负载来泄露数据,从而绕过 Argo CD API 强制执行的敏感数据的任何编辑

该漏洞的补丁已经发布在以下 Argo CD 版本中:

  • v2.3.4

  • v2.2.9

  • v2.1.15

https://github.com/argoproj/argo-cd/security/advisories/GHSA-r642-gv9p-2wjj

预防措施:
  • 禁用对 ArgoCD 的匿名访问。

  • 遵循应用程序服务帐户的最小权限原则。

  • 将关键组件端点置于安全边界之后,只有受信任的人才能访问该边界。

4. CVE-2022-23648 – Containerd 中的任意主机文件访问

该漏洞存在于containerd版本 1.6.1、1.5.10 和 1.14.12 中,允许攻击者读取任意主机文件。因此,攻击者可以读取 kubelet 私钥等机密文件,并可以访问 Kubernetes API 服务器/etcd 数据库来窃取信息。

漏洞详细影响:

攻击者最有吸引力的目标文件将是 kubelet 的私钥,用于节点 kubelet 和 KubeAPI 服务器之间的通信。Kubelet 是 Kubernetes 中绝对可信的组件,它可以要求 KubeAPI 服务器提供存储在 ETCD 中的任何信息,例如Kubernetes Secrets、ConfigMaps 等。这些信息可以被泄露或在本地使用,以访问 ETCD 中受保护的接口和数据资产。Kubernetes 乃至整个云基础设施。

https://nvd.nist.gov/vuln/detail/CVE-2022-23648

预防措施:

-使用Kubescape等持续扫描解决方案来检测漏洞。

  • 补丁发布后立即实施。

5. CVE-2022-0185 – Linux 内核容器逃逸

Linux 中的文件上下文 API 中基于堆的缓冲区溢出缺陷会导致越界写入。然后,具有本地访问权限的恶意行为者可能会导致拒绝服务攻击或在主机上运行任意代码。要检测 Kubernetes 中的此漏洞暴露,您需要找到具有 CAP_SYS_ADMIN 功能的 pod。

漏洞详细影响:

该问题是“文件系统上下文”组件中的整数下溢问题。整数下溢发生在对无符号整数变量的减法低于零并且计算结果环绕整数的最大值而不是显示负值时。当发生这种下溢时,大小检查失败,并且调用程序可以写入超出内核空间中分配的 4kb 内存的范围。使用这种“未绑定写入”,攻击者可以更改内核内存中的值,例如,将对自己的访问权限添加到同一节点上运行的任何其他进程。

“文件系统上下文”在 Linux 内核挂载文件系统时使用。这已被“文件上下文 API”取代,但对于遗留支持,部分功能已向后移植,问题在于遗留参数的处理。非特权用户本地进程(在启用非特权用户命名空间的情况下)或具有 CAP_SYS_ADMIN 特权的进程可能导致遗留代码的调用,从而利用此漏洞。

https://access.redhat.com/security/cve/CVE-2022-0185

https://security-tracker.debian.org/tracker/CVE-2022-0185

https://ubuntu.com/security/CVE-2022-0185
预防措施:
  • 限制 Kubernetes 部署中的容器功能。

  • 部署成熟的检测工具,可以快速发现您暴露并提醒您降低风险。

6. CVE-2022-39306 – 未经授权访问 Grafana 代码库中的任意端点

Grafana Labs针对其开源产品中的一个新的严重漏洞发布了安全公告。该漏洞标记为CVE-2022-39328,可让攻击者绕过任意服务端点的授权。这是一个绕过身份验证的严重漏洞。大约 50% 的 Kubernetes 用户在生产中使用 Grafana 这一事实使得这个 CVE 特别值得注意。

漏洞详细影响:

未经身份验证的用户可以恶意查询任意端点。

https://grafana.com/blog/2022/11/08/security-release-new-versions-of-grafana-with-critical-and-moderate-fixes-for-cve-2022-39328-cve-2022-39307-and-cve-2022-39306/

预防措施:
  • Grafana 发布了一个修复:版本 9.2.4。

总结

容器逃逸是 Kubernetes 中最常被利用的漏洞之一。在 Kubernetes 部署中实施 AppArmor 和 SELinux 等安全配置文件以及 Pod 安全标准可以减少遭受攻击的风险。

在为您的服务帐户和用户分配角色和权限时,请遵循最小权限原则。这减少了攻击者在集群上获得过多特权的机会,即使他们已经渗透了它。利用Kubescape门户中的RBAC 可视化工具来检测具有不必要权限的角色和参与者。

使用纵深防御技术使恶意行为者更难实现横向移动和泄露数据。

建议对K8s 清单文件、代码存储库和集群进行频繁且持续的扫描以查找漏洞。

建立一个流程来定期更新 Kubernetes 集群上的软件包。使用gVisor等容器沙箱项目,可以通过在多租户系统中提供强隔离来加强容器边界并防止容器逃逸和特权升级。

推荐

TeamTNT黑客组织以Kubernetes为目标,近50000个IP被攻击

K8S安全配置最佳实践


原创不易,随手关注或者”在看“,诚挚感谢!

ba0fd11bea9be8d1eea9622d9c4a7be5.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98088.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2022.12.18】备战春招Day13——每日一题 + 234. 回文链表 + 139. 单词拆分

【每日一题】1703. 得到连续 K 个 1 的最少相邻交换次数 题目描述 给你一个整数数组 nums 和一个整数 k 。 nums 仅包含 0 和 1 。每一次移动,你可以选择 相邻 两个数字并将它们交换。 请你返回使 nums 中包含 k 个 连续 1 的 最少 交换次数 输入:nums …

【数据结构】堆(二)——堆排序、TOP-K问题

作者:一个喜欢猫咪的的程序员 专栏:《数据结构》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 目录 堆排序:(以小堆为例) Heapsort函数…

C语言重点解剖关键字要点速记

1.在windows中,双击的本质是运行该程序,就是将程序(.exe)加载到内存当中去。任何程序在被运行之前都必须加载到内存当中去。 2.所有的变量本质都是在内存的某个位置开辟的。变量不能定义在硬盘上,因为变量必须在程序运行的时候才能被开辟&am…

SPRING-了解1

1)最终address: 查找路径比较长,很有趣 JFrog 原始步骤1)进入 spring.io,点击右上角黑色标记边的标记 2)进入 git,找到 Binaries下面的 Spring Framework Artifacts 3)进一步找到Downlaoding a Distribution,下面有 https://repo.spring.io 4)x选择…

牛客SQL每日一题之SQL136 每类试卷得分前3名

文章目录SQL136 每类试卷得分前3名描述示例1输入:输出:答案SQL136 每类试卷得分前3名 描述 现有试卷信息表examination_info(exam_id试卷ID, tag试卷类别, difficulty试卷难度, duration考试时长, release_time发布时间)&#x…

C# 中的 Infinity 和 NaN

C# 语言中,对于 int,long 和 decimal 类型的数,任何数除以 0 所得的结果是无穷大,不在 int,long 和 decimal 类型的范围之内,所以计算 6/0 之类的表达式会出错。 但是,double 和 float 类型实际…

Java入门笔记补充

Java基础笔记补充数据类型数据类型整形拓展浮点型拓展字符型拓展类型转换变量变量作用域局部变量实例变量静态变量变量的命名规范数组三种初始化静态初始化动态初始化数组的默认初始化Arrays类内存分析栈 stack:堆 heap:方法区(也是堆):封装继…

卷积神经网络 图像处理,卷积神经网络图片处理

1、在做图像处理时,如何提高识别算法的设计与效果的精度? 得到更多的数据 这无疑是最简单的解决办法,深度学习模型的强大程度取决于你带来的数据。增加验证准确性的最简单方法之一是添加更多数据。如果您没有很多训练实例,这将特…

AllegroBGA如何自动fanout操作指导

AllegroBGA如何自动fanout操作指导 当我们需要给BGA做fanout的时候,逐个pin去fanout是件比较麻烦的事情,下面介绍Allegro中如何自动fanout,以下图BGA为例 具体操作如下 选择Route-Create Fanout 选择Via类型,比如Via10 Via Direction BGA Quadrant Style Pin-via Space…

数字化母婴店,母婴智慧会员管理小程序

会员店想必很多小伙伴都接触过或有所耳闻,会员店的本质是通过好产品、好服务及好内容营造出完整且完美的用户消费体验,虽然纯会员店并不多,但如今越来越多的各行业商家意识到每个流量用户都很重要,需要维护好每个用户,…

18.Django大型项目之用户中心页面

1. 用户中心的搭建 1.1 基础搭建 这里,主要就是基础的页面渲染,使用的也是继承主模板,对其进行修改的方式。就直接看代码吧 1.2 上下文的应用 什么是上下文? 对于上下文,可以理解成一个公用的函数或者类 我们这里使…

Qt使用MSVC2015找不到编译器的解决办法

Qt使用MSVC2015找不到编译器的解决办法 1、问题描述 安装qt前,已安装vscode,构建套件MSVC2015 32/64bit出现红色感叹号,并报错构建套件中未设置编译器 2、解决办法 step1:通过windows SDK工具安装调试器。 工具下载地址:https:/…

244. 谜一样的牛——二分+树状数组

有 n 头奶牛,已知它们的身高为 1∼n 且各不相同,但不知道每头奶牛的具体身高。 现在这 n 头奶牛站成一列,已知第 i 头牛前面有 Ai 头牛比它低,求每头奶牛的身高。 输入格式 第 1 行:输入整数 n。 第 2…n 行&#x…

Linux——组管理和权限管理

Linux组 基本介绍 在Linux中的每个用户必须属于一个组,不能独立于组外,在Linux中每个文件有所有者,所在组,其他组的概念。 所有者 一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者。 查…

构造序列(模拟构造)

请你构造一个 01 序列,序列需要满足以下所有要求: 恰好包含 n 个 0 和 m 个 1。不存在两个或两个以上的 0 连续相邻。不存在三个或三个以上的 1 连续相邻。 输入格式 共一行,包含两个整数 n,m。 输出格式 输出共一行,如果存在…

【js记录】递归进行深拷贝时对于Object遍历方法的思考【深浅拷贝+object县官属性介绍+类型判断方法+for...in+for...of】

一、 前言:本文使用的 类型判断方法介绍 通过手写instaceof更好理解其作用及使用 1、 typeof 判断一个实例属于哪种类型 2、 instance 判断一个实例是否属于某种类型let person function(){ } let no new person(); no instanceof person; // true3、 原型…

IT分销商未来在哪里?南京创瑞丰向复合型产品方案商转型

在一个充满不确定性的市场中,思变求新是企业的唯一出路。 诚如IT分销领域,云计算、大数据、人工智能等技术的兴起,加速企业数字化转型的同时,亦对于传统IT分销市场的未来产生了深远影响。过去“搬箱子”、打价格战的方式方法正在…

Python中文件操作(读、写、关闭)

目录 一.什么是文件 二.python文件操作 1.open()打开函数 注意 mode常用的三种基础访问模式 2.读操作相关方法 read()方法: readlines()方法: readline()方法 for…

Linux性能学习(1.1):CPU_CPU缓存

文章目录1 简介2 工作机制3 Cache Line参考资料: 1. https://www.makeuseof.com/tag/what-is-cpu-cache/ 2. https://zhuanlan.zhihu.com/p/80672073 3.CPU Cache 机制以及 Cache miss 4.性能优化方法和技巧 在日常的嵌入式开发中,查看一些SOC的datashe…

想学习编程,该怎么开始,需要多长时间?

想学习编程,该怎么开始,需要多长时间? 其实学编程也没有啥特别的方法,和我们没基础学驾照差不多。 考A照、B照还是C照,我们先得拎清,它们的用途存在一定差异 。一样的,学编程是学C,Java、Pyth…