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