# 漏洞报告总结:sublinear-time-solver 任意文件写入漏洞 ## 漏洞概述 在 `sublinear-time-solver` 项目的 `consciousness-explorer` 组件中发现了一个任意文件写入漏洞(CVE-73)。该漏洞存在于 MCP `export_state` 工具中,攻击者可以通过网络访问 MCP 接口,利用未经验证的 `filepath` 参数,将 JSON 状态数据写入到任意路径。这可能导致完整性丢失、服务中断,甚至允许攻击者覆盖系统文件。 ## 影响范围 - **受影响组件**: `src/consciousness-explorer/mcp/server.js` 和 `src/consciousness-explorer/index.js` - **受影响版本**: `sublinear-time-solver` 1.5.0, `consciousness-explorer` 1.1.1 (commit `323a8a9d5573a3a6c3f98e6c7f6a4b2d4f23a8`) - **漏洞类型**: CWE-73 (外部控制文件名或路径) - **CVSS 评分**: 7.1 (高) ## 修复方案 1. **不接受任意输出路径**: 对于 `export_state` 操作,不应接受任意路径。 2. **使用专用目录**: 将导出的状态存储在专用的、应用控制的状态目录中。 3. **路径验证**: 如果允许用户选择文件名,仅接受基本名称,拒绝路径分隔符、绝对路径、`..` 段、符号链接和设备名称。 4. **解析最终路径**: 解析最终路径并验证其是否仍在预期的导出目录内。 5. **安全文件创建标志**: 使用安全的文件创建标志以避免无意中覆盖现有文件。 6. **回归测试**: 添加回归测试,证明绝对路径和遍历载荷无法在预期目录之外写入。 7. **发布安全公告**: 一旦补丁发布,维护者应发布安全公告。 ## POC 代码 ```json {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"export_state","arguments":{"filepath":"/tmp/sublinear_state_poc.json"}}} ``` ## 其他信息 - **发现者**: BruceJin - **发现方法**: 静态分析 (CodeQL)、仓库源代码审计和手动复现 (使用 `mcp-inspector`) - **临时缓解措施**: - 不要将 MCP 服务器暴露给不受信任的客户端,直到修复可用。 - 限制对 `export_state` 工具的访问,仅限受信任的本地用户。 - 使用专用的低权限 OS 账户和受限的工作目录运行 MCP 服务器。 - 配置文件系统权限,使 MCP 进程无法写入敏感位置。