AI生成的GitHub Copilot "Autofix"功能致Snowflake的Jira遭入侵

Hacker News Top 新闻

摘要

Wiz Research的AI驱动Red Agent在Snowflake的代码库中发现了一个由GitHub Copilot的Autofix功能无意引入的关键GitHub Actions漏洞,该漏洞允许未经授权访问Snowflake的Jira门户。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/17 15:51

# Wiz Red Agent 通过AI生成的 GitHub Copilot “自动修复”功能进入 Snowflake 内部 Jira 系统 来源:https://www.wiz.io/blog/red-agent-snowflake-copilot-cicd-bug 作为通过 Snowflake HackerOne 漏洞披露计划进行的持续安全研究的一部分,Wiz 研究部门的 "Red Agent"——一款自主的、AI驱动的安全研究工具——在 Snowflake 的一个公开仓库中发现了一个关键的 GitHub Actions 工作流漏洞。 这一事件凸显了软件开发中一个迅速浮现的现实:**AI 编码助手如何可能无意中引入工作流注入漏洞,以及自动化 AI 代理如何能在实际环境中迅速发现这些漏洞。** Wiz 于 2026 年 6 月 23 日进行负责任的披露后,Snowflake 当天即修复了该漏洞,轮换了受影响的凭证,并通过详细的审计日志确认在暴露窗口期仅有 Wiz 一个操作者。Wiz 确认,在概念验证测试期间访问的所有数据均已安全删除。 ## **概要** Wiz Red Agent 在 `snowflakedb/snowflake-connector-net` (https://github.com/snowflakedb/snowflake-connector-net) 仓库中识别出一个脚本注入漏洞。该漏洞允许未经验证的用户通过创建一个带有特殊构造标题的 GitHub issue,在 GitHub Actions 运行器中执行任意命令。 关键的是,该漏洞是在 2026 年 6 月 18 日——即发现前仅五天——通过一个由 `Copilot Autofix powered by AI` 共同参与的提交引入的(PR #1218 (https://github.com/snowflakedb/snowflake-connector-net/pull/1218))。该 AI 助手移除了仓库现有的输入净化模式,并用 shell 脚本中的直接字符串替换。 屏幕截图展示通过窃取的令牌访问 Snowflake 的 Jira 门户。 ## **暴露过程详解** ## 发现 Wiz Red Agent 的 CI/CD 功能扫描了 Snowflake 的 GitHub 组织,并将 `snowflakedb/snowflake-connector-net` (https://github.com/snowflakedb/snowflake-connector-net) 中的 `jira_issue.yml` (https://github.com/snowflakedb/snowflake-connector-net/blob/4a1b8cecd65b899540e4324715557d6b080ddeb5/.github/workflows/jira_issue.yml) 工作流标记为易受通过 `run:` 块中不受信任输入进行的脚本注入攻击。 **AI 助手 (Github Copilot) 的更改** 该工作流在 `issues: opened` 时触发——意味着任何 GitHub 用户都可以通过创建一个 issue 来触发它——并且将攻击者控制的 issue 标题直接插入到 shell 脚本中: `sed` 转义发生在 GitHub 的模板扩展之后,标题中的单引号会破坏 `echo '...'` 的结构,从而允许任意命令执行。 该可注入模式仅在几天前,即 2026 年 6 月 18 日的提交 4a1b8ce (https://github.com/snowflakedb/snowflake-connector-net/commit/4a1b8cecd65b899540e4324715557d6b080ddeb5)(PR #1218: “SNOW-2069227: Update jira workflows” (https://github.com/snowflakedb/snowflake-connector-net/pull/1218))中引入,该提交由 `Copilot Autofix powered by AI` 共同参与。 引入脆弱模式的提交 它移除了仓库原有的安全模式,该模式将 issue 标题通过 `env:` 变量传递,并使用 `jq` 构建 JSON 负载。相反,它使用了上面展示的直接 `{{ github.event.issue.title }}` 插值。换言之,一个 AI “自动修复”提交创造了这个注入向量。 引入脆弱模式的代码更改 ## 开放的“安全门” 该工作流有一个看似具有保护性的 `if:` 条件: 然而,在 issue 事件中,`github.event.pull_request` 始终为 **null**。 因此,该条件简化为 (`null != 'whitesource-for-github-com[bot]'`)。这始终为真,因此每个 GitHub 用户都能通过该检查。 开放的“安全门” ## 利用 我们构造了一个 issue 标题,在模板扩展后,它能跳出 echo 字符串并通过带外回调窃取 Jira 凭证: 关键的是,当 Red Agent 的 cicd 功能最初尝试使用标准注释字符 (`#`) 进行外泄时,运行器返回了 bash 语法错误,因为注释吞噬了 `TITLE=$(...)` 的右括号。Red Agent 并未停止或失败,而是: 1. 自主分析了语法执行错误 2. 调整了其负载以使用 `; echo '` 来正确关闭 shell 块,以及 3. 成功接收到了带外回调 几秒钟内,我们的监听器就收到来自一个 GitHub Actions 运行器(Azure IP `20.106.182.197`)包含 base64 编码凭证的回调。 在 Issue 标题中包含负载的概念验证 PR **注意:** 我们最初的尝试使用了 `#` 来注释掉行的其余部分,这导致了意外的 EOF bash 错误,因为它也吃掉了 `TITLE=$(...)` 的闭合 `)`。解决方法是使用 `; echo '` 来正确关闭 shell 语法。 显示成功利用的工作流日志 被窃取的令牌链接到 [email protected] 被窃取的令牌以 `[email protected]` 身份认证到 `snowflakecomputing.atlassian.net`,获得了对 Snowflake 工程、安全合规性和漏洞赏金跟踪项目的跨项目读取访问权限。 ## **修复与取证** 1. **当日修复:** Snowflake 于 2026 年 6 月 23 日修补了该工作流(提交 1dc7766 (https://github.com/snowflakedb/snowflake-connector-net/commit/1dc7766),PR #1402),完全恢复了安全的 `env:` 变量和 `jq --arg` 解析模式。 2. **凭证撤销:** 相关的 JIRA 令牌已被撤销并轮换。 3. **取证验证:** 全面的审计日志分析证实,在为期 5 天的暴露窗口期内,没有外部第三方访问该端点。所有异常查询均严格匹配到 Wiz 的测试 IP。 ## **关键要点** - **AI 代码生成需要严格监督:** AI 编码工具基于概率模式预测代码,这可能无意中重新引入已弃用或不安全的 shell 模式。AI 生成的 PR 必须接受与人工代码相同的静态分析和安全审查。 - **发现窗口期缩短:** 该漏洞在活跃仅五天后就被自动化代理发现并验证。安全运营必须适应这样一个环境:自动化发现可在数小时内完成,这要求快速的补丁周期和短生命周期的凭证。 - **防止 AI 安全性回退:** 自动化 AI 助手通常缺乏关于为何选择特定代码模式的历史上下文。在本次事件中,一个自动化 PR 移除了原本为防止 shell 注入而明确实现的、安全的 `env:` + `jq` 解析模式。安全团队必须实施护栏,阻止 AI 代理用直接字符串插值替换结构化数据解析器。 ## **披露时间线** - **2026 年 6 月 18 日 -** 脚本注入模式在 `jira_issue.yml` 中由提交 `4a1b8ce`(PR #1218)引入,该提交由 `Copilot Autofix powered by AI` 共同参与。 - **2026 年 6 月 23 日** - Wiz 通过 HackerOne 识别、利用并向 Snowflake 报告了该漏洞(报告编号 #3819931)。 - **2026 年 6 月 23 日** - 向 Snowflake 安全团队发送了 Slack 通知。 - **2026 年 6 月 23 日(同日)** - Snowflake 修补了易受脚本注入攻击的工作流(提交 1dc7766 (https://github.com/snowflakedb/snowflake-connector-net/commit/1dc7766),PR #1402 (https://github.com/snowflakedb/snowflake-connector-net/pull/1402)),恢复了安全的 `env:` + `jq --arg` 模式。 - **2026 年 6 月 24 日** - Jira 令牌轮换完成。 - **2026 年 7 月 25 日** - 公开披露截止日期(根据 Snowflake 的披露政策,为问题解决后 30 天,即 6 月 25 日后)。 ## **Snowflake 的回应** > Snowflake 感谢 Wiz 通过我们的漏洞披露和漏洞赏金计划 HackerOne,对这些发现进行的负责任报告和协作。Wiz 研究部门报告了 Snowflake 一个公开 GitHub 仓库中的安全漏洞。该报告于 2026 年 6 月 23 日收到,我们立即进行了调查和修复,调查未发现未经授权访问的证据。保护我们的系统仍然是首要任务,我们致力于持续加强我们的软件开发和安全实践。我们正与 Wiz 合作,与更广泛的行业分享这些经验,以鼓励广泛采用这些安全最佳实践。

