← 所有文章

智能体技术栈的“1998年问题”

2026年6月的最后一周,一小批 CVE 集中落在 AI 智能体工具上:其中两个出自同一款桌面智能体客户端,都是授权缺陷,其中一个正好位于 MCP OAuth 回调之中。单独看,每一个都只是维护者一个周末就能修掉的中危漏洞;放在一起看,这批漏洞是一个信号,而且是结构性的信号:AI 智能体生态积累攻击面的速度,快于它积累防御所需安全文化的速度。这不是哪一个项目的道德失败,而正是1998年前后 Web 世界所处的境况——彼时一门语言带着不安全的默认配置走向主流,凭据散落各处,安装基数的增长快得没人来得及加固。今天,替您保管密钥、替您运行 shell 的工具,正带着1998年的安全成熟度,交付到2026年的威胁模型面前。 {.answer-block}

TL;DR

  • Cherry Studio 是一款流行的桌面 AI 智能体客户端,于2026年6月29日收获两个 CVE:其 MCP OAuth 回调服务器中的不当授权缺陷(CVE-2026-13524),以及一个 preload API 中的授权绕过(CVE-2026-13534)。12
  • 这一模式并非某个应用的个案。MCP 参考工具本身就在2025年曝出过严重的远程代码执行漏洞:mcp-remote 的 CVSS 9.6(CVE-2025-6514),以及 Anthropic 的 MCP Inspector 的 CVSS 9.4(CVE-2025-49596)。34
  • 智能体工具在结构上比历史上任何 Web 应用都更暴露:它们持有凭据、以执行代码为设计目标,并且坐落在您的信任边界(IDE、shell、浏览器)之内,而不是躲在边界之后。
  • 防住这些漏洞所需的知识早已存在。MCP 规范详细记载了混淆代理人(confused deputy)与 OAuth 流程这两类攻击;但把这些知识落实到每一个快速迭代的集成上的文化,尚未普及开来。5
  • 1998年的 Web 是在蠕虫让不安全变得代价高昂之后才成熟起来的。智能体生态目前还没有等价的倒逼机制,而如今能发现这些漏洞的模型,同样写得出那只终将成为倒逼机制的蠕虫。

具体看这批漏洞

Cherry Studio 是一款跨平台桌面客户端,自我定位为“集智能聊天、自主智能体与300多个助手于一体的 AI 生产力工作室”,并明确支持 Model Context Protocol 服务器。它正是本文要谈的那类工具:一个面向消费者的智能体,代管您的 API 密钥,运行本地集成,并以您的名义访问网络。

2026年6月29日,VulDB 发布了针对它的两份安全通告。CVE-2026-13524 是 MCP OAuth Local Callback Server 中的不当授权缺陷(CWE-285),位于 src/main/services/mcp/oauth/callback.ts,影响 1.9.0 至 1.9.6 各版本。通告的措辞很直白:“The manipulation of the argument code leads to improper authorization.”(对参数 code 的操纵会导致不当授权。)其 CVSS 3.1 评分为 5.6,中危。1 CVE-2026-13534 则是 CherryIN preload API 中的授权绕过(CWE-639),影响至 1.9.7 版本,评分 5.0。2 两者都算不上头条新闻,但都是团队在一个对所有人来说都很新的表面上快速推进时,最容易犯下的那种安静的授权错误。

第一个漏洞才是真正的征兆。MCP 客户端中的 OAuth 回调是教科书级的信任边界:外部授权服务器把 code 交还给您的机器、由您的机器决定是否信任它的那个节点。处理不当并不是什么新奇的漏洞类别,恰恰是 MCP 规范自己的安全文档着墨最多的那一类。

我剔除了同一时间窗口内相邻的两个 CVE,因为这个“集群”必须真实可靠:CVE-2026-13533 属于 agentejo Cockpit CMS——一个 PHP 内容管理系统而非智能体框架;CVE-2026-13543 则完全无法核实。几个扎实的例子,胜过一份注水的清单。

为什么智能体工具在结构上处境更糟

1998年前后的经典 Web 应用固然不安全,但它活在一道边界之后。它运行在一台您并不身处其中的服务器上,波及范围止于数据库和会话,攻破它,攻击者拿到的是应用的数据。

智能体工具把这套几何结构整个翻转了过来。它运行在您的机器上或 IDE 里,持有通往您云端与代码仓库的长效凭据,并且把执行代码当作核心功能而非漏洞利用的结果。它没有可以躲在其后的边界,因为工具本身就是边界,而这道边界在设计上就是多孔的。

