<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mcp安全 on Kalend's Blog</title><link>https://blog.kalend.top/categories/mcp%E5%AE%89%E5%85%A8/</link><description>Recent content in Mcp安全 on Kalend's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Sun, 02 Aug 2026 08:30:00 +0800</lastBuildDate><atom:link href="https://blog.kalend.top/categories/mcp%E5%AE%89%E5%85%A8/index.xml" rel="self" type="application/rss+xml"/><item><title>AI Agent 安全实战：从 MCP 漏洞到权限沙箱，生产环境必须知道的事</title><link>https://blog.kalend.top/2026/08/02/2026-08-02-agent-security-production-guide.html/</link><pubDate>Sun, 02 Aug 2026 08:30:00 +0800</pubDate><guid>https://blog.kalend.top/2026/08/02/2026-08-02-agent-security-production-guide.html/</guid><description>&lt;p&gt;上一篇我们拆了 MCP 生态的 5 条攻击路径——30+ CVE、20 万台服务器中招、1.5 亿次下载处于风险。数据摆完，一个现实问题浮出来：&lt;strong&gt;知道了攻击者怎么打进来，接下来怎么防？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这篇文章不重复列漏洞。我要讲的是生产环境的安全工程——权限怎么设计、沙箱怎么选、审批流怎么建、供应链怎么审。每一条都有对应的技术方案和真实案例，看完直接能落地。&lt;/p&gt;
&lt;h2 id="owasp-agentic-top-10ai-agent-的专属安全标准"&gt;OWASP Agentic Top 10：AI Agent 的专属安全标准
&lt;/h2&gt;&lt;p&gt;2025 年 12 月，OWASP 正式发布了 &lt;strong&gt;Agentic AI Top 10&lt;/strong&gt;——这是继 LLM Top 10 之后，专门针对自主 AI Agent 的安全风险标准。两套标准互补：LLM Top 10 关注模型层面的漏洞（prompt injection、数据泄露），Agentic Top 10 关注 Agent 作为「自主行动体」带来的结构性风险。&lt;/p&gt;
&lt;p&gt;核心风险条目：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;编号&lt;/th&gt;
					&lt;th&gt;风险&lt;/th&gt;
					&lt;th&gt;一句话解释&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag1&lt;/td&gt;
					&lt;td&gt;Agentic 机制滥用&lt;/td&gt;
					&lt;td&gt;Agent 被诱导执行非预期动作&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag2&lt;/td&gt;
					&lt;td&gt;工具链安全&lt;/td&gt;
					&lt;td&gt;调用的工具本身有漏洞或恶意&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag3&lt;/td&gt;
					&lt;td&gt;多 Agent 信任链&lt;/td&gt;
					&lt;td&gt;Agent 间传递的信息被污染&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag4&lt;/td&gt;
					&lt;td&gt;上下文投毒&lt;/td&gt;
					&lt;td&gt;恶意内容注入 Agent 的上下文窗口&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag5&lt;/td&gt;
					&lt;td&gt;权限提升&lt;/td&gt;
					&lt;td&gt;Agent 突破任务边界获取更高权限&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag6&lt;/td&gt;
					&lt;td&gt;记忆/状态污染&lt;/td&gt;
					&lt;td&gt;持久化记忆被投毒，影响后续决策&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag7&lt;/td&gt;
					&lt;td&gt;工作流劫持&lt;/td&gt;
					&lt;td&gt;攻击者篡改 Agent 的执行流程&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag8&lt;/td&gt;
					&lt;td&gt;身份冒用&lt;/td&gt;
					&lt;td&gt;Agent 假冒其他身份执行操作&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag9&lt;/td&gt;
					&lt;td&gt;资源耗尽&lt;/td&gt;
					&lt;td&gt;无限循环、Token 滥用导致成本失控&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ag10&lt;/td&gt;
					&lt;td&gt;审计缺失&lt;/td&gt;
					&lt;td&gt;没有日志，出事无法追溯&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这不是学术分类——每一条都对应我在 #32 中拆解过的攻击路径。区别在于：#32 从攻击者视角讲「怎么打进来」，现在切换到防御者视角讲「怎么建防线」。&lt;/p&gt;
