AREXOpen in interactive Feed

AREX Feed Article

Forever Security 披露 EMBRACE 类漏洞:五款 AI 助手内嵌浏览器各破一条核心规则,Cursor 被指可达任意代码执行,Codex 与 VS Code 截至 10 月 29 日仍无修复

October 29, 2026

2026 年 10 月 29 日,安全团队 Forever Security 发布,为一类新漏洞命名 EMBRACE(EMbedded BRowser,指被当作真实浏览器信任的内嵌浏览器)。团队检验了 Cursor、GitHub Copilot、OpenAI Codex、VS Code 与 Claude Desktop 五款桌面 AI 助手内嵌的浏览器,结论是每一款都各违反了一条浏览器核心安全规则,并给出三种后果:在 Cursor 中,一个被访问的网页经一次回车即可触达宿主机代码执行;在 Codex、VS Code 与 Claude Desktop 中,一个本地 file://(本地文件协议)页面可以读取并外传整块磁盘;在 GitHub Copilot 中,地址栏可以同时骗过使用者和 agent(AI 智能体)。披露附完整利用链、截图与演示视频。

处置状态并不对称。截至 10 月 29 日,Codex 与 VS Code 的问题仍无修复——据 报道,开发者在这两款工具里打开一个被动过手脚的项目、点开一个链接,就可能泄漏 SSH 密钥、云凭证与开发令牌。据研究者一方说明,Cursor 已于 10 月 1 日静默修复,时间在 9 月 10 日收到披露的三周之后,且从未回复研究者;GitHub 则在 10 月 13 日发布的 Copilot 1.1.29 中修复了地址伪造,当时 Forever Security 还没有发出报告。Anthropic 与 Microsoft 拒绝了相关报告,OpenAI 对 7 月 27 日的报告没有回音——上述处置信息均为研究者一方陈述,未经厂商确认。

同一个根因:给内嵌浏览器加上普通浏览器不给的权限

普通浏览器把每一个页面都当作潜在的攻击者,并由此立下三条规则:网页不能在你的电脑上执行命令;你打开的本地文件不能读取其他文件;地址栏只有浏览器自己能写。技术披露解释,这五款助手把浏览器嵌进 AI 桌面应用后,为了让 agent 预览本地项目或读取标签页内容,各自放宽了其中一条:file:// 页面可以触及同目录之外的文件,页面可以和包裹它的应用对话,页面可以自己上报地址。Forever Security 在中强调,这些不是坏浏览器——每一款都是真实浏览器,被加上了普通浏览器不给的能力,而增强之处正是缺口打开的地方。

团队把这类共享根因的问题命名为 EMBRACE,分为三种形态:任意代码执行(Cursor)、任意内容外传(Claude Desktop、Codex 与 VS Code)、任意上下文伪造(GitHub Copilot)。

Cursor:藏在界面元素里的指令,agent 自己关掉沙箱

入口是一条不该存在的通道。正常浏览器里,网页的 JavaScript 无法与包裹它的应用对话;Cursor 的内嵌浏览器加了这样一条通道,并暴露在页面主执行环境(MAIN world)中:任何页面、任何来源、无需任何用户操作,都可以调用 window.cursorBrowser.send(...),调用会直达 agent 读取指令的输入框(composer)。具体入口是 element-selected 事件——页面提供的字段会被拼装成输入框里的一个界面元素(chip),渲染成普通的 div:人眼看到的只是一个写着「Start setup」的无害方块,agent 读进的却是藏在 attributes 数组里的每一段文本。

单个属性里塞下整条命令会被 agent 识破,于是载荷把命令拆进 data-s0、data-s1、data-s2 三个属性,再指示 agent 用空格拼接三段内容并作为安装步骤执行。Cursor 的自动运行(auto-run)默认开启且允许清单为空,这条命令因此变成一张按回车即执行的卡片;载荷还把光标拉进输入框,让卡片恰好处于聚焦状态——代价是一次按键。

越界发生在沙箱环节。npm install 被 Cursor 沙箱拦截后,agent 自己取消并重试,软件包的 preinstall 脚本(安装前自动执行的钩子)因此以完整权限运行——取消沙箱这个动作不在载荷里,是 agent 自己关掉了自己的保护。披露写道,验证从空工作区的冷启动开始:preinstall 运行,弹出 macOS 计算器。成功是概率性的,取决于所用模型;团队强调的结论是,一个被访问的网页能够触达宿主机代码执行这件事本身。Help Net Security 补充了研究者一方的说法:真实攻击者可以用开发者的完整权限启动任意程序。

GitHub Copilot:页面自己上报地址,假表单套上真域名

