返回资讯中心
外部精选
软件工程
#开发者实时流

GitHub 推出 enclave 安全机制,限制 AI 代理跨仓库泄露私有代码

来源标题:Limit what agents learn about private repos with enclaves

GitHub 为 Agentic Workflows 推出实验性安全机制 enclave,限制 AI 代理在跨仓库工作时相互传递的信息。此前 Noma Labs 披露的 GitLost 攻击中,具备公私仓库读写权限的代理被恶意公开 issue 诱导,将私有仓库内容发布到公开评论中。该攻击无需突破沙箱或窃取令牌,只需滥用代理已有权限即可完成。

Hacker News 最新gmays2026/11/6 · 今天30 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

返回文章列表 用 enclave 限制 agent 对私有仓库的了解 Enclave 是跨仓库 GitHub Agentic Workflows 的一项新安全原语。Enclave 让 agent 可以在不同仓库上工作,同时限制它们彼此之间能说些什么。

GitLost 披露事件展示了,一个能访问公开和私有仓库的 agent 如何泄露私有数据。Noma Labs 的研究人员创建了一个 agent,授权它读取整个组织内的公开和私有仓库,并在一个公开仓库中回应 issue。然后他们开了一个恶意的公开 issue,诱使该 agent 在公开评论中贴出了私有仓库的内容。

这次攻击不需要突破沙箱,也不需要窃取认证 token。一旦 agent 拥有读取私有仓库、写入公开仓库的权限,攻击者就说服它以维护者不打算也不希望的方式使用了这些权限。

GitHub Agentic Workflows 在上周的 GitHub Universe 上正式 GA(Generally Available),此次发布包含一种新方法,用于在跨仓库工作流中防止类似 GitLost 的私有到公开泄露。我们的方案是一种实验性安全原语,称为 enclave,它允许 agent 访问私有数据,并以确定性的方式约束它能对这些数据说些什么。

Enclave 是一个一次性沙箱,允许 agentic workflow 中的主 agent 将自己与另一个仓库中的工作隔离开来。Enclave 的目的是防止主 agent 看到私有信息,从而避免它无意中过度分享。军事和情报机构通过 compartmentalization(隔舱化)来践行 need-to-know(按需知悉)原则,使得执行某项任务的人员不一定能访问另一项任务的信息。即便是拥有高安全许可的人,也不会自动获得每一项机密行动的访问权。Enclave 在 agent 之间实现了同样的隔舱化。

一个 agentic workflow 的主 agent 只能访问它运行所在的仓库,但它可以用 enclave 在自己的仓库之外执行工作。主 agent 通过指定 enclave 的仓库、要执行的计算以及响应 schema 来启动 enclave。主 agent 与 enclave 之间的交互由一个可信 broker 处理,broker 负责校验主 agent 的启动请求、在隔离环境中运行 enclave,并校验 enclave 返回给主 agent 的响应。

与 FIDES 为 LLM 调用提供的受限输出 schema 类似,主 agent 为其 enclave 指定响应 schema。响应 schema 定义了 enclave 与主 agent 通信所使用的词汇表。Schema 通常限于布尔值、枚举、有界整数以及这些基础类型的结构化组合。Enclave 不能添加解释、附加文件或返回任意字符串。Broker 会对照 schema 检查每一个响应,拒绝任何超出 schema 的内容。

响应 schema 能携带的信息量受一个以 bit 计量的信息预算约束。工作流配置根据 enclave 仓库的敏感级别确定预算。例如,confidential 敏感级别允许每个仓库每次工作流运行 8 bit。

Broker 会校验主 agent 的响应 schema,确保它不能泄露超过工作流作者所预算的 bit 数。一个布尔值有两种可能取值,其成功结果可以传达 1 bit。在四个类别中做选择可以传达 2 bit。组合多个字段会增加可能的响应数量以及结果能携带的信息量。重要的是,schema 中始终保留 1 bit 用于错误。校验错误、运行时错误、预算溢出错误和超时错误都会置位该错误 bit。

工作流作者设定预算,而主 agent 定义 schema 的语义,并决定如何花掉可用预算。它可以询问某个 API 是否被使用、对兼容性进行分类,或请求一个有界计数。它选择字段名、允许值以及赋予这些值含义的任务指令。这种灵活性让 agent 能够针对手头的工作定制一个范围很窄的响应,同时不必获得对仓库的无限制访问。

在启动 enclave 之前,broker 会计算一个符合 schema 的响应所需的信息费用,包括受约束的状态通道和时序通道,并对照该仓库的剩余预算进行检查。这笔费用在执行前就被预留,而不是由返回的答案决定。同一次运行中,调用共享同一个按仓库记账的账本,因此主 agent 可以调整自己的问题,但不能通过选择新 schema 来增加或重置预算。如果某个 enclave 响应会超出余额,broker 会拒绝它。

Agentic workflows 支持两种 enclave 执行器:

Script enclave 在只读仓库快照上运行有界的 Python 程序,且没有网络访问。它们适用于确定性检查,例如某个文件是否存在、某个依赖是否出现在 manifest 中,或某个配置是否满足某条规则。

Agent enclave 为需要推理的任务运行一个独立的编码 agent。Agent enclave 可以检查某个实现,并判断某个已报告的 bug 是否适用。它的网络访问被限制在配置好的模型提供方路径,以及在显式启用时的一个受限 GitHub 工具接口。它不会获得通用的 GitHub 凭据或无限制的网络访问。

Enclave 在工作流 front matter 中声明。以下配置片段为同一个私有仓库启用了两种类型:

sandbox: agent: id: awf enclaves:

  • script: repos:
  • repo: myorg/private-service sensitivity: confidential timeout: 45
  • agent: model: gpt-5 repos:
  • repo: myorg/private-service sensitivity: confidential timeout: 180

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →