GitHub MCP 漏洞:通过 MCP 访问私有仓库

admin 2025年6月6日03:51:26评论18 views字数 2114阅读7分2秒阅读模式
GitHub MCP 漏洞:通过 MCP 访问私有仓库

我们展示了 GitHub 官方 MCP 服务器的一个严重漏洞,该漏洞允许攻击者访问私有存储库数据。该漏洞是 Invariant 用于检测恶意代理流的安全分析器首次发现的漏洞之一。

GitHub MCP 漏洞:通过 MCP 访问私有仓库

Invariant 发现了一个影响广泛使用的GitHub MCP 集成(GitHub 上 1.4 万颗星)的严重漏洞。该漏洞允许攻击者通过恶意 GitHub Issue 劫持用户代理,并迫使其泄露私有代码库中的数据。

这个问题是 Invariant 自动安全扫描程序首次发现的,用于检测所谓的“有毒代理流”。在这种情况下,代理会被操纵执行非预期的操作,例如泄露数据或执行恶意代码。更多信息,请参阅下文。

此时提高对此问题的认识非常重要,因为业界正在竞相广泛部署编码代理和 IDE,这可能会使用户面临针对关键软件开发工具的类似攻击。

攻击设置

在此攻击设置中,用户使用 Claude Desktop 等 MCP 客户端,并将Github MCP 服务器 https://github.com/github/github-mcp-server 连接到他们的帐户。

我们假设用户创建了两个存储库:

  • <user>/public-repo:一个可公开访问的存储库,允许 GitHub 上的每个人创建问题和错误报告。

  • <user>/private-repo:私人存储库,例如具有专有代码或私人公司数据。

根据标准的 GitHub 规则,攻击者现在可以在公共存储库上创建恶意问题,其中包含等待代理交互的提示注入。

一旦 GitHub 帐户的用户和所有者使用良性请求查询其代理(例如查看中的未解决的问题)<user>/public-repo ,就会触发实际攻击,这将导致代理从公共存储库中获取问题并被注入。

请参阅下文以了解后续流程的说明。

GitHub MCP 漏洞:通过 MCP 访问私有仓库

如此处所示,一旦代理遇到恶意的 GitHub 问题,它就会被迫将私有存储库数据拉入上下文,并将其泄露到公共存储库中自主创建的 PR 中,攻击者或任何其他人都可以自由访问。

有毒流我们将这种利用间接提示注入来触发恶意工具使用序列的行为称为“有毒代理流”。我们通过将 Invariant 的安全分析器应用于 GitHub MCP 发现了此漏洞,从而能够自动化在野外发现该流的过程。

攻击演示

为了更具体地说明,我们使用一组演示存储库实际实现了这种攻击:

  • ukend0464/pacman:一个带有 Pacman 游戏简单实现的公共存储库(可在此处获取:https://github.com/ukend0464/pacman)

  • 多个私人存储库包含个人项目和有关用户的敏感信息。

“关于作者”注入我们现在在公共存储库中放置一个恶意问题,攻击者可以访问该问题。该问题包含一个有效载荷,代理程序在查询公共存储库的问题列表时将立即执行该载荷。

GitHub MCP 漏洞:通过 MCP 访问私有仓库

用户交互要触发攻击,用户只需向Claude 4 Opus发出以下请求:

GitHub MCP 漏洞:通过 MCP 访问私有仓库

然后,Claude 使用 GitHub MCP 集成来执行这些指令。在此过程中,Claude Desktop 默认要求用户确认每个工具调用。然而,许多用户在使用代理时已经选择了“始终允许”的确认策略,不再监控单个操作。

攻击部署代理程序现在会遍历问题列表,直到找到攻击载荷。它会主动将私有存储库数据拉取到上下文中,并将其泄露到存储库的拉取请求pacman中。由于存储库是公开的,因此攻击者可以自由访问。

该拉取请求包含以下新信息:

GitHub MCP 漏洞:通过 MCP 访问私有仓库

因此,我们成功窃取了有关用户的几条私人信息ukend0464:有关他们的私人存储库的信息,例如Jupiter Star,他们搬迁到南美的计划,甚至他们的薪水。

下面,我们附上了与代理的完整聊天截图,展示了其推理和工具使用顺序。

GitHub MCP 漏洞:通过 MCP 访问私有仓库

https://explorer.invariantlabs.ai/trace/5f3f3f3c-edd3-4ba7-a35f-c1664d993a89

检测有毒剂流动

与之前发现的针对 MCP 的工具投毒攻击不同,此漏洞不需要 MCP 工具本身被攻陷。相反,即使使用完全受信任的工具,也会出现此问题,因为代理在连接到 GitHub 等外部平台时可能会接触到不受信任的信息。

范围和缓解措施

虽然我们的实验主要针对 Claude Desktop,但该漏洞并非针对任何特定代理或 MCP 客户端。它会影响任何使用 GitHub MCP 服务器的代理,无论其底层模型或实现如何。

重要的是,这不是 GitHub MCP 服务器代码本身的缺陷,而是一个必须在代理系统层面解决的根本架构问题。这意味着 GitHub 无法独自通过服务器端补丁解决此漏洞。

结论

在本篇博文中,我们展示了一个影响 GitHub MCP 服务器的严重漏洞,该漏洞允许攻击者通过恶意 GitHub Issue 劫持用户代理,并迫使其泄露私有代码库中的数据。该漏洞是 Invariant 用于检测恶意代理流的安全分析器首次发现的漏洞之一。

虽然我们发现的漏洞特定于 GitHub MCP,但类似的攻击在其他环境中不断出现。例如,Legit Security最近报告了GitLab Duo中的一个漏洞https://www.legitsecurity.com/blog/remote-prompt-injection-in-gitlab-duo

原文始发于微信公众号(Ots安全):GitHub MCP 漏洞:通过 MCP 访问私有仓库

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月6日03:51:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   GitHub MCP 漏洞:通过 MCP 访问私有仓库https://cn-sec.com/archives/4126369.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息