一个AI助手,用几句提示词,就把两款服役40年的文本编辑器扒了个底朝天。Vim和GNU Emacs的远程代码执行漏洞,触发条件简单到离谱:打开文件。
这事是网络安全公司Calif的研究员Hung Nguyen干的。他专门做AI红队测试,这次让Claude分析Vim源码,找"打开文件就能触发的RCE零日漏洞"。结果AI真找到了——藏在modeline处理逻辑里的沙箱逃逸。
Modeline是Vim文件开头的一段配置文本,告诉编辑器怎么渲染这个文件。本来设计得很贴心,比如指定缩进宽度、语法高亮。但Claude发现,这里的安全检查有漏洞,嵌在文件里的代码能突破沙箱,以当前用户权限执行任意命令。
影响范围:Vim 9.2.0271及之前所有版本。没有CVE编号,因为补丁已经发了——Vim团队收到报告后,在9.2.0272版本里修掉了。
官方公告写得直白:"攻击者只要能让人打开一个特制文件,就能拿到运行Vim的用户权限。"
GNU Emacs那边更麻烦。Claude同样找到了RCE路径,但到现在还没修。Emacs维护者的态度是:这锅Git背。
Emacs的"甩锅"逻辑,用户买单
漏洞出在Emacs的版本控制集成(vc-git)。打开文件时,vc-refresh-state函数会触发Git操作,Git去读.git/config,config里可以定义core.fsmonitor程序——攻击者塞进去的恶意脚本就这么跑起来了。
Nguyen设计的攻击场景很日常:一个压缩包,里面藏着.git/目录和改过配置的config文件。用户解压、用Emacs打开里面的文本文件,payload静默执行,界面上看不出任何异常。
Emacs维护者的技术辩解成立吗?确实,直接执行命令的是Git,不是Emacs本身。但用户感知不到这层区分,他们只知道"打开文件电脑就中招了"。
这种责任切割在开源社区很常见。2014年Shellshock漏洞爆发时,Bash和系统发行商之间也有过类似扯皮。最后往往是用户承担后果,因为攻击者不care你的架构图。
AI找漏洞,正在改写安全行业的成本公式
这次事件最刺眼的地方在于效率。传统漏洞挖掘需要研究者熟读数十万行C代码,理解内存管理、字符串处理的每个边角。Claude几分钟内完成了源码分析和漏洞定位,还顺手生成了多个PoC利用版本,并给出修复建议。
Calif公司的业务方向很说明问题:AI红队测试、安全工程。他们把大模型当成放大器,让单个研究员的覆盖面和深度都提升一个数量级。
但别急着喊"AI要取代安全研究员"。Claude能找到漏洞,是因为Nguyen的提示词足够精准——"RCE零日""打开文件触发"。这相当于给AI划了搜索范围。没有领域知识的人,连该问什么都不知道。
更现实的图景是分层:AI负责地毯式扫描和初筛,人类研究员做验证、构造利用链、评估实际影响。Vim的补丁从报告到发布速度很快,说明维护者拿到AI输出后,人工复核和修复的效率才是关键瓶颈。
老工具的债,谁来还
Vim和Emacs的设计年代,"打开本地文件"被视为安全边界内的操作。Modeline、vc-git这些功能都是为了让开发者工作流更顺滑,没人预料到供应链攻击会进化到这种粒度。
现在的攻击面完全不同。npm包、Docker镜像、邮件附件、共享文档——任何文件都可能来自不可信源头。编辑器作为开发者每天接触的第一道关卡,成了理想的跳板。
Vim选择了修复,Emacs选择了推诿。两种态度背后是不同的维护压力:Vim的代码库相对集中,Bram Moolenaar去世后的新维护团队需要证明治理能力的连续性;GNU Emacs作为FSF旗舰项目,决策流程更官僚,对"非自身bug"的认定也更固执。
用户能做什么?升级Vim到9.2.0272以上版本。Emacs用户暂时无解,只能避免打开来源不明的文件,或者在配置里禁用vc-git集成——但这会牺牲版本控制便利。
一个讽刺的细节:这两款编辑器都标榜"可编程""高度定制",这种灵活性恰恰成了攻击载体。Modeline和vc-git本质上都是"打开文件就执行代码"的设计,区别只在于执行环境有没有被正确隔离。
Claude找到这两个漏洞,某种程度上是AI在帮人类审计技术债。Vim和Emacs的代码里还有多少类似的设计假设,已经跟不上2024年的威胁模型?
没人知道答案。但攻击者已经在用同样的AI工具扫描了。
热门跟贴