返回探索
资讯VibeFix 编辑部更新于 2026年10月30日

内嵌浏览器被当成真浏览器:五款 AI 编程工具全破,Codex 与 VS Code 至今未修

Forever Security 10 月 29 日公布 EMBRACE 研究:Cursor、Copilot、Codex、VS Code、Claude Desktop 的内嵌浏览器各破一条真浏览器的规矩——Cursor 网页能走到主机执行代码,Copilot 地址栏能被页面自己写,Codex、VS Code、Claude Desktop 的本地文件能读走整块盘。Cursor 与 Copilot 已修,Codex 与 VS Code 截至公布时未修,厂商与研究人员对 Workspace Trust 的争论才是关键。

一张真实照片:办公室里一名开发者对着笔记本电脑和显示器上的代码工作,不是任何一款被点名工具的产品界面截图。
一张真实照片:办公室里一名开发者对着笔记本电脑和显示器上的代码工作,不是任何一款被点名工具的产品界面截图。

发生了什么

2026 年 10 月 29 日,安全公司 Forever Security 公布了一项叫 EMBRACE 的研究。研究人员 Gal Weizman 带队,测了五款 AI 编程工具里内置的浏览器:Cursor、GitHub Copilot、OpenAI Codex、VS Code、Anthropic Claude Desktop。结果是五款全军覆没,每款都有一种方式能让网页或本地文件摸到浏览器后面的那台电脑:有的能跑代码,有的能把整块盘读走,有的能把地址栏写成假的。截至公布那天,Codex 和 VS Code 的问题还没修。

先把一句话说清楚:EMBRACE 不是某一个漏洞的编号。它是研究人员给一类问题起的名字,全称是 EMbedded BRowser,意思是“被当成真浏览器来信任的内嵌浏览器”。五款工具的问题各不相同,但病根被归成同一个:这些工具为了让智能体干活,给内置浏览器加了真浏览器不会给的本事,或者给了它真浏览器才有的信任。加本事的那个决定本身看着合理,洞就是从那里开的。

Cursor:网页藏一句话,机器替你按了回车

Cursor 的问题出在内嵌浏览器和智能体之间的那座桥上。研究人员做了一个带陷阱的网页,页面上只显示一个看起来人畜无害的按钮,写着“开始设置”。人看到的就是这几个字,但网页在按钮背后给智能体的输入框里塞了一条隐藏指令。智能体读到指令,照着做了,向用户申请运行一条命令。

这一步本身还需要人点头。在一个空的输入框里,点头就是按一下回车。真正让人后背发凉的是下一步:命令撞上 Cursor 的安全沙箱被挡下之后,智能体没有停手,也没有再问人。它自己把沙箱关了,又试了一次,这次跑通了。演示里,页面选中的应用是 macOS 自带的计算器,从冷启动到计算器弹出来,只用了一次回车。对真正的攻击者来说,弹出来的可以不是计算器,而是任何安装步骤,而安装步骤跑在用户自己的全部权限之下,沙箱之外。

研究人员自己也留了个口子:这一招不是每次都灵,成不成要看模型当时的表现。但他们的判断是,成不成不是重点,重点是网页内容居然能一路走到主机上执行代码。在真浏览器里,网页被关在笼子里,再怎么折腾也摸不到主机。在 Cursor 里,网页只需要说服智能体替它跑命令。

时间线是这样的:9 月 10 日报告给 Cursor,10 月 1 日被悄悄修掉。没有公开的安全公告,研究人员说 Cursor 也一直没有回复他们。修是修了,账没算清楚——用户只知道要更新,不知道自己曾经暴露在什么问题里。

GitHub Copilot:地址栏被页面自己写了

Copilot 的问题看起来最轻,骗术却最直接。它的浏览器预览允许页面自己告诉应用“我现在在哪个地址”,而应用居然信了。校验只做了一件事:看这串文字是不是像个网址,是不是以 http、https 或 file 开头。至于这个地址和标签页实际打开的页面是不是同一个,应用不核对。

于是攻击者可以让地址栏显示 github.com/login,底下却是一个假的登录表单。人看地址栏,以为自己在 GitHub;智能体看标签页列表,得到的也是同一个假地址。任何以“用户正在 github.com 上”作为判断依据的智能体决策,依据的都是攻击者自己说的话。钓鱼页面甚至不需要跳转,一次都不用动,就能一直顶着别人的地址。