&lt;h2 id="权限最小化agent-不该用你的钥匙开门"&gt;权限最小化：Agent 不该用你的钥匙开门
&lt;/h2&gt;&lt;p&gt;权限设计是第一道防线，也是最容易做错的一环。很多团队的 Agent 直接复用开发者的个人凭证——GitHub token、AWS key、数据库密码。一旦 Agent 被注入恶意指令，攻击者等于拿到了你的全套权限。&lt;/p&gt;
&lt;h3 id="三个核心原则"&gt;三个核心原则
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;原则一：Agent 身份独立化。&lt;/strong&gt; Agent 需要自己的身份，不是复用人的凭证。微软在 2026 年 7 月发布的《Least Privilege for AI Agents》白皮书中明确建议：每个 Agent 分配独立的服务账号，权限范围严格限定在任务所需之内。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;原则二：Task-scoped RBAC。&lt;/strong&gt; 传统 RBAC 是按角色分配权限——「开发者」角色拥有所有开发工具的访问权。Agent 安全需要的是按任务分配权限：一个负责「读代码并生成文档」的 Agent，不应该有写入数据库的权限。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;原则三：Tool binding 而非 prompt 约束。&lt;/strong&gt; 很多人在 system prompt 里写「不要删除文件」「不要访问外部网络」——这不叫安全，叫「请攻击者用 prompt injection 覆盖你的规则」。权限控制必须在工具层强制执行（runtime checks），不是在 prompt 里写规矩。&lt;/p&gt;
&lt;h3 id="amazon-的真实教训"&gt;Amazon 的真实教训
&lt;/h3&gt;&lt;p&gt;Amazon 内部在多次成本高昂的生产事故后，强制推行了「AI 辅助代码变更需显式审批」的政策。任何由 AI Agent 生成或修改的代码变更，必须经过人工审批才能合入主分支。这不是不信任 AI，而是承认：&lt;strong&gt;自动化操作的错误率虽然低，但一旦出错，影响面比人工操作大得多。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;落地建议：30 天内盘点你的 Agent 身份，移除宽泛角色，引入任务级 RBAC。优先审计那些拥有「admin」或「write-all」权限的 Agent 服务账号。&lt;/p&gt;
&lt;h2 id="沙箱隔离选型五种技术怎么选"&gt;沙箱隔离选型：五种技术，怎么选
&lt;/h2&gt;&lt;p&gt;Agent 有了独立身份，下一步是限制它能接触到的资源。沙箱隔离的核心思想：即使 Agent 被注入恶意指令，它也突破不了运行时的边界。&lt;/p&gt;
&lt;h3 id="五种主流技术对比"&gt;五种主流技术对比
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;技术&lt;/th&gt;
					&lt;th&gt;代表工具&lt;/th&gt;
					&lt;th&gt;隔离强度&lt;/th&gt;
					&lt;th&gt;性能开销&lt;/th&gt;
					&lt;th&gt;适用场景&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Bubblewrap (namespace)&lt;/td&gt;
					&lt;td&gt;Codex CLI&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
					&lt;td&gt;极低&lt;/td&gt;
					&lt;td&gt;文件系统隔离，开发环境&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;gVisor (用户态内核)&lt;/td&gt;
					&lt;td&gt;Google Cloud Run&lt;/td&gt;
					&lt;td&gt;高&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
					&lt;td&gt;容器级隔离，云端部署&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;MicroVM (Firecracker)&lt;/td&gt;
					&lt;td&gt;Docker Sandbox, Northflank&lt;/td&gt;
					&lt;td&gt;最高&lt;/td&gt;
					&lt;td&gt;高 (128MB+/VM)&lt;/td&gt;
					&lt;td&gt;企业级隔离，多租户&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Container (Docker)&lt;/td&gt;
					&lt;td&gt;Docker Sandboxes&lt;/td&gt;
					&lt;td&gt;中-高&lt;/td&gt;
					&lt;td&gt;低&lt;/td&gt;
					&lt;td&gt;通用场景&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;WASM&lt;/td&gt;
					&lt;td&gt;Cosmonic&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
					&lt;td&gt;极低&lt;/td&gt;
					&lt;td&gt;插件级隔离&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="codex-vs-claude-code两种截然不同的策略"&gt;Codex vs Claude Code：两种截然不同的策略
&lt;/h3&gt;&lt;p&gt;Codex CLI 默认强制启用 Bubblewrap 沙箱，所有文件操作和 shell 命令都在 namespace 隔离中执行。Claude Code 则走可配置路线——开发者可以调整沙箱的严格程度，甚至完全关闭。&lt;/p&gt;
&lt;p&gt;两种策略各有道理：Codex 适合「安全优先，体验次之」的场景；Claude Code 适合「开发者清楚自己在做什么，需要灵活度」的场景。我的建议是：&lt;strong&gt;生产环境用 Codex 的强制模式，开发环境可以用 Claude Code 的可配置模式。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="docker-sandbox-的-microvm-升级"&gt;Docker Sandbox 的 microVM 升级
&lt;/h3&gt;&lt;p&gt;2026 年 7 月，Docker 发布了基于 microVM 的沙箱隔离方案。传统容器共享宿主机内核，逃逸漏洞虽然罕见但存在（如 CVE-2024-21626）。microVM 在容器和宿主机之间加了一层虚拟化——每个 Agent 运行在独立的微虚拟机中，即使逃逸容器，也撞上虚拟化层。&lt;/p&gt;
&lt;p&gt;性能代价？每个 microVM 最少需要 128MB 内存。对于跑几十个 Agent 的场景，内存开销不小。但对于高安全需求的生产环境，这是目前最可靠的隔离方案。&lt;/p&gt;
&lt;h3 id="场景推荐"&gt;场景推荐
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;开发/测试&lt;/strong&gt;：Bubblewrap 或 Container，够用就行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内部工具/CI&lt;/strong&gt;：Container + 网络隔离&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;面向客户的 Agent&lt;/strong&gt;：gVisor 或 MicroVM&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多租户 SaaS&lt;/strong&gt;：MicroVM，没商量&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="敏感操作审批流哪些事不能让-agent-自己决定"&gt;敏感操作审批流：哪些事不能让 Agent 自己决定
&lt;/h2&gt;&lt;p&gt;权限再小、沙箱再硬，总有些操作必须人工把关。关键问题是：怎么定义「哪些操作必须审批」？&lt;/p&gt;
&lt;h3 id="必须人工审批的操作"&gt;必须人工审批的操作
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;操作类型&lt;/th&gt;
					&lt;th&gt;为什么必须审批&lt;/th&gt;
					&lt;th&gt;典型后果&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;删除资源&lt;/td&gt;
					&lt;td&gt;误删无法自动恢复&lt;/td&gt;
					&lt;td&gt;数据丢失&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;支付/转账&lt;/td&gt;
					&lt;td&gt;资金不可逆&lt;/td&gt;
					&lt;td&gt;直接经济损失&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;生产部署&lt;/td&gt;
					&lt;td&gt;影响线上用户&lt;/td&gt;
					&lt;td&gt;服务中断&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;凭证变更&lt;/td&gt;
					&lt;td&gt;可能导致权限失控&lt;/td&gt;
					&lt;td&gt;安全事件&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;外部 API 调用&lt;/td&gt;
					&lt;td&gt;无法撤回&lt;/td&gt;
					&lt;td&gt;数据泄露&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="approval-gate-实现方案"&gt;Approval Gate 实现方案
&lt;/h3&gt;&lt;p&gt;最简单的实现：在 Agent 的 tool 定义中，对敏感操作标记 &lt;code&gt;requires_approval: true&lt;/code&gt;。当 Agent 尝试调用该工具时，框架暂停执行，发送审批请求到 Slack/邮件/IM，等待人工确认后继续。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Agent 调用 &amp;#34;delete_resource(id=xxx)&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 框架检测到 requires_approval
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 暂停执行，发送审批通知
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 人工审核 → 批准/拒绝
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 批准：继续执行 → 拒绝：终止并记录
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="读写分离原则"&gt;读写分离原则
&lt;/h3&gt;&lt;p&gt;一个被低估的安全设计：&lt;strong&gt;把读操作和写操作拆成不同的 Agent。&lt;/strong&gt; 读 Agent 只有查询权限，写 Agent 有修改权限但必须通过审批流。这样即使读 Agent 被注入恶意指令，它也压根没有写入的能力——不是「不让它写」，而是「它物理上不能写」。&lt;/p&gt;
&lt;h2 id="供应链安全审计mcp-server-不是随便装的"&gt;供应链安全审计：MCP Server 不是随便装的
&lt;/h2&gt;&lt;p&gt;MCP 生态的供应链攻击已经不是假设性威胁。在 #32 中我们拆解过 npm typosquatting、后门代码、恶意 MCP Server 等真实案例。这里讲怎么防。&lt;/p&gt;
&lt;h3 id="安装前必做检查"&gt;安装前必做检查
&lt;/h3&gt;&lt;p&gt;装一个 MCP Server 之前，至少检查这几项：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;检查项&lt;/th&gt;
					&lt;th&gt;怎么查&lt;/th&gt;
					&lt;th&gt;红线&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;来源&lt;/td&gt;
					&lt;td&gt;GitHub/GitLab 仓库地址&lt;/td&gt;
					&lt;td&gt;无仓库或个人小号&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Star 数&lt;/td&gt;
					&lt;td&gt;低于 100 需警惕&lt;/td&gt;
					&lt;td&gt;低于 10 且刚发布&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;维护频率&lt;/td&gt;
					&lt;td&gt;最近 commit 时间&lt;/td&gt;
					&lt;td&gt;超过 6 个月无更新&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;依赖树&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;npm audit&lt;/code&gt; / &lt;code&gt;pip-audit&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;有已知 CVE 未修&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;代码审查&lt;/td&gt;
					&lt;td&gt;快速扫一眼主入口文件&lt;/td&gt;
					&lt;td&gt;有混淆代码或可疑网络请求&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="运行时监控"&gt;运行时监控