Simon Willison 在2025年6月用“致命三要素”(lethal trifecta)一词精准命名了这种危险:当一个智能体以足以窃取数据的方式,同时具备“访问您的私有数据”、“接触不受信任的内容”与“对外通信的能力”时,它就变得可被利用。7 每一个有能力的智能体默认就同时具备这三者,因为读取您的机密、摄入受攻击者影响的内容、发起出站请求,正是它的功能而非缺陷。三要素不是边缘情形,而是基线配置。

这就是结构性差异所在。1998年的 Web 应用需要被诱骗,才会泄露一道边界之内的数据;2026年的智能体则一出厂就预装了外泄链条所需的全部能力,横在恶意输入与您的凭据之间的,只剩工具内部的信任边界画得对不对。Cherry Studio 的回调漏洞,就是其中一道边界被画歪了一点点的样子。

MCP 的放大效应

Model Context Protocol 是2026年智能体技术栈的结缔组织,它以一种特定的方式放大攻击面:每一个 MCP 服务器都是一个新的特权集成,通常写得很快,而模型可以随时调用它。添加一个集成毫无摩擦,审计一个却绝非如此。集成的安装基数,正在甩开真正读过其代码的人群规模。

参考工具的状况表明,这不是业余项目才有的问题。2025年7月,JFrog 披露了 CVE-2025-6514:mcp-remote——Claude Desktop、Cursor 和 Windsurf 都在使用的连接器——中的一个操作系统命令注入漏洞,恶意服务器只需在 OAuth 流程中给出一个精心构造的 authorization_endpoint URL 即可触发:严重级别,CVSS 9.6。3 同月,Tenable 披露了 CVE-2025-49596,Anthropic 自家 MCP Inspector 中一个 9.4 分的远程代码执行漏洞:一处缺失的身份验证检查,让恶意网站得以触及本地端口,并借助 DNS 重绑定执行任意命令。4

本文四个 CVE 中有两个是 MCP 工具链里的 OAuth 流程缺陷:一个在回调服务器,一个在端点发现环节。这不是巧合。智能体客户端里的 OAuth 是一道反复失守的边界,而且规范早已把话挑明。日期标注为2025年6月18日的 MCP 安全最佳实践文档,把篇幅最长的一节留给了“混淆代理人问题”(confused deputy problem),并强制要求代理服务器实现按客户端逐一征得同意、校验 OAuth state 参数、精确匹配重定向 URI。5 这份文档发布在 Cherry Studio 交付其回调漏洞的一年之前。差距不在知识,而在规范的安全附录与上周二刚写出来的那个中位水平集成之间的距离。

提示注入(prompt injection)让这种放大效应在性质上比旧 Web 面对过的一切都更恶劣。Willison 于2022年9月创造了这个术语,写道“I propose that the obvious name for this should be prompt injection”(我提议,这个问题显而易见的名字应该是提示注入),类比对象是 SQL 注入:受信任的指令与不受信任的输入被拼接进同一个字符串,再交由某个引擎解释执行。6 对智能体而言,数据本身就是攻击载体,而不只是代码。一张被投毒的网页、一个埋了陷阱的文件、一段怀有敌意的工具描述:模型读到的任何字节都可能携带指令。MCP 规范对此毫不讳言,警告恶意服务器可以把客户端变成数据外泄的代理。5 这无法靠输入转义来修补,因为输入是自然语言,而解释器是一个模型。

把1998年的类比讲精确

这个类比必须经得起事实核查,否则就只是一种气氛渲染。所以,下面是那个年代的准确样貌。

PHP 3 于1998年6月发布,把一门动态 Web 语言送进数百万人手中,其默认配置如今看来堪称鲁莽:来自查询字符串、Cookie 或服务器的外部输入,被直接注册进全局作用域。register_globals 默认开启,一个攻击者可控的变量,可以悄无声息地变成您的代码所信任的变量。修复用了四年。2002年4月发布的 PHP 4.2.0 更改了这一默认值,发布公告说得直截了当:“External variables (from the environment, the HTTP request, cookies or the web server) are no longer registered in the global scope by default.”(来自环境、HTTP 请求、Cookie 或 Web 服务器的外部变量,默认不再注册进全局作用域。)8 那个时代另一根标志性的拐杖是魔术引号(magic quotes):靠运行 addslashes 伪造出 SQL 注入安全的表象却没有其实质,比 register_globals 还多活了好几年,项目组才最终将其废除。不安全的默认配置、安全的幻觉、文化跟上之前长达数年的滞后——这就是早期 Web 的应用层。

