# 漏洞总结 ## 漏洞概述 - **漏洞编号**: GHSA-wq4g-395p-mqv3 - **严重程度**: CVSS 4.3 Medium - **问题描述**: 在服务器日志中记录了 MCP 工具调用的原始参数(raw tool-call args),导致敏感信息泄露。 - **报告者**: @t1rr2 - **修复者**: Romuald Członkowski ## 影响范围 - **受影响组件**: `n8n-mcp` 项目中的 MCP 服务器日志记录功能 - **影响类型**: 日志信息泄露(Log Key-Value Type Mismatch) - **风险**: 可能泄露敏感数据或内部实现细节 ## 修复方案 1. **日志参数脱敏**: 将日志记录从记录完整参数改为仅记录元数据(metadata only) 2. **新增工具函数**: 创建 `summarizeToolCallArgs` 函数用于安全地摘要工具调用参数 3. **更新日志记录**: 修改所有相关日志调用,使用新的摘要函数替代直接记录原始参数 ## POC/利用代码 ```typescript // src/utils/redaction.ts export function summarizeToolCallArgs(args: unknown): Record { if (args === undefined || args === null) { return { argsType: args === null ? 'null' : 'undefined' }; } if (typeof args !== 'object' || Array.isArray(args)) { let size: number | undefined; if (typeof args === 'string') size = args.length; return { argsType: Array.isArray(args) ? 'array' : typeof args, ...(size !== undefined ? { size } : {}), }; } const keys = Object.keys(args) as Record; let size: number | undefined; try { size = JSON.stringify(args).length; } catch { size = undefined; } return { argsType: 'object', argsKeys: keys, maxNestedOutput: keys.includes('output'), ...(size !== undefined ? { size } : {}), }; } ``` ```typescript // src/mcp/server.ts (修改后的日志记录) // 修改前: logger.info('Tool call received', { toolName: name, arguments: JSON.stringify(args, null, 2), // ... 其他原始参数 }); // 修改后: logger.info('Tool call received', { toolName: name, arguments: summarizeToolCallArgs(args), // ... 其他元数据 }); ```