Copilot 云代理是一个自主代理,能够访问你的代码并向你的仓库推送更改。这会带来一定的风险。
在可能的情况下,GitHub 已采取相应的缓解措施。这为 Copilot 云代理提供了坚实的内置安全防护基础,你可以通过遵循最佳实践指南进行补充。
未经验证的代码可能引入漏洞
默认情况下,Copilot 云代理会检查其生成的代码是否存在安全问题,并使用 Copilot 代码审查对代码进行二次评估。它会在完成 pull request 之前尝试解决发现的问题。此举提升了代码质量,并降低了 Copilot 云代理生成的代码引入硬编码密钥、不安全依赖以及其他漏洞等问题的可能性。Copilot 云代理的安全验证 不需要 GitHub Secret Protection、GitHub Code Security 或 GitHub Advanced Security 许可证。
- CodeQL 用于识别代码安全问题。
- 新引入的依赖会在 GitHub Advisory Database 中进行检查,以查找恶意软件通报以及 CVSS 评级为高或严重的漏洞。
- Secret scanning(机密扫描) 用于检测 API 密钥、令牌及其他机密等敏感信息。
- 可以在会话日志中查看 Copilot 云代理执行的分析细节和采取的操作。参见 跟踪 GitHub Copilot 会话。
可选地,你可以禁用 Copilot 云代理使用的一个或多个代码质量和安全验证工具。参见 配置 GitHub Copilot 云代理的设置。
Copilot 云代理可以向你的仓库推送代码更改
为降低此风险,GitHub
- 限制能够触发代理的用户。 只有对仓库拥有写入权限的用户才能触发 Copilot 云代理工作。没有写入权限的用户的评论永远不会呈现给代理。
- 限制代理可推送的分支。 Copilot 云代理只能推送到单一分支。当通过在已有 pull request 中提及
@copilot来触发代理时,Copilot 具备对该 pull request 所在分支的写入权限。其他情况下,会为 Copilot 创建一个新的copilot/分支,代理只能向该分支推送。该代理同样受工作仓库的分支保护和必需检查的约束。 - 限制代理的凭据。 Copilot 云代理只能执行简单的推送操作,不能直接运行
git push或其他 Git 命令。 - 合并前需人工审查。 Copilot 云代理创建的草稿 pull request 必须经人工审查后才能合并。Copilot 云代理无法将其 pull request 标记为“Ready for review”,也不能批准或合并 pull request。
- 限制 GitHub Actions 工作流的运行。 默认情况下,工作流在 Copilot 云代理的代码经过审查且具有写入权限的用户点击 Approve and run workflows 按钮后才会触发。你也可以选择配置 Copilot 使工作流自动运行。参见 审查 GitHub Copilot 创建的 pull request。
- 阻止请求 Copilot 云代理创建 pull request 的用户对其进行批准。 这保持了“必需批准”规则和分支保护中预期的控制。参见 规则集可用规则。
Copilot 云代理能够访问敏感信息
Copilot 云代理可以访问代码及其他敏感信息,可能会因意外或恶意用户输入而泄露这些信息。
为降低此风险,GitHub 限制了 Copilot 云代理的互联网访问。参见 自定义或禁用 GitHub Copilot 云代理的防火墙。
AI 提示可能受到注入攻击的威胁
用户可以在指派给 Copilot 云代理的 issue 或给 Copilot 云代理留下的评论中嵌入隐藏信息,构成 提示注入。
为降低此风险,GitHub 在将用户输入传递给 Copilot 云代理之前过滤隐藏字符:例如,在 issue 或 pull request 评论中以 HTML 注释形式输入的文本不会传递给 Copilot 云代理。
管理员可能看不到代理的工作情况
为降低此风险,Copilot 云代理被设计为可审计且可追踪的。
- Copilot 云代理的提交由 Copilot 署名,指派 issue 或请求更改 pull request 的开发者被标记为共同作者。这便于识别由 Copilot 云代理生成的代码以及任务的发起人。
- Copilot 云代理的提交带有签名,因而在 GitHub 上显示为“Verified”。这保证了提交确实由 Copilot 云代理完成且未被篡改。
- 会话日志和审计日志事件对管理员可用。
- 每个由代理生成的提交的提交信息都会包含指向该代理会话日志的链接,用于代码审查和审计。参见 跟踪 GitHub Copilot 会话。