&lt;/h3&gt;&lt;p&gt;安装检查只是第一道关。运行时监控更关键：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;网络流量审计&lt;/strong&gt;：MCP Server 启动后，用 &lt;code&gt;netstat&lt;/code&gt; 或 &lt;code&gt;ss&lt;/code&gt; 检查它连接了哪些外部地址&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文件系统监控&lt;/strong&gt;：用 &lt;code&gt;inotifywait&lt;/code&gt; 或 auditd 监控它读写了哪些文件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;进程行为&lt;/strong&gt;：&lt;code&gt;strace -f -e trace=network&lt;/code&gt; 追踪它的系统调用&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="docker-mcp-的供应链方案"&gt;Docker MCP 的供应链方案
&lt;/h3&gt;&lt;p&gt;Docker 推出的 MCP marketplace 对上架的 Server 做了三重检查：静态代码扫描、依赖树审计、运行时行为监控。虽然不能保证 100% 安全，但比直接从 npm 装一个未审核的包靠谱得多。&lt;/p&gt;
&lt;p&gt;建议：&lt;strong&gt;生产环境只用经过审核的 MCP Server，开发环境可以用社区的但必须容器化隔离。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="全链路审计追踪出事能追溯"&gt;全链路审计追踪：出事能追溯
&lt;/h2&gt;&lt;p&gt;安全的最后一道防线是审计。如果 Agent 被注入恶意指令并执行了破坏性操作，你需要能回答三个问题：&lt;strong&gt;做了什么、什么时候做的、是谁触发的。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="审计日志必须包含的字段"&gt;审计日志必须包含的字段
&lt;/h3&gt;&lt;p&gt;每一条 tool call 记录必须包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;时间戳&lt;/strong&gt;：精确到毫秒&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent ID&lt;/strong&gt;：哪个 Agent 执行的&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Task ID&lt;/strong&gt;：属于哪个任务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tool 名称&lt;/strong&gt;：调用了什么工具&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;输入参数&lt;/strong&gt;：传了什么参数&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;执行结果&lt;/strong&gt;：成功/失败/返回值&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;触发来源&lt;/strong&gt;：用户手动触发还是 Agent 自动调用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;审批状态&lt;/strong&gt;：是否经过人工审批&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="异常行为检测"&gt;异常行为检测
&lt;/h3&gt;&lt;p&gt;基于审计日志，可以设置告警规则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单个 Agent 在短时间内调用大量写操作&lt;/li&gt;
&lt;li&gt;Agent 访问了任务范围之外的工具&lt;/li&gt;
&lt;li&gt;Agent 尝试读取凭证文件（&lt;code&gt;.env&lt;/code&gt;、&lt;code&gt;.ssh&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Agent 向外部 IP 发送大量数据&lt;/li&gt;
&lt;li&gt;同一 Agent 在非工作时间执行操作&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些规则不需要复杂的 ML 模型——简单的阈值检测就能拦住 80% 的异常行为。&lt;/p&gt;
&lt;h2 id="落地安全检查清单"&gt;落地安全检查清单
&lt;/h2&gt;&lt;p&gt;最后附一个可直接执行的 checklist。按这个过一遍，你的 Agent 安全基线就有了：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;权限层&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Agent 使用独立服务账号，不复用个人凭证&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 权限按任务分配（Task-scoped），不是按角色&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 敏感工具标记 &lt;code&gt;requires_approval&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 读写 Agent 分离&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;沙箱层&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Agent 在隔离环境中运行（Container/MicroVM/gVisor）&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 网络访问白名单限制&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 文件系统只读挂载（除必要写入目录）&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 资源配额（CPU/内存/Token）设置上限&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;审批层&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 删除、支付、部署、凭证变更必须人工审批&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 审批流有超时机制（避免无限等待）&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 审批记录持久化存储&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;供应链层&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; MCP Server 安装前完成来源/Star/依赖检查&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 运行时网络流量和文件访问监控&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 生产环境只用审核过的 MCP Server&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;审计层&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 所有 tool call 有完整日志&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 异常行为告警规则已配置&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 日志保留至少 90 天&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 支持按 Agent/Task/时间范围查询&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;这篇文章的核心观点只有一句：&lt;strong&gt;Agent 的安全不是「写好 prompt」的问题，是「建好工程」的问题。&lt;/strong&gt; 权限、沙箱、审批、供应链、审计——这五层防线少一层都不行。&lt;/p&gt;
&lt;p&gt;如果你正在生产环境跑 AI Agent，建议先拿上面的 checklist 对照一遍。有具体问题欢迎评论区聊。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;系列文章：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.kalend.top/2026/06/29/mcp-security-vulnerabilities.html/" &gt;MCP 安全血案：5 条攻击路径、20 万台服务器中招&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;本文：Agent 安全实战（防御侧）&lt;/li&gt;
&lt;/ul&gt;

 &lt;/blockquote&gt;</description></item><item><title>MCP 安全血案：5条攻击路径、20万台服务器中招、你装的插件可能有毒</title><link>https://blog.kalend.top/2026/06/29/2026-06-29-mcp-security-vulnerabilities.html/</link><pubDate>Mon, 29 Jun 2026 08:30:00 +0800</pubDate><guid>https://blog.kalend.top/2026/06/29/2026-06-29-mcp-security-vulnerabilities.html/</guid><description>&lt;h2 id="开篇你装的-mcp-插件可能正在偷你的密钥"&gt;开篇：你装的 MCP 插件，可能正在偷你的密钥
&lt;/h2&gt;&lt;p&gt;上周有个朋友找我，说他用 Cursor 写代码，某天突然发现 &lt;code&gt;.ssh&lt;/code&gt; 目录被读过，AWS 凭证疑似泄露。排查了两天，最后定位到一个两周前从社区 registry 装的 MCP 服务器——一个号称「数据库查询工具」的 npm 包，后台默默把环境变量打包发到了一个海外 IP。&lt;/p&gt;
&lt;p&gt;这不是个例。&lt;/p&gt;
&lt;p&gt;先把数据摆出来，不用我渲染气氛：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;指标&lt;/th&gt;
					&lt;th&gt;数值&lt;/th&gt;
					&lt;th&gt;来源&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;2026 年 1-2 月 MCP 相关 CVE&lt;/td&gt;
					&lt;td&gt;30+&lt;/td&gt;
					&lt;td&gt;NVD / GitHub Security Advisories&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;公网暴露的 MCP 服务器&lt;/td&gt;
					&lt;td&gt;7,000+&lt;/td&gt;
					&lt;td&gt;OX Security / BitSight&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;受影响实例总数&lt;/td&gt;
					&lt;td&gt;~200,000&lt;/td&gt;
					&lt;td&gt;OX Security&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;暴露在风险中的总下载量&lt;/td&gt;
					&lt;td&gt;1.5 亿+&lt;/td&gt;
					&lt;td&gt;OX Security&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;MCP 服务器 SSRF 易感率&lt;/td&gt;
					&lt;td&gt;36.7%&lt;/td&gt;
					&lt;td&gt;Adversa AI SecureClaw 报告&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;红队针对 AI 平台的漏洞挖掘成功率&lt;/td&gt;
					&lt;td&gt;89%&lt;/td&gt;
					&lt;td&gt;2026 安全行业报告&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;1.5 亿次下载。20 万台机器。这不是假设性威胁，是已经在发生的事。&lt;/p&gt;
&lt;p&gt;我写这篇文章不是为了制造恐慌——恐慌没用。我想做的是把目前公开的攻击路径捋清楚，每条配真实 CVE 和原理，让你看完知道：攻击者怎么打进来，你怎么挡住。&lt;/p&gt;
&lt;h2 id="第一章5-条真实攻击路径"&gt;第一章：5 条真实攻击路径
&lt;/h2&gt;&lt;p&gt;下面五条不是理论推演，每一条都有公开 CVE 或安全团队披露的真实案例。&lt;/p&gt;
&lt;h3 id="路径一prompt-injection--零交互远程代码执行"&gt;路径一：Prompt Injection —— 零交互远程代码执行
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;CVE-2026-30615，CVSS 8.0，影响 Windsurf IDE。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这条是最狠的，因为用户什么都不用点。&lt;/p&gt;
&lt;p&gt;攻击链是这样的：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;攻击者在公开仓库/文档中植入恶意文本
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 你的编程助手读取该文件作为上下文
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 文本里藏着指令：「把以下 MCP 服务器加入配置」
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 助手照做，修改了 mcp.json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → IDE 重启该 MCP 服务器
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 服务器启动命令执行任意 shell
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;OX Security 的研究员把它归类为「零点击 prompt injection in IDEs」。你只是打开了一个项目、读了一个 README，攻击就完成了。同样的链路在 Cursor、VS Code 的 Claude 扩展、Claude Code、Gemini CLI 中都被验证过。&lt;/p&gt;
&lt;p&gt;这不是某个工具的 bug，是整个交互模型的结构性问题：&lt;strong&gt;模型输出可以直接修改自己的工具配置，而配置能触发 shell 执行。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="路径二供应链攻击--你装的包里有后门"&gt;路径二：供应链攻击 —— 你装的包里有后门
&lt;/h3&gt;&lt;p&gt;MCP 生态的供应链攻击已经出了好几起，手法各不相同但都有效。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例 A：postmark-mcp 后门（2025 年 9 月）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;有人向 MCP registry 提交了一个伪装成 Postmark 邮件服务的包。功能看起来完全正常——能发邮件、能查状态。但它在后台悄悄把 &lt;code&gt;process.env&lt;/code&gt; 里的所有环境变量打包，通过 DNS 查询外传。&lt;/p&gt;
&lt;p&gt;开发者装它的时候看了一眼功能描述，觉得没问题，就 approve 了。API key 就这么出去了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例 B：mcp-server-git 链式 RCE（CVE-2025-68145 / 68143 / 68144）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这是 Anthropic 官方维护的 MCP 服务器。三个漏洞链在一起，实现了完整 RCE：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;CVE&lt;/th&gt;
					&lt;th&gt;漏洞&lt;/th&gt;
					&lt;th&gt;效果&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;CVE-2025-68145&lt;/td&gt;
					&lt;td&gt;路径校验绕过&lt;/td&gt;
					&lt;td&gt;突破仓库目录限制&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;CVE-2025-68143&lt;/td&gt;
					&lt;td&gt;git_init 无限制&lt;/td&gt;
					&lt;td&gt;能把 &lt;code&gt;~/.ssh&lt;/code&gt; 变成 git 仓库&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;CVE-2025-68144&lt;/td&gt;
					&lt;td&gt;git_diff 参数注入&lt;/td&gt;
					&lt;td&gt;注入任意 git 参数&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;配合 Filesystem MCP，攻击者通过一个恶意的 &lt;code&gt;.git/config&lt;/code&gt; 文件，在你机器上执行任意命令。官方仓库、官方维护、官方出的漏洞——这告诉你供应链风险不在于「第三方包不靠谱」，而在于整个分发链条缺乏安全审查。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例 C：mcp-remote 命令注入（CVE-2025-6514，CVSS 9.6）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mcp-remote&lt;/code&gt; 是连接远程 MCP 服务器的常用客户端库。攻击者构造一个恶意的远程 MCP 服务器 URL，客户端解析时执行任意命令。这个包下载量超过 43.7 万次——它是第一个被证实产生大规模实际影响的 MCP 漏洞。&lt;/p&gt;