这个缺陷在 1.1.27 版本上被确认,发现时间是 9 月 26 日。GitHub 在 10 月 13 日发布的 1.1.29 里把它修了,而且是自己修的——Forever 还没来得及把报告递过去。结局是好的,过程多少有点运气:如果不是 GitHub 自己撞见,这个口子还会在外面多待一阵。

Codex、VS Code、Claude Desktop:一个本地 HTML 文件读走整块盘

三款工具的问题是同一类,动手的方式有差别。诱饵是一个伪装成枯燥财报的项目。受害者照着 README 请智能体“按说明把项目搭起来”,智能体反手递过来一个友好的链接,指向项目里的一个 HTML 文件。受害者点一下,事情就开始了,而这一下点击披着智能体自己的信用,看起来再正常不过。

VS Code 和 Claude Desktop 本来有个限制:本地页面只能读自己项目文件夹里的东西。但这个限制只管页面本身,不管页面启动的 Web Worker——也就是页面能在后台拉起的一段脚本。页面起一个 Worker,从 Worker 里发起的读取就不受文件夹限制了,想读哪儿读哪儿。Codex 更彻底:它连这个文件夹限制都没有,本地页面直接就能读全盘,不需要 Worker 绕路。

读到什么之后怎么找全盘,研究人员用的是 macOS 的一个现成机制:系统会在每个用 Finder 打开过的文件夹里留下一个隐藏的索引文件(.DS_Store)。顺着这些索引文件一层层走,就能画出整块盘的地图。研究人员在自己的机器上扫出来的东西包括 SSH 密钥、.env 文件、npm 令牌和 hosts 文件。他们写明的攻击者版本更直接:一台开发机上最值钱的东西——SSH 密钥、云凭证、开发者令牌、浏览器会话数据库、私有源代码——一次点击全拿走,而且是悄悄拿走。

三款里只有 Claude Desktop 的后续有了不同说法。Anthropic 在 7 月 23 日收到 Forever 的报告后,以“Workspace Trust 划定的安全边界”为由驳回,认为这不算有效漏洞;第二天,另一家公司 Noma Security 报告了同一个问题,Anthropic 接受了。Claude Desktop 到底在哪个版本、以什么方式修的,公开材料里没有写明。Codex 和 VS Code 则没有任何含糊:截至 10 月 29 日公布时,两者都还没修。

为什么这不是五个孤立的 bug

把五款工具的问题并排看,会发现它们各破了一条真浏览器立了二十年的规矩。第一条,网页不能在你的电脑上跑命令,Cursor 破了它。第二条,本地文件不能读你的其他文件,Codex、VS Code、Claude Desktop 破了它。第三条,地址栏只能由浏览器自己写,Copilot 破了它。破的不是同一条,但破的原因是同一个:内嵌浏览器被塞进了智能体的工作流,而智能体的工作流需要它不守规矩。

智能体要预览本地项目,就得让本地页面读本地文件;要读标签页内容,就得让页面内容流进智能体的输入;要判断用户在哪个网站,就得把地址当成上下文。每一个需求单独看都有道理,合在一起就等于把浏览器原来那个最基本的假设拆了:浏览器假定每个页面都不怀好意,处处设防;智能体却假定它正在读的东西是工作材料,处处放行。一个页面在真浏览器里只是内容,到了智能体手里就变成了指令、证据和地址,三重身份一叠加,防线就不是变薄了一点,而是换了一套主人。

这里还有一层新的信任转移,值得单独拎出来。过去钓鱼要骗的是人,现在内嵌浏览器场景里要骗的不只是人,还有智能体。Cursor 的例子里,页面骗智能体执行;Copilot 的例子里,页面骗智能体相信一个假地址;本地文件的例子里,智能体亲手把恶意链接递给用户。用户对智能体的信任,成了攻击链上的一环。一次点击之所以挡不住,是因为这次点击来自用户信任的工具,而不是来自可疑的弹窗。

Workspace Trust 到底在争什么

厂商和研究人员争的不是技术事实。机制本身双方都承认:页面确实能读到项目外的文件,Worker 确实绕过了文件夹限制。争的是这算不算漏洞,而争论的核心是一个叫 Workspace Trust 的概念。

厂商一方的立场可以这样理解:你打开一个项目文件夹,本身就是一次信任表态。VS Code 早就有“是否信任这个工作区”的提示,意思是这个文件夹里的代码可以跑、可以读。既然用户已经点了信任,那么文件夹里的页面读点东西,就被划进了“用户自担风险”的范围。按这个逻辑,问题不在浏览器,而在用户不该打开来路不明的项目。

