# sqlite-mcp `extract_to_json` 任意 JSON 写入漏洞总结 ## 漏洞概述 在 `sqlite-mcp` 项目的 `extract_to_json` 工具中存在路径遍历漏洞。该工具允许用户通过控制 `output_filename` 参数,将 SQLite 数据库内容写入到服务账户可写的任意 JSON 路径中,且未对路径进行规范化或限制在数据库目录内。 ## 影响范围 * **受影响版本**:0.1.0 * **漏洞类型**:CWE-73 (外部控制文件名或路径) * **CVSS 评分**:9.1 (Critical) * **利用前提**: 1. 能够调用 `extract_to_json` MCP 工具。 2. 服务账户对目标路径具有写入权限。 3. 目标 SQLite 数据库存在。 ## 修复方案 1. **限制导出目录**:将导出限制在固定的允许目录中(类似 `backup_database` 的实现)。 2. **路径规范化**:对目标路径进行规范化处理,拒绝包含 `..` 等试图逃逸导出根目录的路径。 3. **代码实现建议**: * 使用 `os.path.abspath` 或 `Path.resolve()` 处理路径。 * 在打开文件前强制执行父边界检查。 * 对 `table_name` 进行验证以拒绝 SQL 注入。 ## POC 代码 ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "extract_to_json", "arguments": { "table_name": "sqlite_master", "output_filename": "../../../../../tmp/sqlite_mcp.dump" } } } ```