AI生成的GitHub Copilot自动修复导致Snowflake Jira安全事件

一个由GitHub Copilot生成的「自动修复」引入了脚本注入漏洞,该漏洞存在于Snowflake的公开仓库中,随后被一个自主的AI安全代理发现并利用。这一事件凸显了AI生成代码回归的严重风险:AI助手为了简化代码,移除了安全的编码模式,从而无意中制造了安全漏洞。

漏洞详情:AI驱动的回归

2026年6月,由 Copilot Autofix powered by AI(PR #1218)共同提交的代码被合并至 snowflakedb/snowflake-connector-net 仓库。AI助手将原本安全的模式(使用 env: 变量和 jq 进行结构化数据解析)替换为在GitHub Actions工作流(jira_issue.yml)中直接将问题标题作为字符串插入到shell脚本中。

这一更改将原本经过净化的输入模式转变为直接的脚本注入向量。GitHub问题标题中的单引号可突破 echo '...' 块,从而在GitHub Actions运行器上执行任意命令。

利用与自主发现

Wiz Research的「Red Agent」——一个自主的AI驱动安全工具,在漏洞代码引入后的五天内成功识别并利用了该漏洞。

攻击向量

该漏洞由 issues: opened 事件触发。由于工作流中存在缺陷的 if: 条件(检查空值:github.event.pull_request.user.login != 'whitesource-for-github-com[bot]'),安全门被错误地开放,允许任何未认证用户触发该工作流。

自主载荷调整

在利用过程中,Red Agent 展现了高级的自主能力。当其首次尝试使用标准注释字符(#)进行数据外泄时,因bash语法错误(EOF)失败。随后,该代理自主分析错误,并调整载荷,改用 ; echo ' 正确关闭shell块。这一调整使其成功外泄了base64编码的凭据。

影响与修复

外泄的令牌以 qa@snowflake.net 身份认证,使攻击者获得了对Snowflake内部Jira门户的读取权限,包括工程、安全合规和漏洞赏金追踪项目。

修复措施

Snowflake于2026年6月23日响应披露,采取了以下行动:

  • 立即修补:修复了存在漏洞的工作流(提交 1dc7766,PR #1402),恢复了安全的 env: + jq --arg 解析模式。
  • 凭据轮换:撤销并轮换了被泄露的Jira令牌。
  • 取证验证:审计日志确认在暴露期间无外部第三方访问该端点;仅检测到Wiz的测试IP。

技术启示与行业洞察

AI代码生成与审查

AI编码工具基于概率模式运行,通常缺乏为何选择安全模式的历史背景。此事件表明,AI生成的PR必须接受与人工编写代码同等甚至更严格的安全部署审查。

"更大的问题是,AI让引入变更的成本变得极低,而审查这些变更的成本并未显著下降。瓶颈正从代码生成转移到代码验证。"

「LGTM」文化的危险性

社区讨论强调,危险不仅在于AI本身,更在于人工审查的失效。"看起来没问题"(LGTM)的批量批准文化因AI而加剧,因为大量低价值的技术债务修复——人类原本可能忽略的——现在正被合并进代码库。

AI代理的防护机制

为防止AI安全回归,组织应实施防护机制,明确阻止AI代理在shell脚本中用直接字符串拼接替换结构化数据解析器(如 jq)。此外,应在CI/CD流水线中使用静态分析工具(如 zizmor 用于GitHub Actions)来在合并前检测模板注入漏洞。

Sources

相关