乐于分享
好东西不私藏

斯坦福大学现代软件开发课程Week 6——一行隐藏代码接管了GitHub Copilot

斯坦福大学现代软件开发课程Week 6——一行隐藏代码接管了GitHub Copilot

跟着斯坦福 CS146S 学 AI Agent 开发,Week 6 的主题是「AI 安全与测试」——客座嘉宾 Semgrep CEO Isaac Evans。这周学到的最大冲击不是技术细节,而是一个事实:你每天在用的 AI 编程工具,本身就可能是攻击入口。一个藏在代码文件里的隐形指令,就能让 Copilot 接管你的电脑。

上周 Week 5 学的是 Warp CEO 的「编码制度」——怎么让一个团队都用好 AI,见:斯坦福大学现代软件开发课程Week 5:Warp CEO 的编码制度——每个任务必须从 Prompt 开始

Week 6 换了个方向:不是怎么用好 AI,而是用 AI 的时候怎么不被坑

这周的客座嘉宾 Isaac Evans 是 Semgrep 的 CEO。Semgrep 做的是代码安全扫描工具——专门帮你找代码里的安全漏洞。他来斯坦福讲的核心问题是:当 AI 帮你写了大部分代码之后,谁来保证这些代码是安全的?

答案比我预想的复杂得多。

01你的 AI 搭档,可能是黑客的后门

先说一个今年真实发生的安全事件。

安全研究员在 GitHub Copilot 里发现了一个远程代码执行漏洞(CVE-2025-53773)。攻击过程是这样的:

Step 1 攻击者在一个源代码文件里嵌入一段肉眼看不见的隐藏指令(用 Unicode 不可见字符)

Step 2 你用 Copilot 打开这个文件,随便问了个问题

Step 3 Copilot 读到了隐藏指令,偷偷在你的项目配置文件里加了一行:"chat.tools.autoApprove": true

Step 4 这行配置让 Copilot 进入了"YOLO 模式"——自动批准所有操作,不再弹确认框

Step 5 攻击者通过 Copilot 在你的电脑上执行任意命令

你的电脑就这样被接管了。 Windows、macOS、Linux 都能中招。

发现这个漏洞的研究员甚至演示了更极端的场景:通过 Copilot 下载恶意软件,把开发者的电脑加入僵尸网络——他管这叫"ZombAI"。

这个漏洞已经修复了。但它暴露的问题没有修复:AI 工具能读文件、能写文件、能执行命令——如果有人在 AI 读到的内容里埋了恶意指令,AI 就可能变成攻击者的提线木偶。

课程 Slides 把 AI 时代的新攻击方式分成了四类:

攻击类型
一句话解释
通俗理解
Prompt Injection
提示注入
在 AI 会读到的内容里埋隐藏指令
在信件里夹了一张纸条,收件人看不到,但 AI 会照做
Tool Misuse
工具滥用
骗 AI 滥用它能调用的工具
AI 手里有钥匙,被骗去开了不该开的门
Code Attack
代码攻击
利用 AI 的代码执行能力搞破坏
AI 能跑命令,被劫持后替黑客跑了恶意命令
Intent Breaking
意图劫持
悄悄改变 AI 的执行计划
AI 本来在帮你干活,中途被拐去干了别的

这四种攻击有一个共同点,跟传统网络攻击完全不同:

传统攻击:黑客 → 你的服务器

AI 时代的攻击:黑客 → AI 读到的内容 → AI → 你的电脑

你不是旁观者,你是攻击链的传导者。你打开一个被污染的文件、引用一个被注入的网页——这些日常操作就能触发攻击。

02AI 能帮你找安全漏洞吗?能,但别太指望

安全威胁变多了,好消息是检测能力也在变强。

传统的安全检测工具有三种,课上用了一个很直观的分类:

SAST(静态分析):不运行代码,直接扫描源代码找危险写法。像看设计图纸找隐患。

DAST(动态分析):把程序跑起来,从外面模拟黑客攻击。像派人去撞门踹窗。

SCA(成分分析):检查你用的第三方库有没有已知漏洞。像检查食材有没有毒。

这三种方法有一个共同局限:本质上都是模式匹配——拿着一本"通缉犯照片册"去认脸,照片册里没有的就认不出来。

