Github MCP被曝严重安全漏洞!Agent成内鬼!检测方法来了!

MCP 虽然火,但安全问题其实一直不容忽视,就连大名鼎鼎的、与Claude 打得火热的 Github MCP 服务器也出事了!

刚刚得到消息, 昨天,一家名为Invariant 的安全的公司,突然披露了一个有关 GitHub MCP 集成(在 GitHub 上拥有 1.4 万星标)的严重漏洞。

这个漏洞允许攻击者通过精心构造的 GitHub Issue“劫持”开发者的智能代理(如 Claude Desktop 中的 Claude 4 Opus),并诱导它主动泄露私有仓库的数据。

更令人警惕的是:这不是传统意义上的工具被黑,而是一种全新的攻击路径——中毒代理流(Toxic Agent Flow)。攻击者无需突破 GitHub 或 AI 模型, 现在,攻击者只需要用户的某个存储库中放置恶意问题,他们就可以轻松劫持用户的代理并疯狂利用它,比如诱导智能代理误操作,就可能造成源代码、公司机密甚至个人信息的外泄。

漏洞原理:如何一步步劫持 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 调用私有仓库内容并将其泄露到公开仓库中。

具体的攻击演示流程如下:

  1. 攻击者提交一个恶意 Issue(例如伪装成“About the Author”部分)。
  1. 用户无意中查看 Issue 列表,触发 Claude 自动调用 GitHub MCP 工具。

克劳德提示用于触发攻击

  1. Claude 被诱导调用私有仓库内容,并创建一个新的 Pull Request,把私有信息带入公开仓库。
  2. 攻击者可直接访问公开仓库获取泄露数据。

这是完整的聊天截图:

与特工进行全面聊天,展示攻击过程

在实测中,研究者最后成功导出以下敏感信息:

  • 用户私有项目名称,如 Jupiter Star;
  • 其搬迁计划(计划移居南美);
  • 甚至包括薪资水平等个人隐私!

commit where the agent leaks private data

这类攻击完全绕过了 GitHub 的权限系统,利用的是用户自身的 AI 助手。这正是“中毒代理流”的可怕之处。

研究人员还展示了一个“关于作者”的注入攻击。

只需要在公共存储库中放置一个恶意问题,该问题包含一个有效载荷,代理程序在查询公共存储库的问题列表时将立即执行该载荷。

什么是 Toxic Agent Flow?为何防不胜防?

这是 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 的工具调用行为;
  • 快速识别可疑请求;
  • 自动生成日志审计记录,供后期溯源。

这一方式无需改动现有代理系统,就能大幅提升可视性和防御力。

Invariant 的 MCP-scan 扫描器

注意:模型对齐 ≠ 安全无忧

有人可能会想:“Claude 4 不是对齐做得很好吗?为啥还会被操控?”

答案是:模型对齐只能提供通用安全性,无法应对具体场景的上下文威胁。 一旦进入真实交互环境,信息输入路径复杂、工具链暴露多、提示语潜藏深,模型很难凭空识别恶意模式。

正因如此,系统级的安全机制(如访问控制、流量审计)才是防护的最后一道防线。

总结:别让 AI 成为下一个“内鬼”

今年以来,MCP 大红大紫,全球各大巨头都纷纷发布了自家的 MCP 服务器,但业内人士此前就多次提醒 MCP 带来的安全问题日益严峻。

本次曝光的 GitHub MCP 漏洞,首次揭示了AI 工具链下的间接攻击路径;攻击者可通过公开 Issue 向 AI 注入恶意提示,诱导其“自愿”泄露私有仓库内容。

值得注意的是,这是一种系统性问题,无法靠模型修复,必须通过权限隔离 + 实时监控的方式预防;

类似攻击未来可能在更多开发者平台(如 GitLab Duo)中出现,行业亟需构建统一的“代理安全框架”。

如果各位正在构建 Agent 系统,或已经将 GitHub、MCP 等工具集成至开发流程中,务必重视这类新兴风险。

参考链接:
https://invariantlabs.ai/blog/mcp-github-vulnerability#mitigations

原文链接:,转发请注明来源!