文化不是自己到来的,而是被逼出来的。2001年7月19日,“红色代码”(Code Red)蠕虫利用微软 IIS Web 服务器中的一个缓冲区溢出发难,按 CAIDA 的统计,“不到14小时内,就有超过359,000台计算机感染了 Code-Red(CRv2)蠕虫”。9 2003年1月25日,Sapphire/Slammer 蠕虫命中微软 SQL Server 的一个缓冲区溢出,把自己塞进376字节的数据包,“在十分钟内感染了能找到的绝大多数易受攻击主机”,成为截至当时史上传播最快的蠕虫。10 那些是基础设施层面的蠕虫,不是 PHP 漏洞,我不会把两者混为一谈。重点在于那十年的整体形状:每一层都是不安全的默认配置,而安全文化直到不安全变得切肤地、公开地昂贵之后才成熟起来。“默认安全”是整个行业用蠕虫换来的一课。

把这一切映射到2026年,对应关系令人不安。不安全的默认配置:信任回调 code、跳过同意检查的智能体客户端。安全的幻觉:一个权限弹窗,罩在一枚作用域为 admin:* 的令牌上。爆炸式增长的安装基数:万物皆有 MCP 服务器,一键添加,无人审计。这个生态目前还缺的,是那只蠕虫。它已经有了1998年的默认配置和2001年的目标画像,只差属于自己的倒逼机制了。

操作者的防御姿态

您没有等待文化成熟的余地。这些工具您现在就在用,所以生态尚未替您画好的边界,得由您自己来画。我使用的框架,是把三要素当作一份操作检查清单:对任何一个智能体,问它可以读什么、可以执行什么、可以外传什么,然后在每一项上都压上一道确定性的防护。

能力 智能体做什么 哪里会出错 防护手段
读取 摄入文件、网页、工具输出、MCP 响应 不受信任的内容携带注入的指令 把每一个抓取来的字节都当作敌意输入,绝不当作指令;给外部数据源打标签并加以隔离
执行 运行 shell、编辑文件、按设计调用工具 精心构造的数据变成命令(注入、混淆代理人) 在调用之前完成评估的权限规则;对工具和 MCP 服务器采用白名单;新的本地服务器必须征得同意
外传 发起出站请求、写入代码仓库、向 API 提交数据 读取加执行补全了致命三要素 出站管控;封锁私有及链路本地 IP 地址段;令牌作用域遵循最小权限;绝不透传令牌

防护这一列不是愿景,而是确定性的,而确定性正是要害所在。钩子在生命周期事件上触发,其退出码是模型无法辩驳的;权限规则在工具运行之前完成评估,而不是之后。正是在这一层,“智能体不应该做 X”变成了“智能体做不了 X”,也只有这一层,是提示注入载荷无论如何也说服不过去的。当您无法信任输入,也无法指望模型在这些输入面前自我约束时,就在模型控制不了的边界上强制执行。

第二道控制读起来像生产力功能,实则是安全功能。当智能体在执行之前把工作编译成一份可审查的计划时,审查这份计划本身就是一次安全审查。一个四十行的工作流脚本,写明了它将调用的每一个工具、将触碰的每一个文件,就是一份您一分钟就能读完的威胁模型。您审计不了一万次实时决策,但可以在它花掉任何成本之前,审计那份将会生成这些决策的计划。

还要把这种不对称性放在眼前:制造这些 CVE 的能力,同样能找到它们。一位 Anthropic 研究员用一个编码智能体加一段十行的脚本,挖出了一个潜伏23年的 Linux 内核漏洞和22个 Firefox CVE。您桌上的这件工具,就是一台对准您自己技术栈的漏洞扫描器——只要您愿意对准。防御者今天就能把漏洞发现自动化,分诊层也正在搭建之中。这是1998年的 Web 不曾拥有的唯一优势。

我的判断

下面是我认为将要发生的事,具体到足以被证伪。智能体生态会先迎来自己的“红色代码”时刻,然后才建立起安全文化,因为 Web 当年就是按这个顺序走过来的。最可能的倒逼机制,是一个借共享 MCP 服务器在智能体之间自我传播的提示注入载荷,或者一起追溯到某个流行却疏于审计的集成的大规模凭据外泄事件。它的制造成本会很低,因为能找到内核漏洞的那批模型同样写得出它,而“大浪将至”的警告,从来就不只是说给防守方听的。

