mail-mcp-bridge 路径遍历/任意目录删除漏洞总结 漏洞概述 漏洞类型:路径遍历(CWE-22)/ 外部控制文件名或路径(CWE-73) 漏洞描述: 工具本应仅删除附件缓存根目录下的临时提取目录,但实现仅剥离 中的方括号,未处理 等遍历序列。攻击者可构造恶意 ,导致服务递归删除根目录下的任意目录。 技术根因: 1. 服务器暴露清理工具,转发调用者控制的 。 2. 附件基础路径默认为 。 3. 每个攻击者控制的 仅通过 规范化,未移除 遍历令牌。 4. 代码枚举并递归删除结果路径,无内容检查。 5. 提取助手在创建目录时存在相同根因。 影响范围 受影响版本: 受影响范围:包含相同 路径连接行为的修订版。 安全影响: - 机密性:低(清理代码枚举文件并显示大小)。 - 完整性:高(攻击者可删除缓存根目录外的目录)。 - 可用性:高(删除应用数据或操作员拥有的临时目录可能破坏主机或附近服务)。 - 范围:未更改。 CVSS v3.1 建议: - 向量: - 基础分数:8.8(高) 修复方案 工作区/缓解措施: 1. 在将 值用作目录名之前,拒绝包含路径分隔符、遍历令牌或绝对路径语法的值。 2. 解析候选目录并验证其是否保留在规范附件基础目录内,然后再调用 、 或 。 3. 考虑使用服务器生成的不透明目录名,而不是直接将原始 值映射到文件系统。 4. 在部署修复之前,限制对附件管理工具的访问。 推荐修复: 1. 在 和 中应用规范化加根边界强制。 2. 将 视为不受信任的输入,即使它类似于邮件头值;移除路径分隔符,而不仅仅是剥离方括号。 3. 添加回归测试,用于覆盖诸如 、 、绝对路径和基于符号链接的负载。 4. 当解析路径超出附件缓存根目录时,返回显式错误。 实际修复状态:已在版本 中修复并发布。 - 防止附件目录逃逸配置的 base 目录。 - 将 Message-ID 值映射到安全编码的目录名,同时保留 RFC 有效 ID(包括包含 的 ID)。 - 恢复包样式导入以更新模块。 - 添加回归测试,覆盖遍历形状输入、符号链接转义、包含斜杠的 Message-IDs 和包导入。 Proof of Concept (PoC) 代码 1. 设置环境变量 2. 创建无害的兄弟目录 3. 发送 MCP 工具调用 4. 预期结果 助手计算 。 成功,因为路径解析为 。 删除 之外的兄弟目录。 JSON 响应报告清理的路径类似于 ,并且 随后消失。