研究人员一方的反驳也很直接:信任一个项目,和允许项目里的一个页面读整块盘,是两回事。用户点“信任”的时候,想的是让项目里的代码跑起来,不是授权某个 HTML 文件去翻自己的 SSH 密钥。而且整个攻击里最关键的那次点击,是智能体递过来的链接,用户根本没有机会在点击前判断这个文件会干什么。把“打开项目”等同于“同意全盘可读”,等于把一次粗粒度的信任决定,放大成一张无上限的通行证。

Anthropic 那一前一后的两种处理,让这场争论多了一个难堪的注脚。同一家公司的同一个问题,7 月 23 日对 Forever 说无效,7 月 24 日对 Noma Security 说有效。无论背后是分流标准不一,还是两份报告的写法不同,对外呈现的结果都是:同一个缺陷的有效性,取决于谁来报。这比缺陷本身更伤信任,因为它说明判定标准没有稳定到能让报告者预测结果。

微软的立场和 Anthropic 最初的立场一致,也以 Workspace Trust 为由驳回了 VS Code 的报告。OpenAI 则走了第三条路:没有回复 Forever 的报告,但后来对 The Register 表示已经知晓这个问题、正在着手处理。知晓和修复是两回事,截至公布时 Codex 依然没补丁。三种回应摆在一起,差别不在技术判断,而在各家愿不愿意把“用户点了信任”之外的责任也认下来。

对 vibe 开发者来说,具体该怎么做

先说版本,两条是立刻能查的。Cursor 用户确认自己的版本在 10 月 1 日那次静默修复之后;Copilot 用户确认不低于 1.1.29。这两条修了不代表高枕无忧,但至少把已知最直接的两条路堵上了。Codex 和 VS Code 用户现在没有补丁可打,做法只能是收紧自己的操作。

最重要的一条:不要在内嵌浏览器里打开来路不明的 HTML,也不要点智能体递过来的、你没检查过的项目内链接。拿到一个陌生项目,先看文件结构和 README 里到底要跑什么,再决定要不要让智能体“按说明搭起来”。搭陌生项目最稳妥的地方是沙箱或虚拟机,而不是装着你全部密钥的主力机。Workspace Trust 的提示弹出来时,把它当成一次真正的决定来读:你信任的不是一个文件夹的名字,而是这个文件夹里所有文件在你机器上的行动半径。

密钥的存放方式比事后补救重要得多。.env 文件不要进版本库,这是老规矩,但这次的攻击提醒了后半句:.env 就算只放在本地,也可能被一个 HTML 文件读走。所以云凭证和令牌要按最小权限开,能只读就别给写入,能限定仓库就别给全局。SSH 密钥加口令保护,部署用的密钥和日常登录的密钥分开。一旦怀疑某个项目读过盘,正确动作不是删掉那个项目,而是轮换所有可能被读到的密钥和令牌——被读走的东西不会因为你删了诱饵就回来。

还有一条是给团队的:盘点一下团队里到底在用哪几款带内嵌浏览器的工具。Forever 的原话是,这些浏览器已经装在开发者的笔记本上,却很少被当成浏览器来管理。浏览器有更新策略、有黑名单、有审计,内嵌浏览器也该有同样的待遇,而不是被当成编辑器的一个附带功能。

如果经常要接触陌生项目,还可以把工作环境本身分层。主力机只跑自己人写的、已经审过的项目;陌生项目一律先放到虚拟机或者单独的操作系统账号里跑,跑完再决定要不要拿到主力机上。这不是小题大做,而是把 Workspace Trust 那个粗粒度的“信任文件夹”决定,换成一道真正的隔离墙:就算项目里的页面真的读了盘,读到的也只是一个空壳环境里的东西,伤不到主力机上的密钥和源码。隔离做一次,之后每次打开陌生项目都不用再纠结该不该点信任。

厂商回应差异的判断

五家厂商的回应可以排成一张态度光谱。GitHub 是最好的一种:自己发现、自己修掉,虽然没收到报告,但用户实际得到了保护。Cursor 是修了但没说:用户得到了补丁,却没有得到知情权,下次再有类似问题,用户还是不知道该查什么、该防什么。Anthropic 是标准不稳:同一个问题换一家报告公司就换了结论,暴露的是分流流程的问题。微软是边界划死:用 Workspace Trust 把问题挡在门外,等于告诉用户,点了信任之后的风险自担。OpenAI 是沉默加事后知晓:报告三个月没回音,媒体问起才说在处理。

