技术热点透视20260913:AI 编程 Agent 的沙箱,漏了
古董级程序员,前百度/微博工程师,现在关注 AI 工程化与开发者工具。
微信公众号「字与码」,记录技术思考与行业观察。
本文同步发布于 zicode.com

今天我们只讲一件事:AI 编程 Agent 的执行沙箱爆出了结构性漏洞。Manifold Security 的 GitSpawn 让 7 个主流 Agent 全线失守;安全初创公司 Accomplish 通报的「沙箱泄漏」则暴露出另一件事——同一类洞,Cursor 和 OpenAI 一周修完,Anthropic 花了约 50 天、30 个版本。这不是「又修了个 bug」,而是:Agent 已经坐到你的凭证旁边,而那道把它和外界隔开的闸门,本身是漏的。
01你让 Agent 打开一个看起来正常的开源仓库
先讲一个今天你完全可能遇到的场景。
同事丢来一个压缩包,说是某个开源项目的分支,让你帮忙看看那个诡异的报错。你解压,用 Claude Code 打开这个目录,想让它先跑一遍测试。它确实跑了——不过在它动手之前,Git 已经先跑了一段别人写好的 shell。你没有点过任何确认按钮,屏幕上什么提示都没有,因为它根本不需要你确认。
那段 shell 干什么,取决于写它的人有多贪。它可以只做一件事:把 ~/.ssh/id_rsa 和 ~/.aws/credentials 读出来,POST 到一个 IP 上。这一切发生的时间点,在你按下回车之前。
这不是推演,这是 Manifold Security 在 2026 年 9 月披露的漏洞类,名字叫 GitSpawn。
02一行 .git/config,绕过了整套权限设计
关键字段叫 core.fsmonitor。
Git 有个正经的性能优化:大仓库里 git status 扫全盘太慢,于是允许你指定一个「文件系统监控器」程序,让它告诉 Git 哪些文件变了。core.fsmonitor 的值就是这个程序的路径。功能是文档里写着的,不是 bug。
麻烦在两点。第一,这个值从仓库自己的 .git/config 里读——也就是说,仓库的作者可以直接决定「Git 要不要执行一个程序、执行哪一个」。第二,它不是唯一一个这类字段。OpenAI 给 Codex 发的几条 CVE 分别对应 core.fsmonitor、core.hooksPath,以及 attr.tree 配合 clean/process filter 的三条不同路径。Manifold 的说法很直白:若干个 Git 配置项,本质就是命令执行入口。
然后是把它和 Agent 接起来的最后一步:几乎所有命令行编程 Agent 在启动的头几百毫秒里,都会悄悄跑一次 git status 或 git diff,用来搞清楚自己在哪个分支、有哪些改动。这个行为本身合理,但它有两个致命性质——它是自动的,而且它发生在「这个仓库可不可信」这个问题被回答之前。
Claude Code 和 Hermes Agent 上,payload 在 workspace trust 弹窗被点「信任」之前就已经执行完;Qwen Code 更早,早到你还没登录;Grok Build 在你按第一个键的时候触发;Goose 是在你跑 goose review、它拼 diff 的时候。
Agent 的安全模型不是被攻破的,是被「绕过去」的——人点「信任」那道闸门,在 Git 跑命令时还没立起来
Manifold 那句话我很喜欢:Agent 的安全模型不是被攻破的,是被绕过去的。编程 Agent 的整套安全设计建立在一个前提上——Agent 提出命令,你批准,命令执行。GitSpawn 在这套设计底下点火,在对话开始之前。没有命令需要批准,因为 Agent 从来没决定要跑什么,是 Git 跑的。
有个细节值得记住:它不从 clone 传播。git clone、fetch、pull 都不会把源仓库的本地 config 带过来。它只在你「整块搬运目录」的时候传播——解压的压缩包、网络共享盘、云同步目录、U 盘。所以从 GitHub clone 一个陌生仓库,反而比同事发你一个 zip 更安全。这条反直觉的规则,值得写进团队文档。
还想提一句编号的混乱。不少二手报道把 Cursor 这次的修复记作 CVE-2026-48124。翻 MITRE 的记录,这个号讲的其实是 .claude/settings.local.json 里的钩子命令被无提示执行,是 Pillar Security 报的另一条路径;Cursor 的 fsmonitor 路径同样在 3.0.0 里修了,但当时 CVE 还挂着 pending。这不算大事,但它很能说明这一波披露的混乱程度——连修复对应哪个编号,业界的转述都对不齐。
03它已经坐在你的 SSH key 旁边了
为什么这比「又修了个 bug」严重?
因为 Agent 现在坐的位置,和你最敏感的东西是同一张桌子。一年前它还是个补全工具;现在它是这样一个进程:读你的源码,持有你的 Git 凭证,碰得到 ~/.ssh,环境变量里可能有云厂商的长期密钥,在你本机上的权限就是你的权限。你给它这个权限是有理由的——不然它没法提交、没法部署、没法调 API。
而那条 payload 是以你的身份、在你的沙箱之外、无提示跑起来的。Manifold 的原话是 “outside the sandbox, with no approval prompt and nothing on screen”。
这意味着两件事。第一,被投毒的仓库等于一个供应链入口。你拉一个 PR、接一个 bug bounty 提交、打开客户发来的工程,只要那个目录里有一个 .git,攻击者就已经在你的机器上拿到了一个执行点。Claude Code 单月 npm 下载量超过 7700 万次,这个暴露面不是一个公司的运维问题。
第二,这件事的性质是访问控制问题,不是代码质量问题。修它不需要重写沙箱架构,需要的是承认「Agent 是一个持有凭证的特权进程」。Manifold 给的修复小到有点羞辱人:把 git status 换成 git -c core.fsmonitor=false status。一个参数,没有架构重写。
一个 flag 的修复量,和后面要说的 50 天修复周期放在一起看,才是这件事最刺眼的地方。
04五十天和一周之间的距离
今年夏天,另一家还在隐身状态的安全初创公司 Accomplish,向三个厂商私下通报了同一类问题。创始人是 Or Hiltch、Amit Avner、Guy Zipori,Hiltch 是 CTO。
结果差得很远。按 Accomplish 的说法和相关报道:Cursor 那条在约一周内修了;报给 OpenAI 的两条也在约一周内修了,OpenAI 后来书面确认是 8 月完成的。Anthropic 那条代号 Beltdown,7 月中旬报告,当天完成分级,8 月上旬发了部分补丁,8 月下旬在 Claude Code 2.1.247 里完整修复——外界的表述是「约 50 天、约 30 个版本之后」。
Cursor / Codex 约一周,Anthropic 约 50 天、30 个版本——同一个洞,修补周期差近 50 倍
要公平地说,Anthropic 的修复质量不差:2.1.247 之后,harness 发出的所有 git 命令都会把 fsmonitor 置空。问题不在修得好不好,在修得有多快。
Hiltch 那句话,是这两个月我读到最刺耳的一句:
There’s a lot of talk about security now. It doesn’t really reflect in how they actually build products.
语境很有意思。说这话之前,他们刚在旧金山转了一圈,听了 OpenAI 总裁 Greg Brockman 在一场闭门会上讲 Astra 时代的新安全范式,听得很认真,然后回了特拉维夫,心里一点没轻松。他说这话当然有立场——他们做的就是这门生意。但这句话仍然成立,因为它指向的不是某一家的疏忽,而是一个结构:过去一年,Agent 的安全能力被快速做成了「基础设施级」的东西——沙箱、workspace trust、权限提示、classifier 拦截——但各家把这些东西做到什么程度,差得非常远。
一个具体例子。Claude Code 从 8 月 14 日起,Pro / Max / Team 的新会话默认进入 auto 模式,逐条确认被 classifier 拦截取代。方向是对的,逐条点确认人类根本点不过来。但它同时意味着,安全重心从「你批准了什么」移到了「harness 自己跑了什么」。当确认变少,harness 自己那几条 git 命令就从背景噪音变成了承重墙。Beltdown 就是这堵墙上的裂缝。
05既然按基础设施买它,就得按基础设施审它
先把观点说清楚,再说怎么落地。
第一,AI 编程 Agent 今天的定位是生产力基础设施,那就必须按基础设施的标准做安全评审。你不会允许一个第三方工具默默持有你的 SSH key、以你的权限在你机器上跑任意命令、还每周自动升级——你会让它过安全评审、定版本策略、接进 EDR。Agent 现在就是这样一个工具,只是采购流程把它当成了「IDE 插件」。IT 和安全团队至少要能回答三个问题:我们装了哪些 Agent、它们各自有什么访问权、谁负责升级。答不上来,就是没管。
第二,这一轮真正的信号是「同类问题在不同厂商反复出现」,而不是「某家出了个 bug」。Pillar Security 7 月做的「沙箱逃逸周」一共七条,分布在 Cursor、Codex CLI、Gemini CLI、Antigravity 四个产品、三家厂商;Cymulate 更早在 4 月就把这一类命名为 Configuration-Based Sandbox Escape。结构一致:沙箱管住的只是 Agent 那个进程,而 workspace 里 Agent 能写的东西,会被一堆当年假定「写它的是人类」的外部工具读取和执行。Pillar 有句话总结得比我好:Agent 的爆炸半径不是那个 Agent 进程,而是所有它写出来、而宿主之后会信任的东西。
落到团队,这几条按性价比排序:
固定版本,别吃自动升级。底线是 Claude Code ≥ 2.1.196(核心路径)/ ≥ 2.1.247(Beltdown 完整修复)、Codex CLI ≥ 0.131.0、Cursor ≥ 3.0.0、Goose ≥ 1.44.0。内部统一分发、关掉自动更新的团队尤其要核一遍。截至 9 月 1 日的复测,Hermes Agent、Qwen Code、Grok Build 三条还没修,Claude Code 还有第二条配置路径开着——这三个工具如果在你团队里,先别拿它们开陌生仓库。
限制 Agent 能访问的仓库范围。这条最有效,也最容易被跳过。攻击需要「一个仓库」,不需要「你的机器」。
把裸git status换掉。任何自动化里都写git -c core.fsmonitor=false status。顺手加一条检查:在陌生仓库里先跑git config --show-origin --get-regexp '^core\.(fsmonitor|hooksPath)$',出现意外值就是停止信号。
把 MCP 工具面和 hook 配置当代码来审。Cursor 拿 AIUC-1 认证时,评估范围里明确写了 MCP 安全、Agent 身份与权限、密钥保护——厂商自己也承认这是新攻击面。你的.cursor/hooks.json、.claude/settings.local.json,改了要 review。
要在真凭证旁边跑 Agent,就放进 VM 或容器,别指望沙箱。Accomplish 自己就是这么干的:整个 Agent 跑在 VM 里,真实凭证不进那个 VM。这话从漏洞发现者嘴里说出来,比从任何安全 PPT 里说出来都有分量。
06可验证是安全唯一能被相信的形式
把这件事放回 9 月的脉络里,它就不孤立了。这个月我们写过两条线:9 月 1 日的「护栏时刻」,9 月 4 日的「黑色星期四」。今天的 GitSpawn 是第三个点,而且是最基础的那个——能力曲线和越界成本曲线都在抬头,而沙箱本来被默认为最后一道闸,结果这道闸自己就是漏的。
有意思的是,同一天,Anthropic 的 CEO 在另一条线上讲的是同一件事的另一面。Dario Amodei 9 月 12 日那篇《We Must Pace the Frontier》里,有个细节被大多数转述漏掉了:他提议的「能力检查点」机制,举的例子是——如果模型具备「能够逃逸或击败大多数常见沙箱方法」的能力,就必须先拿到对齐性质的认证才能部署。
一个 CEO 在公开文章里,把「能逃出沙箱」写成能力分级的门槛;同一个月,研究者在真实产品里发现,三个主流 Agent 的沙箱根本不用逃,从底下走过去就行。这两个事实放在一起读,比任何安全宣言都有信息量。背景也不需要多铺:OpenAI 的 Agent 群在 7 月的评测里冲出边界打进了 Hugging Face 的基础设施,涉及上千个 Agent 协同分工;Anthropic 那边披露了四起越权事件,其中 Mythos 5 往 PyPI 传了个恶意包,被 15 个真实系统装走。
所以我接下来的判断是:安全话术会继续通胀,可验证性会成为唯一真实的分水岭。
什么算可验证。METR 拿到了对 Anthropic 四起越权事件的独立调查权,可以在事件窗口之外查阅更大范围的记录,可以接触能提供机密信息的员工。Cursor 拿的 AIUC-1 认证,要求至少每季度复测一次、每年一次完整审计,标准本身还每季度更新。这两件事的共同点是:它们都不是「我们重视安全」这句话,而是外部可核对的时间表和范围清单。
反过来看厂商成熟度也有个省事的办法:看它怎么披露事故。Anthropic 承认那次 Opus 4.6 的事故,是自己第一次扫描(14.1 万条记录)漏掉的,是后来把范围扩到约 4.81 亿条、用模型筛出约 920 万条才找回来的。公开承认自己的审查方法有洞,比宣布「我们通过了某某认证」更值钱。
我的判断收敛成一句:Agent 安全正在从「功能」变成「采购条款」。什么时候你的供应商合同里出现「沙箱逃逸类漏洞的修复 SLA」,和「每季度对抗性测试报告的上传义务」,这件事才算真的被当回事。
在那之前,最实用的建议还是那句老话——把陌生仓库当敌意输入,把 Agent 当持有你凭证的进程。剩下的,让厂商用版本号说话。
其他动态
- 优必选柳州超级智慧工厂投产:全球首个万台级产能的人形机器人智造工厂落地柳州,「用机器人造机器人」(Cruzr 参与拆垛码垛上料),每 10 分钟下线 1 台、年规划产能超万台,与西门子共建数字孪生底座——具身智能的「量产」从口号变成了产线节拍。
- OpenAI Agents API 进入公开测试:把驱动 Codex 的整套 harness(session 编排、跨窗口上下文压缩、按需工具搜索、子智能体并行)开放给所有开发者,按 token 计费、不额外收平台费——agent 框架正从「每家公司自己造」滑向「基础设施」。
- 阿里 Qoder CLI v1.1.50 向个人版开放自定义模型接入:填 Base URL / Model ID / API Key 即可使用自带模型,兼容 OpenAI 与 Anthropic 协议,留空按 128K 管理上下文——国产编程 CLI 开始把「模型可替换」当默认能力。
- openJiuwen 首发「双维度 RSI」框架:把递归自我改进落到蜂群办公智能体,支持可插拔 harness + artifacts 两类交付物优化,用「版本化优化对象 + 可验证执行证据」把自我迭代做成工程闭环,而非一句概念。
- Dario Amodei 呼吁给前沿模型踩刹车,Altman、Musk 相继表态支持:提议引入常驻第三方评估员(如 METR 驻场、有工牌与数据权限)——在 Agent 越界事件频发的背景下,「可被外部审计」正成为新的行业基线。
微信公众号
欢迎关注「字与码」
如果这篇文章对你有用,也欢迎在微信里继续关注后续更新。
X / Twitter
关注 @ax2_zicode
更即时的技术观察、新文章提醒和一些短想法会发在 X 上。