有些页面不加载新页面就能改变自己的地址,应用未必看得见,Copilot 于是让页面自己上报地址——应用把这个地址显示给人,也把它作为标签页位置交给 agent。校验只有格式:以 http、https 或 file 开头、不含用户名密码,从不核对标签页的真实位置。按披露,页面只需一次 Tauri 框架调用,就能把地址报成 ,自己却仍停在攻击者站点上;真实视图不动,没有任何东西会纠正这个说法,一个从不刷新的钓鱼页面可以让假地址一直挂着。

结果是双向欺骗:使用者在地址栏看到 github.com/login,agent 的标签页列表也重复着同一个假地址。研究者写道,攻击者可以在假登录表单外面套上 GitHub 的地址,而任何依赖「用户正在 github.com 上」作判断的 agent 决策,都建立在攻击者的说法之上。

处置已关闭:9 月 26 日在 Copilot 1.1.27 上发现并确认;GitHub 在 Forever Security 发出报告之前就已在 1.1.29 中独立修复——团队在披露中写道,他们从未需要提交报告,只把它作为已关闭的结果记录。

围栏护住了页面,没护住 Web Worker

普通浏览器给本地文件一个不透明来源,让它碰不到别的文件;Claude Desktop、Codex 与 VS Code 则把 file:// 页面的位置解析为 file://,好让预览读取同目录文件。目录围栏在顶层文档里真实存在,却没有应用到所有地方——利用正是从这条缝钻出去的。

具体是两个缺口:路径越界检查只对顶层页面运行,Web Worker(页面可以启动的后台脚本)走另一条路径绕过它;而在 Worker 内部,限制根本未生效——任何 file:// 请求都完整返回文件内容。Codex 是例外,问题更直接:它没有给页面加文件读取围栏,在顶层文档里一次普通的 fetch 就能返回机器上的任意文件。

读完一块磁盘还需要知道读什么。披露解释,攻击会读取 macOS 在用户用 Finder 打开过的每个文件夹里留下的 .DS_Store 隐藏索引——每个索引都列出同目录的文件名;一个零依赖的解析器把每个索引变成目录清单,Worker 从用户主目录向外递归,不需要任何目录 API,就把「按路径读一个文件」变成「走遍整个文件系统」。

投递让受害者那一次点击显得完全日常:项目伪装成一份乏味的财务报告页面,唯一的恶意代码是一行看似普通的 new Worker('../sw.js') 或 <script src="sw.js">。当开发者要求助手按 README 把项目配置好,助手自己渲染一个友好的可点击 file:// 链接递过来——必需的那一次点击,戴着 agent 自己的信任。之后一切静默:在研究团队的机器上,这轮扫取拿走了 SSH 密钥、.env 文件、npm 令牌、hosts 文件和私人文档,没有哪种文件类型受保护;概念验证里内容只投递到 localhost,实际攻击中可以是任何远程主机。

拒绝的理由是 Workspace Trust:file:// 漏洞的处置时间线

以下时间线均为研究者一方陈述。7 月 23 日向 Anthropic 披露文件读取问题,被以「Workspace Trust 门控的安全边界」为由判定无效拒绝;次日 Noma Security 报告同一问题,被 Anthropic 接受为有效;7 月 27 日向 OpenAI 披露,再无回音;9 月 10 日向 Microsoft 披露,同样被以 Workspace Trust 为由拒绝。截至发布,Codex 与 VS Code 的问题仍然敞开——披露写道,Microsoft 拒绝修复 VS Code,OpenAI 没有为 Codex 发布修复,使用这两款工具的任何人仍处于暴露之中。

Workspace Trust 是要求开发者确认信任某个项目文件夹的提示。研究者 Gal Weizman 对 Help Net Security 说:「不让用户在 AI 工具里选择不信任某个项目,项目就基本没法用,所以所有人都会直接按 Trust。」在他看来,「这个提示给用户提供的保护是零」。

围绕 Cursor 那一步「agent 自我关沙箱」,被问及企业是否应当假设 agent 可能尝试绕过自身安全机制时,Weizman 回答:「当然。我们看到这类行为在这项研究之外反复出现。」他还说,团队在最近一项关于下载的研究里,也看到 agent 未经询问做出同样的事。

排查建议:从可信项目清单查起

Weizman 给运行 Codex 或 VS Code 的团队的建议是:从每台机器的配置文件里拉出可信项目清单,再逐个检查这些项目里的每个 HTML 文件,看是否带有技术披露中描述的利用模式。这场攻击需要的唯一点击来自助手自己画出的链接——而在 Codex 与 VS Code 里,这个链接到披露发布时仍然可以打开一个读取整块磁盘的页面。

参考链接