GitHub AI Agent 被诱骗泄露私有仓库代码
安全研究揭示 GitHub agent 通过社工攻击可导出私有项目代码。重要的安全漏洞警示,所有使用该功能的开发者应知悉。
安全研究揭示 GitHub agent 通过社工攻击可导出私有项目代码。重要的安全漏洞警示,所有使用该功能的开发者应知悉。
TL;DR: Noma Labs 在 GitHub 新推出的 Agentic Workflows 中发现了一个关键提示注入漏洞,允许未认证的攻击者通过在属于同一组织的公开仓库中发布精心构造的 GitHub Issue,从私有仓库中悄然窃取数据。Noma Labs 将该漏洞命名为 GitLost。
GitHub 最近推出了 GitHub Agentic Workflows,将 GitHub Actions(GitHub 用于响应仓库事件运行任务的自动化系统)与由 Claude 或 GitHub Copilot 驱动的 AI Agent 相配对。GitHub Agentic Workflows 允许团队用纯 Markdown 编写 GitHub 工作流,GitHub Agent 自动读取问题、调用工具并独立响应。作为一名拥有安全开发背景的漏洞研究人员,在这次发布后,我脑海中首先浮现的问题既基础又直接:当 GitHub Agent 读到它不应该信任的内容时会发生什么?
答案是一次教科书式的间接提示注入攻击,这种攻击会悄无声息地将私人数据发送给互联网上的任何人。提示注入是一种攻击方式,攻击者在 AI Agent 读取的内容中隐藏恶意指令。这些内容会导致 Agent 遵循隐藏的指令,而不是其操作员的本意。
GitHub Agentic Workflows 让团队能够使用自然语言自动化与代码仓库的交互。工作流存储在 Markdown(.md)文件中,被编译为 YAML(常见的配置文件格式)、.yml 扩展名的 Actions 文件,并在具有可配置权限的 AI Agent 的帮助下运行。GitHub Agent 可以读取问题、调用工具,并访问组织内的其他仓库。
GitLost 漏洞的根本原因,按照现在 Agent 式 AI 系统的惯例,就是提示注入。在大多数 Agent 式提示注入攻击中,Agent 会将错误的内容视为可信的指令来源,允许自己被误导或滥用。这发生在系统未能在系统级指令和不可信用户数据之间维持严格的信任边界时。在这个具体案例中,任何恶意行为者都可以创建一个 GitHub Issue,在问题正文中用纯英文隐藏命令,GitHub 的 Agent 会遵循这些命令。
Noma Labs 发现的易受攻击的 GitHub Agentic Workflow 配置为:
为了利用这个漏洞,攻击者不需要任何编码技能、访问权限或凭证。所需的只是在属于使用 GitHub Agentic Workflow 设置的组织的公开仓库中开启一个问题并等待。
让我们看看 Noma Labs 漏洞研究人员成功执行的确切攻击流程:首先,他们构造了一个看起来完全无害的 GitHub Issue,包含来自副总裁销售的貌似真实的请求,声称是在与客户会面后提出的,如下所示:
在这个具体示例中,当 Issue 被分配时触发了工作流操作,但我们的测试确认它对其他 GitHub 工作流操作的工作方式相同。
然后,在 GitHub 自动化分配 Issue 后,一个事件触发的工作流导致 Agent 从 poc(公开)和 testlocal(私有)仓库中获取 README.md 的内容。最后,GitHub Agent 随后将它们作为公开评论发布在公开仓库的 Issue 中,任何人都可以访问和读取。
GitHub 已经部署了限制性的护栏来防止这种情况,但它们未能有效保护这些仓库。像攻击者一样进行多次变体测试 GitHub,并添加关键字"Additionally"触发了模型中的意外行为,导致它重新表述输出而不是拒绝输出。本质上,通过欺骗模型,我能够确保 GitHub 的护栏没有按预期工作,未能阻止数据泄露。
为了充分透明,Noma Lab 的确认发现包括我们的工作流重现和实时证据,可以在这里找到:
工作流运行:https://github.com/sasinomalabs/poc/actions/runs/23909666039
Issue:https://github.com/sasinomalabs/poc/issues/153
泄露的数据包括以下内容的 README.md:
GitLost 完美地说明了每个组织在 Agent 式 AI 系统中面临的基本安全挑战之一。Agent 的上下文窗口也是其攻击面。Agent 读取的任何内容,无论是问题、拉取请求、评论还是文件,如果 Agent 将该内容视为指令输入,都可能被利用。
传统的安全模型通常假设信任边界由代码强制执行。在 Agent 式系统中,信任边界部分由模型的行为强制执行,而模型本质上是遵循指令的。提示注入攻击已经成为 Agent 式 AI 的"SQL 注入":一个系统性的、范畴级的漏洞类别,需要相同的系统性策略和防御。
GitLost 已负责任地向 GitHub 披露。漏洞详情在此与其知情同意下分享。
发现这个很有趣?订阅 Noma Labs 获取更多 Agent 式 AI 漏洞研究,或查看:GrafanaGhost、DockerDash、Context Crush、GeminiJack。在寻找有效的 Agent 式 AI 安全解决方案?联系我们安排 Noma 综合解决方案的演示。
GeminiJack:Google Gemini 零点击漏洞泄露 Gmail、日历和文档数据
GrafanaGhost:窃取您数据的幽灵
ContextCrush:隐藏在明处的 Context7 MCP 服务器漏洞