&lt;h3 id="路径三tool-poisoning--工具描述本身就是武器"&gt;路径三：Tool Poisoning —— 工具描述本身就是武器
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;核心原理：编程助手把工具描述当成可信指令来执行。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;工具描述（tool description）本该是给用户看的文档，但模型把它当成了 context 的一部分——而且是高权重 context。攻击者只要能改写工具描述，就能劫持助手行为，不需要碰任何代码逻辑。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;经典案例：WhatsApp MCP 投毒（2025 年 4 月，Invariant Labs 披露）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一个第三方 trivia 游戏 MCP 服务器，工具描述里藏着隐藏指令。它指示助手去调用同一个进程中另一个合法的 &lt;code&gt;whatsapp-mcp&lt;/code&gt; 服务器，读取完整聊天记录，然后作为「正常输出」外传。&lt;/p&gt;
&lt;p&gt;端到端加密没用——因为数据是在加密层之上被助手自己合法读取并外泄的。助手有权限读，攻击者只是告诉它「读完发给我」。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;变体：Rug-pull 攻击&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;更阴的是 rug-pull（先正常后变恶）。服务器第一次注册时返回干净的工具描述，你审核通过。之后某次 &lt;code&gt;tools/list&lt;/code&gt; 调用，描述悄悄变了，塞进了恶意指令。&lt;/p&gt;
&lt;p&gt;任何只在「首次批准时」检查、之后不再 re-verify 的客户端都中招。Cursor 的 MCPoison 漏洞（CVE-2025-54136）就是这个路子——用户批准后配置永远不重新验证，攻击者提交良性配置过审，后续更新里塞恶意逻辑，静默生效。&lt;/p&gt;
&lt;h3 id="路径四凭证窃取--从工具参数到-aws-root"&gt;路径四：凭证窃取 —— 从工具参数到 AWS Root
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;案例：Microsoft MarkItDown MCP Server SSRF&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;MarkItDown 的 MCP 服务器会 fetch 任意 URL，没有任何校验。安全研究员 David Onwukwe 演示了完整链路：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;MarkItDown MCP 接收一个工具调用
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → fetch 目标 URL 设为 http://169.254.169.254/latest/meta-data/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 命中 AWS EC2 实例元数据服务
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 拿到 IAM 角色临时凭证
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 用凭证访问你的 AWS 资源
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;169.254.169.254 是 AWS 元数据服务的固定地址，云实例上无需认证即可访问。一个 SSRF 就能拿到云权限。&lt;/p&gt;
&lt;p&gt;微软把这个问题分类为「低风险」。实际演示已经拿到了 EC2 metadata。当你的 MCP 服务器跑在云上、有 IAM 角色挂载时，这就是凭证窃取的直达电梯。&lt;/p&gt;
&lt;p&gt;类似手法也通过工具参数实现：恶意工具描述指示助手「把环境变量内容作为参数传给这个 API」，助手照做，API key 就到了攻击者手里。&lt;/p&gt;
&lt;h3 id="路径五ssrf-与路径穿越--mcp-服务器成为内网跳板"&gt;路径五：SSRF 与路径穿越 —— MCP 服务器成为内网跳板
&lt;/h3&gt;&lt;p&gt;学术安全调研扫描了 2,614 个 MCP 实现，数据触目惊心：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;风险类型&lt;/th&gt;
					&lt;th&gt;占比&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;文件操作存在路径穿越风险&lt;/td&gt;
					&lt;td&gt;82%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;存在代码注入风险&lt;/td&gt;
					&lt;td&gt;67%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;存在命令注入风险&lt;/td&gt;
					&lt;td&gt;34%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;SSRF 暴露率&lt;/td&gt;
					&lt;td&gt;36.7%&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;案例 A：Fetch MCP Server SSRF（CVE-2025-65513，CVSS 7.5）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mcp-fetch-server&lt;/code&gt; 的 &lt;code&gt;is_ip_private()&lt;/code&gt; 函数没能正确识别私有 IP 地址。攻击者让服务器请求内网地址（&lt;code&gt;http://10.0.0.1/admin&lt;/code&gt;、&lt;code&gt;http://169.254.169.254/...&lt;/code&gt;），函数判断「不是私有 IP」，请求放行。MCP 服务器变成了攻击者进入你内网的跳板。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例 B：filesystem-mcp 路径穿越（CVE-2025-67366）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;配置了只能访问 &lt;code&gt;/home/user/project&lt;/code&gt; 的文件系统 MCP，攻击者用 &lt;code&gt;../../etc/shadow&lt;/code&gt; 穿越出去，读到了任意文件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;案例 C：Zen MCP Server 路径穿越（CVE-2025-66689）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;is_dangerous_path()&lt;/code&gt; 函数用精确字符串匹配黑名单。&lt;code&gt;/etc/shadow&lt;/code&gt; 被拦了，但 &lt;code&gt;/etc/shadow/../../../home/user/.ssh/id_rsa&lt;/code&gt; 没被拦——因为不在黑名单的精确匹配里。一个子目录穿越就绕过了「敏感路径保护」。&lt;/p&gt;