尘埃落定之后,“默认安全”将不再是可选项。MCP 客户端出厂即默认开启同意对话框、校验令牌受众、拒绝不匹配的重定向 URI——就像 PHP 最终以 register_globals 默认关闭出厂一样。权限层从可选加入转向默认拒绝。活下来的集成,是那些把规范的安全附录当作规范本身来对待的集成。

令人不安的是时间线。Web 大约用了1998年到2005年才把“默认安全”内化于心,蠕虫与蠕虫之间还有数年时间可以思考。智能体技术栈的复合速度更快:每个开发者的机器上都放着价值更高的目标,攻击者的工具链随每一代模型进步。1998年问题是真实存在的。唯一悬而未决的问题是:我们是在蠕虫写下结局之前依这个类比行动,还是之后。

关键要点

  • 对每一个智能体做三要素审计。 写下每件工具能读什么、能执行什么、能外传什么,然后确认每一行都压着一道确定性防护。没有防护的能力就是您的暴露面,也是下一个载荷的落点。
  • 对 MCP 服务器采用白名单;把每一个命令参数都当作不受信任的执行。 添加一个集成只需一次点击,审计它却绝非如此,所以要把注册环节收口到一份经过审查的清单。本文四个 CVE 中有两个是 MCP 客户端里的 OAuth 流程漏洞:这次握手是一道边界,不是一道过场。
  • 把计划时刻设为审查关口。 让智能体先把意图编译成可审查的计划,并在执行之前像读威胁模型一样读它。一个写明了自己要用哪些工具、动哪些文件的脚本,一分钟即可审计完毕;一万次实时工具调用则不可能。
  • 先把扫描器对准自己。 制造这些 CVE 的能力同样能发现它们。在别人用他们的智能体扫您之前,先对您自己的代码和依赖跑一遍智能体辅助的安全排查。

常见问题

MCP 服务器安全吗?

默认并不安全,也参差不齐。MCP 是一个协议,其安全性取决于每个服务器和客户端如何实现它。2025年针对 mcp-remote(CVSS 9.6)和 Anthropic 的 MCP Inspector(CVSS 9.4)的披露表明,连参考工具都交付过严重的 RCE 漏洞。34 规范记载了主要的攻击类别——混淆代理人、令牌透传、SSRF、本地服务器沦陷——并给出了具体的缓解措施。5 请把每个服务器都当作一个特权集成来对待:只运行您信任或审计过的服务器,显式将其列入白名单,并假定任何您连接的服务器都可能影响您的智能体。

什么是提示注入?

提示注入是指攻击者把指令夹带进 AI 系统读取的不受信任输入中,而模型把这些指令当作出自您本人的指示来执行。Simon Willison 于2022年9月类比 SQL 注入创造了这个术语:受信任的指令与不受信任的输入被拼接进同一个提示词,再由模型解释执行,且没有可靠的方法分辨哪一部分来自攻击者。6 它对智能体尤其危险,因为数据成了攻击载体,而转义无法解决问题——解释器是一个语言模型。

什么是致命三要素?

这是 Simon Willison 在2025年6月为三种能力起的名字,三者凑在一起就使一个智能体可被利用:访问您的私有数据、接触不受信任的内容、对外通信的能力。7 三者俱备的智能体,可能被注入的内容操纵着去读取您的机密并把它们送到攻击者手里。多数有能力的智能体默认三者俱备,所以正确的做法是逐项加防护,而不是指望模型自己抵抗。

如何保护运行在本机上的智能体?

从模型控制不了的边界做起。使用在工具运行之前完成评估的权限规则和钩子,让被攻陷的提示词无法说服系统去做您禁止的动作。对工具和 MCP 服务器采用白名单,要求新的本地服务器在执行之前征得同意,并把每一份凭据的作用域收到最小权限,让被盗令牌的波及范围尽可能小。封锁通往私有及链路本地 IP 地址段的出站请求,切断外泄路径。然后在大型操作之前审查智能体的计划——躲过读取边界的注入,会在这里被抓住。

