Copilot Autofix 引入漏洞,AI 代理数天内攻破 Snowflake Jira
Wiz 研究的 AI「Red Agent」发现 Snowflake 公开仓库因 Copilot Autofix 自动提交…
云安全公司 Wiz Research 披露,其自主运行的 AI 安全研究工具「Red Agent」在 Snowflake 的一个公开 GitHub 仓库中发现了一处脚本注入漏洞。该漏洞由 GitHub Copilot 的「Autofix」AI 自动修复功能在 2026 年 6 月 18 日的一次提交中意外引入,仅存在五天便被发现和验证。事件凸显了 AI 编程助手可能在不经意间引入高危代码模式,而 AI 代理又能在极短时间内自主挖掘并利用这些缺陷。
漏洞从何而来
Wiz 的 CI/CD 扫描能力在 Snowflake 的 snowflakedb/snowflake-connector-net 仓库中识别出 jira_issue.yml 工作流存在命令注入风险:该工作流在 issues: opened 时触发,并将 GitHub Issue 标题直接通过 ${{ github.event.issue.title }} 插入 shell 脚本。攻击者只需打开一个标题经过精心构造的 Issue,即可让 GitHub Actions Runner 执行任意命令。
更具警示意义的是,这一不安全的写法并非历史遗留。提交 4a1b8ce(PR #1218,标题「SNOW-2069227: Update jira workflows」)由 Copilot Autofix 共同署名(co-authored),自动修改将仓库原本通过 env: 变量与 jq 安全解析 JSON 的模式替换为直接的字符串插值,等同于 AI「自动修复」亲手植入了注入向量。
「安全门」形同虚设
工作流中存在一条 if: 条件,意图将触发者限定为特定机器人账户。然而在 issues 事件下,github.event.pull_request 恒为 null,条件被化简为 (null != 'whitesource-for-github-com[bot]'),对任意 GitHub 用户而言结果恒为真,等于没有拦截。
AI 代理自主完成利用
Wiz 的 Red Agent 在构造利用载荷时,先用 # 注释尝试外发凭据,但因 # 同时吞掉了 TITLE=$(...) 的右括号而触发 bash 语法错误。Red Agent 并未停止,而是自主分析错误原因,将载荷调整为 ; echo ' 正确闭合 shell 语法,成功收到来自 Azure IP 20.106.182.197 的回连回调,内容为 base64 编码的 Jira 凭据。该令牌以 qa@snowflake.net 身份登录 Snowflake 的 Jira 实例,可读取其工程、安全合规与漏洞赏金跟踪项目。
处置与时间线
- 2026-06-18:Copilot Autofix 提交引入漏洞的 PR。
- 2026-06-23:Wiz 完成负责任披露;Snowflake 同日修复工作流(
1dc7766,PR #1402),恢复env:+jq --arg的安全解析模式,并轮换受影响凭据。 - 审计日志核实:暴露窗口内仅有 Wiz 的测试 IP 访问过相关端点,PoC 阶段访问的数据已被安全删除。
给 AI 编程与安全团队的启示
- AI 自动生成的代码必须与人工代码一样接受静态分析与安全审查,不能因其「自动」就默认安全。
- 自动发现窗口正在急剧缩短——本案从引入到被利用验证仅五天,运维侧需要更短的补丁周期与短生命周期凭据。
- 团队应设置防护栏,阻止 AI 代理将结构化数据解析器替换为直接的字符串插值,避免回退已被显式修复的不安全模式。
本案是首个被完整记录、由 AI 编程助手引入又被另一个 AI 代理自主攻破的生产级漏洞案例,为 AI 辅助开发的供应链安全敲响了具体而清晰的警钟。