&lt;h2 id="第二章为什么-mcp-天生不安全"&gt;第二章：为什么 MCP 天生不安全
&lt;/h2&gt;&lt;p&gt;拆完攻击路径，往上抬一层看架构。MCP 的安全问题不是「实现写得烂」，是设计层面就有几个结构性缺陷。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;缺陷一：工具描述被默认当作权威指令&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;传统 API 安全模型里，文档是文档，执行是执行，两者隔离。Swagger 文档里写什么不会影响服务端行为。&lt;/p&gt;
&lt;p&gt;MCP 打破了这个隔离。工具描述直接进入模型 context，模型把它当指令执行。这意味着——文档即攻击面。任何能改工具描述的环节（服务器更新、中间人、供应链）都等于拿到了模型的部分控制权。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;缺陷二：服务器代码跑在你机器上，但行为由远程定义&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;MCP 服务器作为子进程跑在你本地，有你用户的全部权限——能读 &lt;code&gt;.ssh&lt;/code&gt;、能读 &lt;code&gt;.aws&lt;/code&gt;、能访问内网。但它的行为逻辑（工具定义、执行逻辑）由远程 npm/PyPI 包决定，随时可以更新。&lt;/p&gt;
&lt;p&gt;你的机器提供了权限和信任，远程服务提供了行为，两者之间没有隔离层。这就像你在自己家里装了一个别人能远程操控的锁。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;缺陷三：没有人工审核的默认信任链&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;多数 MCP 客户端用「首次信任」（TOFU）模型。你第一次批准一个服务器，之后它的所有更新和工具调用默认放行，不再重新验证。Cursor 的 MCPoison 就是钻了这个空子。&lt;/p&gt;
&lt;p&gt;工具调用链可以跨安全域：一个你信任的 MCP 服务器，被恶意指令引导去调用另一个你授权的 MCP 服务器，数据就跨域流动了。上面 WhatsApp 投毒就是这个模式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;缺陷四：协议规范只管传输，不管安全&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;MCP 规范定义了消息格式和传输层（stdio / SSE），但认证、响应完整性、审计——全是生态各自为政。82% 的实现有路径穿越风险，不是因为开发者菜，是因为协议没提供安全基线，每个人都在重新发明轮子，而且发明得都不好。&lt;/p&gt;
&lt;h2 id="第三章真实伤亡清单"&gt;第三章：真实伤亡清单
&lt;/h2&gt;&lt;p&gt;把受影响面拉个清单，让你知道自己在不在射程内。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IDE / 编程工具全线中招：&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;工具&lt;/th&gt;
					&lt;th&gt;受影响情况&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Cursor&lt;/td&gt;
					&lt;td&gt;MCPoison 信任绕过（CVE-2025-54136）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;VS Code（Claude 扩展）&lt;/td&gt;
					&lt;td&gt;零点击 prompt injection 链&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Windsurf&lt;/td&gt;
					&lt;td&gt;CVE-2026-30615，CVSS 8.0 RCE&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Claude Code&lt;/td&gt;
					&lt;td&gt;通过 hooks/MCP config/env 攻击链&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Gemini CLI&lt;/td&gt;
					&lt;td&gt;MCP 工具链受影响&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;LangChain / LangFlow / Flowise&lt;/td&gt;
					&lt;td&gt;未认证 UI 注入 RCE&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;LiteLLM&lt;/td&gt;
					&lt;td&gt;CVE-2025-45809，SQL 注入&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;OX Security 评估：这些工具背后的 MCP 生态总下载量超过 1.5 亿次，约 20 万个实例存在被利用风险。&lt;/p&gt;
