跳到主要内容

AI 修出来的洞,被另一个 AI 挖了出来

毒角兽
毒角兽

· 阅读约 5 分钟

先说结论:这事最讽刺的不是漏洞本身,是那个漏洞根本不是人写的。GitHub Copilot Autofix 合着提交,把安全写法改成了不安全写法,全程有 PR 编号可查。AI 修 bug 顺手埋了个 RCE,五天后另一个 AI 把它挖了出来。

经过不啰嗦。Snowflake 的 snowflake-connector-net 仓库里有个 jira_issue.yml 工作流,issue 一开就触发。6 月 18 日一个提交把原来 env 变量加 jq --arg 的安全解析方式删了,改成在 shell 里直接内插 ${{ github.event.issue.title }}。懂行的看到这行就知道结局:issue 标题塞个单引号,直接逃逸出字符串,任意命令执行。

任何 GitHub 用户。开个 issue。就完事。

更妙的是那个守门条件。工作流里有个 if 判断,检查 pull_request.user.login 是不是某机器人。可这工作流是 issue 事件触发的,issue 事件里这字段恒为 null,null 不等于机器人,条件恒为真。等于门口挂了张「非本楼住户请勿入内」,但整栋楼压根没有住户登记系统。这道守卫从一开始就没工作过,谁也没发现,直到 Copilot Autofix 把前面那道真锁拆了。

对,前面那道锁就是它拆的。

原来的写法不是什么高深技巧。env 变量加 jq --arg,GitHub 官方文档里明明白白写的防注入标准姿势。AI 生成的变更把它删了,换成教科书第一页就警告你别碰的内插写法。然后这个提交合进了 Snowflake 的公开仓库,带个规规矩矩的工单号标题,看起来和人类工程师的日常提交没有任何区别。

「AI 辅助,效率提升」——提升到哪去了? 😉

再说挖掘方。Wiz 的 Red Agent,一个自主跑的安全研究 agent,在 HackerOne 上扫 Snowflake 的公开仓库。这货第一次构造载荷用 # 注释,直接 bash EOF 报错。然后它自己调整,改用引号闭合 shell 块,成功外带回调,拿到 Jira API 令牌、邮箱、基础 URL,一整套凭证。

第一次失败、自主纠错、第二次成功。这个细节我看了两遍,因为它比我见过的大多数「全自动安全测试」演示都诚实。演示视频里的 agent 从不踩坑,坑都是提前排好的。这次是真踩了,真爬出来了。

回调 IP 是 20.106.182.197,GitHub Actions runner。令牌挂在 [email protected] 名下,能读工程、安全合规、漏洞赏金几个项目的数据。也就是说五天窗口期内,任何路过的 GitHub 用户理论上都能拿到同样的东西。

五天。6 月 18 日引入,6 月 23 日 Wiz 报告,当天修复,修法也很老实——env 加 jq --arg 原样装回去。6 月 24 日轮换令牌。审计日志确认窗口期内没有第三方访问,异常查询全是 Wiz 自己的测试 IP。

所以这波不冤,Snowflake 的响应速度和善后没得挑。

但真正该聊的不是 Snowflake。是接下来每个仓库都要面对的问题:你们合进去的 Copilot Autofix 建议改了多少行 workflow?谁 review 的?review 的人看得懂 ${{ }} 内插和 env 传递的区别吗?

我猜大部分看不懂。不是能力问题,是注意力问题。AI 提交的改动看起来太正常了——工单号、简洁的 diff、合理的提交说明,全套伪装成低风险日常维护。人类 reviewer 对这种提交的警惕性是最低的。

危险的不是 AI 写出烂代码。烂代码一眼就能看出来。危险的是 AI 写出看起来无害的烂代码。

这里刹一脚,别把话说满:Copilot Autofix 这类工具修过的漏洞肯定比埋过的多,这一个案例说明的是「AI 生成改动也需要安全审计」,不是「AI 生成改动都是雷」。单案例推全体,那是通稿干的事,我不干。

但趋势骗不了人。AI 写代码的比例在涨,AI 审代码的速度在涨,唯独人类注意力没涨。这次是 agent 挖出了 agent 埋的雷,结局皆大欢喜。下次挖雷的不是 Wiz 的研究工具,是别人的红队呢?窗口期就不是五天了。

7 月 25 日公开披露,距修复满 30 天,流程干净利落。Snowflake 说要和 Wiz 合作向行业分享经验。我倒希望他们分享的不是「我们如何快速响应」,而是「我们如何让一个 AI 生成的 workflow 改动在合入前被人看了一眼」。前者是公关稿,后者才是这五天真正教给行业的东西。

锐评评分卡:漏洞本身中等严重度,窗口短,无实际泄漏,响应满分。但这个案例的标本价值比严重度高——它是第一批被完整记录下来的「AI 埋雷、AI 排雷」闭环样本。Copilot Autofix 这波真冤吗?不冤,安全写法摆在那它非要换,实打实的回退。冤的是后面所有要 review AI diff 的人,工作量从这起只会往上走。以后仓库里再合进带 Autofix 署名的 workflow 改动,先照一照再说。别等下一个 agent 替你发现。

毒角兽
毒角兽

拿到新工具先上手拆一遍,官方通稿信一半留一半,实测说话。

查看主页 →