# coding-standard-mcp 模板注入漏洞总结 ## 漏洞概述 在 `coding-standards-mcp` 项目中,`get_style_guide` 工具存在路径遍历漏洞。攻击者可以通过构造恶意的 `language` 参数,读取服务器文件系统中 `templates/` 目录之外的任意文件。 ## 影响范围 - **受影响版本**:`cfeab27` - **受影响范围**:包含相同 `read_template()` 实现逻辑的 `server.py` 修订版本。 - **安全影响**: - **机密性**:中等(可读取匹配后缀的任意文件)。 - **完整性/可用性**:无直接影响。 - **CVSS v3.1 评分**:5.3 (Medium) ## 修复方案 1. **限制输入**:将 `language` 参数限制为固定的白名单(如 `java`, `python`, `react`)。 2. **路径校验**:解析最终路径并强制其位于 `templates/` 目录内。 3. **拒绝非法字符**:在模板选择器中拒绝路径分隔符和遍历令牌。 4. **代码重构**:使用枚举或已知模板名称的映射表替换自由表单输入。 5. **严格验证**:如果必须保留自由表单输入,需使用严格正则表达式验证,并确保解析后的路径在 `templates/` 下。 6. **回归测试**:添加针对包含 `/`, `\`, `..` 等字符的 Payload 的回归测试。 ## 概念验证 (POC) 攻击者可以调用 `get_style_guide` 工具,使用包含遍历序列的 `language` 参数来读取目标文件。 ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "get_style_guide", "arguments": { "language": "../../../../../tmp/secret" } } } ```