参考来源


  1. CVE-2026-13524,CircL Vulnerability-Lookup,vulnerability.circl.lu/vuln/cve-2026-13524(2026年6月29日发布)。CherryHQ cherry-studio 1.9.0 至 1.9.6 版本 MCP OAuth Local Callback Server 中的不当授权(CWE-285),文件为 src/main/services/mcp/oauth/callback.ts。“The manipulation of the argument code leads to improper authorization.” CVSS 3.1 基础评分 5.6(中危);GHSA-9c5h-h4mj-p5ch;修复方案见 pull request #15388。 

  2. CVE-2026-13534,CircL Vulnerability-Lookup,vulnerability.circl.lu/vuln/cve-2026-13534(2026年6月29日发布)。CherryHQ cherry-studio 1.9.7 及之前版本 CherryIN preload API 中的授权绕过(CWE-639),位于 src/main/services/memory/MemoryService.tssha256 函数。CVSS 3.1 基础评分 5.0(中危);GHSA-qwwm-4xhq-q4m4;厂商说明 memory 功能计划在 v2 中移除。 

  3. CVE-2025-6514,GitHub Advisory Database,github.com/advisories/GHSA-6xpm-ggf7-wc3p(2025年7月9日发布)。“OS command injection when connecting to untrusted MCP servers due to crafted input from the authorization_endpoint response URL”,影响 mcp-remote >= 0.0.5、< 0.1.16 各版本;CVSS v3 基础评分 9.6(严重);已在 0.1.16 中修复。由 JFrog Security Research 发现并详述;客户端暴露面(Claude Desktop、Cursor、Windsurf)见 JFrog 的通告文章。 

  4. CVE-2025-49596,Tenable Research,“How Tenable Research Discovered a Critical Remote Code Execution Vulnerability on Anthropic MCP Inspector”,tenable.com(2025年7月9日)。Anthropic MCP Inspector 0.14.1 之前版本中的 RCE,根因是 Inspector 客户端与代理之间缺失身份验证检查,恶意网站可经由 CORS 与 DNS 重绑定加以利用;CVSS 9.4(严重);0.14.1 通过增加代理会话令牌修复。 

  5. “Security Best Practices”,Model Context Protocol 规范,修订版 2025-06-18,modelcontextprotocol.io/specification/2025-06-18/basic/security_best_practices。记载了混淆代理人问题,并强制要求 MCP 代理服务器“MUST implement per-client consent”,同时校验 OAuth state 并精确匹配重定向 URI;还涵盖令牌透传(“MCP servers MUST NOT accept any tokens that were not explicitly issued for the MCP server”)、SSRF、会话劫持与本地服务器沦陷。 

  6. Simon Willison,“Prompt injection attacks against GPT-3”,simonwillison.net/2022/Sep/12/prompt-injection/(2022年9月12日)。创造了这一术语:“I propose that the obvious name for this should be prompt injection”,并给出与 SQL 注入的类比:受信任指令与不受信任输入的拼接。 

  7. Simon Willison,“The lethal trifecta for AI agents: private data, untrusted content, and external communication”,simonwillison.net/2025/Jun/16/the-lethal-trifecta/(2025年6月16日)。命名了组合起来即令智能体可被利用的三种能力:“access to your private data”、“exposure to untrusted content”与“the ability to externally communicate”。 

  8. “PHP 4.2.0 Release Announcement”,php.net/releases/4_2_0.php(2002年4月)。记录了这次安全默认值的变更:“External variables (from the environment, the HTTP request, cookies or the web server) are no longer registered in the global scope by default.” 这就是 register_globals 默认关闭的那次变更,距 PHP 3 在1998年交付默认开启的行为约四年。 

  9. “CAIDA Analysis of Code-Red”,CAIDA,caida.org/archive/code-red。“More than 359,000 computers were infected with the Code-Red (CRv2) worm in less than 14 hours”,始于2001年7月19日,利用的是微软 IIS 中的一个缓冲区溢出;峰值时“more than 2,000 new hosts were infected each minute”。 

  10. “The Spread of the Sapphire/Slammer Worm”,CAIDA,caida.org/archive/sapphire。于2003年1月25日星期六约 5:30 AM UTC 释放,利用微软 SQL Server 中的一个缓冲区溢出;该蠕虫构造376字节的数据包,“infected most of the vulnerable hosts that could be found within ten minutes”,是截至当时史上传播最快的蠕虫。 

相关文章

静默外泄:你从未构建的攻击面

一个恶意网页把指令注入到 URL 元数据里。代理抓取页面、读到毒饵,然后把 API 密钥外发了出去。没有报错,没有日志。

3 分钟阅读

Your Agent Has Two Untrusted Inputs

AI agents have two untrusted inputs: code the model writes and tool output it reads. One now has a real WASM sandbox; th…

12 分钟阅读

你的AI智能体写代码的速度远超你的阅读速度

本周有五个研究团队发表了关于同一问题的研究:AI智能体生成代码的速度远快于开发者理解代码的速度。债务积累在你的脑中。

4 分钟阅读