文章总结: 文章披露MCP服务器存在的路径穿越漏洞(CWE-22),攻击者可通过提示词注入操纵AI助手读取主机敏感文件(如SSH密钥、数据库密码)。扫描显示36%的MCP服务器安全性不及格,漏洞危害因AI助手作为攻击媒介被放大。作者提供修复方案(路径边界校验)及安全工具SpiderShield扫描建议。 综合评分: 90 文章分类: 漏洞分析,安全工具,解决方案,安全运营,威胁情报
AgentEscape:MCP服务器如何让AI助手读取你的私钥
幻泉之洲
2026年4月9日 19:00 北京
一款拥有49k星标的流行MCP服务器项目存在路径穿越漏洞,攻击者可通过AI助手这个“中介”,远程窃取主机上的SSH密钥、数据库密码等敏感文件。这不是孤立事件,扫描发现36%的MCP服务器安全性不及格。本文剖析了这种独特的攻击面,并给出防护建议。
一次真实的攻击
攻击者现在可以这样黑掉你的AI助手:
- 精心构造一个恶意提示,诱使助手去安装一个“技能”或“工作流”。
- 助手会根据指令,调用MCP服务器的文件操作功能,传入类似
../../.ssh/id_rsa这样的路径。 - 由于服务器没有任何路径验证,它会直接读取这个文件并返回内容。
- 你的SSH私钥就这样出现在了对话里,对攻击者一览无余。
这不是什么理论推演。这是在数万开发者使用的项目中真实存在的、可运行的漏洞代码。
漏洞的发现
我们的开源安全扫描工具 SpiderShield,发现了 upstash/context7[1] 项目中的一个路径穿越(CWE-22)漏洞。这个项目有超过49,000个GitHub星标,是MCP生态里最热门的周边项目之一。
问题出在技能文件安装的接口上。代码直接把用户输入的 name 参数拼接进了文件路径:
# 简化后的漏洞模式path = SKILLS_DIR / (name + ".yaml")# 如果 name = "../../.ssh/id_rsa" → 就会读取到预定目录之外的文件
没有做 resolve() 检查,没有验证上级目录,没有任何字符过滤。任何连接到这个服务器的AI助手,都可能被提示词注入或恶意技能欺骗,读取宿主机器上的任意文件。
能偷走什么?
| 文件 | 包含内容 | 带来的影响 |
| — | — | — |
| ~/.ssh/id_rsa | SSH私钥 | 获得你所有服务器的访问权 |
| ~/.env | API密钥、数据库密码 | 账户完全沦陷 |
| ~/.aws/credentials | AWS访问密钥 | 云服务被接管 |
| ~/.kube/config | Kubernetes凭证 | 整个集群失守 |
| /etc/passwd | 系统用户列表 | 为后续攻击侦察开路 |
最要命的是,助手自己并不知道正在被利用。它只是在忠实地执行指令,去读取一个恰好是你私钥的“技能文件”。
修复措施
我们通过GitHub Issue #2234[2]报告了漏洞,并在PR #2235[3]提交了修复方案。核心是增加了路径边界校验:
resolved = path.resolve()if not resolved.is_relative_to(SKILLS_DIR.resolve()):  raise ValueError("Path traversal detected")
这个修复在6天内被维护者审核并合并。如果你在使用context7,请立刻更新到最新版本。
这只是冰山一角
我们用SpiderShield扫描了15,923个MCP服务器。结果不太乐观,路径穿越是最常见的漏洞模式之一:
- 757个服务器存在令牌或凭证泄露问题。
- 有36%的MCP服务器拿到了F等级(不及格)。
- 路径穿越漏洞在文件操作工具、工作流管理和技能安装器中尤其普遍。
在那之后,我们在多个其他项目里发现了类似问题,并向28个代码仓库提交了37个修复请求。目前其中5个已被合并,涉及项目的总星标数超过86,000个。
说实话,这个比例和广度说明生态早期的安全盲区很大。
为什么MCP服务器格外危险?
传统Web漏洞需要攻击者自己找到并直接利用。MCP服务器的漏洞截然不同:AI助手本身成了攻击媒介。
传统Web应用是“攻击者 → 发现漏洞 → 利用它”。
而MCP服务器的情况是“攻击者 → 注入提示词 → AI助手替他去利用漏洞”。
助手对MCP服务器的工具拥有合法的访问权限,并且它天然信任接收到的指令。一旦这些指令被“下毒”——无论是通过提示词注入、恶意工具描述,还是被篡改的上游技能——这个助手就会在毫不知情的情况下成为攻击者的帮凶。
这意味着,每一个MCP服务器漏洞的危害性,都会被连接到它的AI助手数量所放大。
如何保护自己
花30秒扫描你的MCP服务器:
pip install spidershieldspidershield scan /path/to/your/mcp-server
或者快速查看任意服务器的评级:
spidershield check owner/repo
检查你自己的代码时,留意以下几点:
-
文件操作:
任何接收用户或助手输入作为路径的地方,都要加上
resolve()和父目录检查。 -
子进程调用:
避免使用
shell=True,改用参数数组形式。 -
密钥比较:
不要用
===直接比对密钥或令牌,改用恒定时间比较函数,例如crypto.timingSafeEqual()。
事件时间线
| 日期 | 事件 | | — | — | | 2026-03-12 | SpiderShield扫描器在context7中标记出CWE-22漏洞 | | 2026-03-13 | 提交Issue #2234和PR #2235 | | 2026-03-19 | 维护者合并PR(处理了4条评审意见) | | 2026-03-28 | 本文发布公开披露 |
所有漏洞均已通过负责任的方式披露,修复在本文发布前完成。SpiderShield[4]是开源且免费的。
参考资料
[1] https://github.com/upstash/context7
[2] https://github.com/upstash/context7/issues/2234
[3] https://github.com/upstash/context7/pull/2235
[4] https://github.com/teehooai/spidershield
[5] https://spiderrating.com/blog/agent-escape-mcp-servers-leak-your-secrets
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:幻泉之洲 《AgentEscape:MCP服务器如何让AI助手读取你的私钥》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论