相似文章

GitLost:我们诱骗GitHub的AI代理泄露私有仓库

Hacker News Top

Noma Labs发现GitHub的Agentic Workflows中存在一个严重的提示注入漏洞,允许未经身份验证的攻击者通过在同一组织的公共仓库中发布精心构造的GitHub Issue,从私有仓库中窃取数据。

GitHub 正式推出面向代码扫描警报的 Agentic Autofix 功能

Reddit r/artificial

GitHub 宣布 Agentic Autofix 正式全面上市(GA),面向 Enterprise Cloud 的 Code Security 与 Advanced Security 客户:将代码扫描告警指派给 Copilot 后,它会探索相关文件、提出修复建议、重新运行 CodeQL,并创建草稿拉取请求(PR)供人工审查。该功能仍属于审查工作流,不会自动合并,并会消耗 AI 额度和 Actions 运行分钟数。

又一个影响开源软件的AI安全外部性

Reddit r/artificial

作者警告称,AI生成的拉取请求(PR)和AI驱动的安全报告给开源项目带来了外部性:一家前沿AI实验室僵化的90天漏洞披露政策,加上大量基本无效的安全报告激增,几乎迫使Apache Spark维护者在发布中携带一个未修复的已知漏洞与任由该实验室在没有修复版本的情况下公开披露之间做出选择。