Kubernetes节点权限逃逸漏洞分析:CVE-2025-5187

本文详细分析了Kubernetes中的安全漏洞CVE-2025-5187。该漏洞存在于NodeRestriction准入控制器中,允许节点用户通过添加OwnerReference来删除自己的节点对象,进而绕过限制重新创建节点并修改标签和污点,从而控制Pod调度。

CVE-2025-5187: 节点可通过添加OwnerReference自行删除

CVSS评级: CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:L - 中等 (6.7)

漏洞描述

NodeRestriction准入控制器存在一个漏洞,节点用户可以通过给自身添加一个指向集群范围资源的OwnerReference来删除其对应的节点对象。如果该OwnerReference资源不存在或随后被删除,给定的节点对象将通过垃圾回收机制被删除。默认情况下,节点用户被授权对其节点对象执行创建和修补请求,但不被授权执行删除请求。由于NodeRestriction准入控制器未阻止对OwnerReferences的修补,受攻击的节点可利用此漏洞删除并重新创建其节点对象。这将允许节点对象以通常会被此插件拒绝的、经过修改的污点或标签重新创建。修改节点上的污点或标签可能允许攻击者控制哪些Pod在受攻击的节点上运行。

我是否受影响?

所有已启用NodeRestriction但未启用OwnerReferencesPermissionEnforcement准入控制器的集群均易受攻击。OwnerReferencesPermissionEnforcement控制器保护对对象OwnerReferences的访问,使得只有对该对象具有删除权限的用户才能更改它。

受影响版本

  • kube-apiserver: <= v1.31.11
  • kube-apiserver: <= v1.32.7
  • kube-apiserver: <= v1.33.3

如何缓解此漏洞?

可通过升级到运行以下1.31至1.33系列修补版本之一的kube-apiserver二进制文件来缓解此问题。这些已修复的版本在NodeRestriction准入控制器中添加了功能,以防止节点用户修改其自身的OwnerReferences。

或者,可以通过启用OwnerReferencesPermissionEnforcement准入控制器来缓解此漏洞,这将阻止任何对对象没有删除权限的用户修改该对象上的OwnerReferences。请注意,此准入控制器将适用于所有用户和对象类型。

已修复版本

  • kube-apiserver: >= v1.31.12
  • kube-apiserver: >= v1.32.8
  • kube-apiserver: >= v1.33.4

检测

在启用了NodeRestriction但未启用OwnerReferencesPermissionEnforcement的集群上,可以通过分析API审计日志中节点用户发出的、修改OwnerReferences的节点修补请求来检测此问题。在正常操作中,Kubelet永远不会发出修改其自身OwnerReferences的修补请求。

如果发现此漏洞已被利用的证据,请联系 security@kubernetes.io

致谢

此漏洞由Paul Viossat报告。 该问题的修复和协调工作由以下人员完成:

  • Sergey Kanzhelev @SergeyKanzhelev
  • Jordan Liggitt @liggitt
  • Marko Mudrinić @xmudrii

修复信息

该漏洞通过以下PR修复:

  • 更新NodeRestriction以防止节点更新其OwnerReferences #133467
  • 更新NodeRestriction以防止节点更新其OwnerReferences #133468
  • 更新NodeRestriction以防止节点更新其OwnerReferences #133469
  • 更新NodeRestriction以防止节点更新其OwnerReferences #133470
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计