摘要:昨天,一家名为Invariant 的安全的公司,突然披露了一个有关 GitHub MCP 集成(在 GitHub 上拥有 1.4 万星标)的严重漏洞。
MCP 虽然火,但安全问题其实一直不容忽视,就连大名鼎鼎的、与Claude 打得火热的 Github MCP 服务器也出事了!
刚刚得到消息, 昨天,一家名为Invariant 的安全的公司,突然披露了一个有关 GitHub MCP 集成(在 GitHub 上拥有 1.4 万星标)的严重漏洞。
这个漏洞允许攻击者通过精心构造的 GitHub Issue“劫持”开发者的智能代理(如 Claude Desktop 中的 Claude 4 Opus),并诱导它主动泄露私有仓库的数据。
更令人警惕的是:这不是传统意义上的工具被黑,而是一种全新的攻击路径——中毒代理流(Toxic Agent Flow)。攻击者无需突破 GitHub 或 AI 模型, 现在,攻击者只需要用户的某个存储库中放置恶意问题,他们就可以轻松劫持用户的代理并疯狂利用它,比如诱导智能代理误操作,就可能造成源代码、公司机密甚至个人信息的外泄。
这种攻击方式也是Invirant的自动安全扫描器首次识别到。 Invirant在博文中介绍了漏洞的攻击原理。
首先是该公司设定的攻击场景。比方一位用户正在使用像 Claude Desktop 这样的本地 AI 编程客户端,并已将 GitHub MCP 接入自己的账户。
我们假设用户拥有以下两个仓库:
username/public-repo:一个公开仓库,任何 GitHub 用户都可以提交 Issue。username/private-repo:一个私有仓库,储存着敏感代码或企业数据。攻击者无需入侵,只需在公开仓库中提交一个特制的 Issue —— 里面暗藏 prompt injection(提示注入)攻击语句。接下来,只要用户问 Claude 一个看似无害的问题,例如:
“帮我看看 public-repo 的 open issues。”
Claude 就会调用 GitHub MCP 去抓取 Issue 列表,结果就会触发“注入攻击”。攻击语句会诱导 Claude 调用私有仓库内容并将其泄露到公开仓库中。
具体的攻击演示流程如下:
克劳德提示用于触发攻击
与特工进行全面聊天,展示攻击过程
在实测中,研究者最后成功导出以下敏感信息:
用户私有项目名称,如 Jupiter Star;其搬迁计划(计划移居南美);甚至包括薪资水平等个人隐私!commit where the agent leaks private data
这类攻击完全绕过了 GitHub 的权限系统,利用的是用户自身的 AI 助手。这正是“中毒代理流”的可怕之处。
研究人员还展示了一个“关于作者”的注入攻击。
只需要在公共存储库中放置一个恶意问题,该问题包含一个有效载荷,代理程序在查询公共存储库的问题列表时将立即执行该载荷。
这是 Invariant 首次自动检测并披露此类漏洞。与传统的“工具被篡改”不同,Toxic Agent Flow 不需要 MCP 本身被攻破。攻击的本质是:智能代理暴露在不可信外部信息(如 GitHub Issue)环境下,被诱导执行恶意操作。
由于代理系统背后往往是强大的大模型(如 Claude 4、GPT-4、Gemini 等),它们对提示词非常敏感。一旦 prompt injection 成功,就可能做出无法预期的动作,如跨仓库访问、隐私泄露、甚至代码注入。
而且,即便模型本身对齐程度再高,面对这种“间接诱导 + 工具调用”的攻击链,依然很难完全防御。很多用户出于效率,会设置代理为“始终允许”调用工具,从而让攻击者有了可乘之机。
推荐使用专为代理系统设计的安全防护工具,如 Invariant Guardrails,它可以设置基于上下文的访问控制策略。
例如,下面这段策略可有效阻止跨仓库调用:
复制
raise Violation("You can access only one repo per session.") if: (call_before: ToolCall) -> (call_after: ToolCall) call_before.function.name in (...repo 操作集) call_after.function.name in (...repo 操作集) call_before.arguments["repo"] != call_after.arguments["repo"] or call_before.arguments["owner"] != call_after.arguments["owner"]1.2.3.4.5.6.7.8.这意味着:每次交互,智能代理只能访问一个仓库,避免在一个 session 中串联多个目标,从而防止数据横向流动。
安全策略之外,还应部署实时监控系统,例如 Invariant 的 MCP-scan 扫描器。
它支持 Proxy 模式,只需将 MCP 流量引入代理通道,即可:
实时检测 agent 的工具调用行为;快速识别可疑请求;自动生成日志审计记录,供后期溯源。这一方式无需改动现有代理系统,就能大幅提升可视性和防御力。
有人可能会想:“Claude 4 不是对齐做得很好吗?为啥还会被操控?”
答案是:模型对齐只能提供通用安全性,无法应对具体场景的上下文威胁。 一旦进入真实交互环境,信息输入路径复杂、工具链暴露多、提示语潜藏深,模型很难凭空识别恶意模式。
正因如此,系统级的安全机制(如访问控制、流量审计)才是防护的最后一道防线。
今年以来,MCP 大红大紫,全球各大巨头都纷纷发布了自家的 MCP 服务器,但业内人士此前就多次提醒 MCP 带来的安全问题日益严峻。
本次曝光的 GitHub MCP 漏洞,首次揭示了AI 工具链下的间接攻击路径;攻击者可通过公开 Issue 向 AI 注入恶意提示,诱导其“自愿”泄露私有仓库内容。
值得注意的是,这是一种系统性问题,无法靠模型修复,必须通过权限隔离 + 实时监控的方式预防;
类似攻击未来可能在更多开发者平台(如 GitLab Duo)中出现,行业亟需构建统一的“代理安全框架”。
如果各位正在构建 Agent 系统,或已经将 GitHub、MCP 等工具集成至开发流程中,务必重视这类新兴风险。
参考链接:https://invariantlabs.ai/blog/mcp-github-vulnerability#mitigations
来源:51CTO一点号