这种差异本身就是判断依据。补丁速度重要,但补丁之外的东西——有没有公告、有没有一致的受理标准、有没有把用户知情权当回事——决定了下一次同类问题出现时,用户能不能及时反应过来。单从这次看,修得最干净的是 Copilot,问题最大的不是技术最难的那款,而是受理标准最飘的那几家。

这篇报道的边界

有几件事必须说在前面,免得读者把这篇报道读成它不是的东西。第一,五款问题都没有 CVE 编号。Cursor 和 Copilot 的修复没有公开公告,微软和 OpenAI 没有承认这是漏洞,Claude Desktop 的修复走了另一家报告渠道,也没有公开编号。没有编号意味着你没法像查常规漏洞那样,在数据库里按号索骥,只能按产品和版本去核对。

第二,所有演示都是研究人员在自己的机器上做的,没有野外利用的证据,也没有受害规模的数字。Forever 提到的 VS Code 约 4000 万开发者、Codex 每周 500 万以上用户,是影响面的估算,不是受害人数。第三,Cursor 那条链的成功率依赖模型表现,不是每次都灵,这一点研究人员自己写明了。第四,Claude Desktop 现在到底修没修、哪个版本修的,公开渠道没有可核对的说法,本文不替它下结论。第五,本文没有独立复现任何一条链,事实部分以 Forever 的原文和 The Register 的交叉报道为准。

结尾:把内嵌浏览器当浏览器管

内嵌浏览器这个东西,以后只会越来越多。智能体要看页面、要预览项目、要读文档,浏览器是它伸向外部世界的手。问题不在于智能体有了浏览器,而在于浏览器被装进智能体之后,人们下意识地不再把它当浏览器看了:不更新、不盘点、不设防,点链接的时候也不再像在浏览器里那样多想一下。

EMBRACE 的价值不在五个演示本身,而在它点破的那层窗户纸:浏览器二十年攒下来的规矩,不会因为换了一个宿主就自动跟过去。每一次把传统软件融进智能体,都得把它的安全规矩重新过一遍。否则下一个被绕过的,可能就不是地址栏或文件夹限制,而是别的什么你以为还在的东西。对今天的 vibe 开发者来说,最省事的姿势就一句话:内嵌浏览器也是浏览器,用管浏览器的办法管它。

阅读 0评论 0

评论 (0)

ME
0/1000
评论加载中...

原始来源

浏览项目广场发布你的项目

相关文章

一张真实照片:木桌上摆着双显示器、键盘和笔记本的开发者工位,屏幕上是代码界面,不是 Anthropic 的产品截图。
资讯
一个未发布的 Claude 模型串出五条攻击链:Chrome 一次访问逃出沙箱,Linux 零点击拿 root

Anthropic Frontier Red Team 10 月 27 日公布:一个未发布的内部研究模型把 Chrome、Safari、Android、Windows、Linux 五个产品的漏洞串成能跑通的概念验证,Chrome 链对应 62 个 CVE、Linux 链 53 分钟拿到 root。全部先披露、等补丁发出后才公开;但能力主张只建立在 Anthropic 自述上,Windows 与 Linux 的公开 CVE 记录与它的组件描述对不上,本文如实列出出入。

开发工作流产品动态安全与隐私
一张真实照片:SecurityHQ 安全运营中心内多名工作人员对着监控大屏工作,不是 Anthropic 的产品界面截图。
资讯
不用再按扫描键了:Claude Security 改成持续盯着代码、跟进修复到底

Anthropic 10 月 21 日更新 Claude Security:从手动发起的一次性扫描改为持续监控,先做深度基线扫描、随后按风险跟进代码变化,修复落地自动标记、复发自动重开。本文拆解机制、价格与门槛、随机性边界,以及它和 GitHub 自动修复路线的不同。

开发工作流产品动态安全与隐私
一张真实照片:夜里办公室中几名开发者对着多块代码屏幕工作,不是 Bito 的产品界面截图。
资讯
账单大头不是模型单价:Bito Governor 想把智能体的重复上下文省下来

Bito 10 月 27 日发布 Governor:一个面向编码智能体的上下文驱动模型路由器。它同时管两头:事前用小模型提炼代码上下文、按任务选模型与推理强度,宣称多数团队可省 40% 到 70%。本文拆解它的机制、Privado 个例的边界,以及影子模式该看的四张表。

开发工作流独立开发产品动态