AI 理解代码的"意思",不只是匹配模式。那 AI 能不能做得更好?

Semgrep 团队做了一个认真的实验:让 Claude Code 和 OpenAI Codex 去扫描 11 个真实的开源项目,找安全漏洞。不是教学用的小玩具,是真正在生产环境跑的、最大超过 25 万行代码的 Python 应用。然后人工审核了全部 445 条发现。

结果:

指标
Claude Code
OpenAI Codex
总共报了
330 条
115 条
其中真漏洞
46 个
21 个
真实发现率
14%
18%
误报率
86%
82%

每找到 1 个真漏洞,AI 同时报出 5-6 个假的。

我第一反应跟你可能一样:误报率这么高,不可用。

但有一个容易忽略的事实:这 67 个真漏洞里,大约 20 个是高危漏洞——越权访问、路径穿越、认证绕过这类一旦被利用就出大事的问题。这些漏洞在项目里存在了好几年,经过了无数次人工代码审查都没被发现。AI 用 114 美元跑了一遍就找到了。

还有一个更极端的案例。安全研究员 Sean Heelan 用 OpenAI 的 o3 模型,找到了 Linux 内核里的一个零日漏洞(CVE-2025-37899)。这是一个并发场景下的 use-after-free 漏洞——需要理解多个线程如何共享和释放内存对象,连很多资深安全工程师都不一定能发现。

但 Heelan 也说了实话:同样的 prompt 跑 100 次,只有 8 次成功。

AI 做安全检测的真实定位:不是银弹,是"便宜但需要人复核的安全实习生"。 用它的规模覆盖能力做第一道筛,人做第二道判断。

做产品经理的都知道一个经典矛盾——精确率和召回率的权衡:检测灵敏度调高了误报也高,调低了又会漏掉真问题。AI 安全检测面临的是一模一样的困境。

03学完这周,我做了一件事

Week 6 让我第一次认真想了一个问题:我自己的 AI 工作流安不安全?

我每天用 Cursor 跟 AI 搭档协作,给它配了一套规则体系(Rules 文件),接了 MCP Server 让它能读写文档。课上讲的那些攻击——提示注入、工具滥用——理论上都可能发生在我身上。

学完之后我做了一件事:让 AI 扫描了一遍我自己的 Rules 文件,检查有没有敏感信息泄露。

检查了什么:API Key、密码、数据库连接串、内网地址、个人信息、业务数据样本。

结果:没有发现密钥密码这类高风险项,但发现了一些中风险项——内部系统 URL、文档分享链接带访问参数、一些业务数据样本值。这些东西在本机使用没问题,但如果哪天被推到了公开仓库,就会泄露组织内部信息。

处理很简单:把个人信息做了模糊化,然后在全局 gitignore 里加了一行配置,让这个目录永远不会被意外上传。从扫描到修复,前后不到 5 分钟——但如果不是这周学了安全检测的知识,我根本不会想到要做。

3 个带走的安全常识

第一,人工确认是最后一道硬防线,别关掉。 Copilot 那个漏洞之所以能成功,关键一步是绕过了人工确认。只要"每个危险操作都需要你点确认"这个机制在,攻击链就断了。嫌烦也别关。

第二,AI 读到的外部内容可能被污染。 网页、文档、代码文件——这些内容里都可能被嵌入对 AI 的隐藏指令。不是说不能用,而是别让 AI 在没有你确认的情况下,基于外部内容执行敏感操作。

第三,安全检测的"Shift Left"理念——越早检查越便宜。 在代码写的时候就扫描(SAST),比等程序上线后再被黑客打一遍(DAST)便宜太多。不管你是写代码还是做产品,"早发现早修复"这个原则通用。

下周 Week 7 的主题是「Modern Software Support」——AI 代码审查。客座嘉宾是 Graphite 的 CPO Tomas Reimers。

如果你也在跟这门课,或者对 AI 安全有想法,评论区聊。


点击关注下方账号,学习AI的路上,带你一起进步~

如果你对AI也感兴趣,欢迎扫码加微信好友,备注"AI"就可将你拉入AI交流群,一起学习互相进步。