&lt;p&gt;Anthropic 对核心设计缺陷的回应是：「这是设计行为，sanitize 是开发者的责任。」&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;vulnerablemcp.info 数据库现状：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;社区维护的漏洞数据库 The Vulnerable MCP Project 已收录 50+ 个漏洞，其中 13 个评为 Critical。这个数字还在涨，每周都有新 CVE 进来。&lt;/p&gt;
&lt;p&gt;如果你在生产环境跑 MCP 服务器，或者哪怕只是在本地用 Cursor 配了几个 MCP 插件，你都在这个射程内。&lt;/p&gt;
&lt;h2 id="第四章开发者自保指南"&gt;第四章：开发者自保指南
&lt;/h2&gt;&lt;p&gt;不废话，直接上操作。&lt;/p&gt;
&lt;h3 id="5-条核心防护措施"&gt;5 条核心防护措施
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;1. 审查你装的每一个 MCP 服务器&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 查看当前配置的所有 MCP 服务器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Cursor: Settings → MCP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Claude Code: ~/.claude/mcp.json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# VS Code: 命令面板 → &amp;#34;MCP: List Servers&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 检查 git 历史里有没有可疑改动&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git log --all --since&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2 weeks ago&amp;#34;&lt;/span&gt; -- mcp.json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 移除不用的服务器——每一个都是攻击面&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;对于每一个服务器：确认发布者身份、检查 GitHub 仓库近期活跃度和 issue 区有没有安全报告。不认识的服务器，删掉。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. 沙箱隔离&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;MCP 服务器进程不该有你用户的所有权限。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 用 Docker 跑，只挂载项目目录，不挂 ~/.ssh、~/.aws&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -it --rm &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v &lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;:/workspace &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -w /workspace &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; your-mcp-server
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 或者用 Dev Container，VS Code 原生支持&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;原则：MCP 进程不该接触到「泄露了会很惨」的凭证。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. 最小权限&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API key 用只读 scope，别给 root key&lt;/li&gt;
&lt;li&gt;文件系统 MCP 限定到项目目录，别给 home 目录&lt;/li&gt;
&lt;li&gt;网络 MCP 加出站白名单，别让它随便 fetch&lt;/li&gt;
&lt;li&gt;用了之后立刻 revoke 不再需要的凭证&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;4. 固定版本，不用 @latest&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 危险&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx @some-package/mcp-server@latest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 正确——锁定具体版本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx @some-package/mcp-server@1.2.3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;供应链 rug-pull 靠的就是你无感知地拉到恶意更新。锁版本 + 监控更新日志，至少能让你知道什么时候变了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. 用 mcp-scan 做安全扫描&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Invariant Labs 出的 &lt;code&gt;mcp-scan&lt;/code&gt; 是目前最实用的免费工具：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 需要 Python 3.10+ 和 uv&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -LsSf https://astral.sh/uv/install.sh &lt;span class="p"&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 扫描你的 MCP 配置，自动检测工具投毒和已知漏洞&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx mcp-scan
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# CI/CD 集成——发现 critical 问题直接失败&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx mcp-scan --exit-code
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;它能检测工具描述里的投毒指标、匹配已知漏洞数据库、检查版本是否受影响。30 秒跑完，建议每周扫一次。&lt;/p&gt;
&lt;h3 id="mcp-服务器选型-checklist"&gt;MCP 服务器选型 Checklist
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;检查项&lt;/th&gt;
					&lt;th&gt;通过标准&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;发布者身份&lt;/td&gt;
					&lt;td&gt;可验证的 GitHub 组织/个人，有历史信誉&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;源码可审&lt;/td&gt;
					&lt;td&gt;公开仓库，能读到完整源码&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;活跃度&lt;/td&gt;
					&lt;td&gt;近 3 个月有提交，issue 有回应&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;认证机制&lt;/td&gt;
					&lt;td&gt;有 auth 层，不裸奔&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;权限范围&lt;/td&gt;
					&lt;td&gt;只请求必要权限，不做 read+write 全要&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;社区反馈&lt;/td&gt;
					&lt;td&gt;搜索 CVE + 安全报告，无未修复的高危项&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="推荐工具"&gt;推荐工具
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;工具&lt;/th&gt;
					&lt;th&gt;类型&lt;/th&gt;
					&lt;th&gt;用途&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;mcp-scan&lt;/td&gt;
					&lt;td&gt;免费开源&lt;/td&gt;
					&lt;td&gt;工具投毒检测 + 漏洞匹配&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Snyk Agent Scan&lt;/td&gt;
					&lt;td&gt;免费/付费&lt;/td&gt;
					&lt;td&gt;依赖链漏洞扫描，CI/CD 集成&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;SecureClaw&lt;/td&gt;
					&lt;td&gt;企业级&lt;/td&gt;
					&lt;td&gt;55 项审计，合规报告&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;agent-audit&lt;/td&gt;
					&lt;td&gt;开源&lt;/td&gt;
					&lt;td&gt;OWASP Agentic Top 10 对标审计&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;个人开发者：mcp-scan 起步，Snyk 补依赖链。企业环境：上 SecureClaw 做持续监控。&lt;/p&gt;
&lt;h2 id="第五章总结与展望"&gt;第五章：总结与展望
&lt;/h2&gt;&lt;p&gt;先说结论：&lt;strong&gt;MCP 的安全不是「以后再说」的事，是现在就得管的事。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;30 个 CVE 用 60 天砸下来，已经把 MCP 从「有前景的开放标准」打成了「活跃攻击面」。而根因——工具描述当指令执行、远程定义本地行为、协议不管安全——不是修几个 bug 能解决的。&lt;/p&gt;
&lt;p&gt;好在社区在动：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;协议层&lt;/strong&gt;：MCP 规范团队在推内置认证标准、工具描述签名、服务器 attestation。这些能从根源上解决工具投毒和供应链问题，但落地还要几个月。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Registry 审查&lt;/strong&gt;：主要 MCP registry 在上线发布者验证 + 自动安全扫描，供应链风险会降但不会消失。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;客户端防御&lt;/strong&gt;：越来越多客户端加了细粒度权限控制和定期 re-verify，TOFU 模型在松动。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但这些都是未来的事。今天的现实是：你装的 MCP 插件可能有毒，你配的服务器可能暴露在公网，你的凭证可能已经被打包外传了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;你现在该做的三件事：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开你的 IDE MCP 设置，删掉所有不认识的服务器&lt;/li&gt;
&lt;li&gt;跑一遍 &lt;code&gt;uvx mcp-scan&lt;/code&gt;，修掉 critical 项&lt;/li&gt;
&lt;li&gt;把敏感凭证从 MCP 进程能触及的环境里挪走&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;做完这三步，你的风险面至少砍掉一大半。剩下的，等协议和工具成熟。&lt;/p&gt;
&lt;p&gt;安全从来不是等来的，是防出来的。MCP 生态还在野蛮生长，你不变靶子，就只能自己穿甲。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;数据来源：OX Security 供应链 advisory、The Vulnerable MCP Project（vulnerablemcp.info）、Adversa AI SecureClaw 报告、Invariant Labs 工具投毒披露、NVD/GitHub Security Advisories。 CVE 详情可在对应数据库查询。&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>