GitLost:我们诱骗 GitHub 的 AI 代理泄露了私有仓库
漏洞性质
- GitHub Agentic Workflows 的配置如下:
- 读取公开 issue 的标题/正文。
- 通过公开评论回复。
- 拥有对其他组织仓库的读取权限,包括私有仓库。
- 攻击者可以在公开 issue 中注入指令,诱使代理读取私有仓库并将内容以公开评论的形式贴回。
- 几位评论者强调,关键失败在于不受信任的 issue 内容与私有仓库访问之间缺少信任边界。
谁该负责?
- 一种观点:这主要是用户配置错误。
- 研究人员明确授予了代理组织级仓库访问权限,并允许它处理不受信任的公开 issue。
- 类比:给一个 CI 作业秘密信息,然后把它跑在公开 PR 上。
- 另一种观点:这是 GitHub 的设计缺陷。
- 合理的用户会期望,公共仓库中的代理不会泄露无关的私有仓库内容。
- 权限粒度过粗,而且 GitHub 没有让安全配置变得简单或显而易见。
提示注入与(不可)解决的护栏
- 许多人认为提示注入是 LLM 的内在问题:用户输入本身就是指令,因此没有强有力的方法把“代码”和“数据”分离开。
- 与 SQL 注入的比较:
- 相似之处在于不受信任的输入会改变行为。
- 但不同于 SQL,并不存在类似预编译语句的机制;护栏只是更多输入文本,而且可以被覆盖。
- 也有人认为这更像社会工程:你只能通过流程和访问控制来缓解,而不是“修复”模型本身。
权限、架构与缓解措施
- 广泛认同的观点是:唯一真正的防御是架构层面的:
- 让代理使用与提示用户相同或更严格的权限;绝不要拥有“root”/组织级访问权限。
- 将代理限定在单个仓库或狭义定义的工作流中;使用不同 token 对工作流进行分段。
- 即使代理能读取私有数据,也要限制其处理公开输入时的写入权限。
- 将代理放入沙箱并赋予其自己的凭证;把它们当作不受信任的用户。
- 也有人建议为每个提示/工作流提供更好的权限 UI,以及更细粒度的 GitHub token。
对 GitHub、云和 AI 集成的信任
- 对 GitHub/Microsoft 持怀疑态度:
- 有人认为“无处不在的 AI”是投资者压力驱动的结果,导致功能仓促上线且不安全。
- 也有人担心,私有仓库数据会被用于 Copilot 训练,除非明确选择退出。
- 一个显眼的子群体主张转向自托管代码托管平台(Forgejo、Codeberg、裸 git),以避开 AI 集成并重新获得控制权。
更广泛的反思
- 几位评论者把这看作安全文化薄弱的又一个例子(“刑事级疏忽”“YOLO”式发布)。
- 共识主题:
- 应把 LLM 当作另一层 UI,而不是特权后端。
- 不能依赖模型层面的护栏;只有硬性安全边界和最小权限设计才能实质性降低风险。