CVE-2026-30615:提示注入改写 Windsurf 的 MCP 配置导致 RCE
OX Security 在 2026 年 4 月 15 日的公告显示,攻击者可控的内容可让 Windsurf IDE 注册恶意 MCP STDIO 服务器并执行命令——无需任何点击。该类问题涉及多款编码代理,但 CVE 归于 Windsurf。
这是什么?
2026 年 4 月 15 日,OX Security 发布了一份完整披露公告,涵盖一类与应用如何处理 MCP(Model Context Protocol)STDIO 服务器配置相关的命令注入漏洞。其中一项是 CVE-2026-30615,这是编码 IDE Windsurf(构建版本 1.9544.26)中的一个「提示注入到 RCE」问题,当日发布于 NVD,评分为 CVSS 8.0(High),OX 将其影响定级为严重。
机制如下,依据 NVD 和 GitHub 公告 GHSA-wj2m-jvpr-64cq:当 Windsurf 处理攻击者可控的 HTML 内容时,其中嵌入的指令可导致「对本地 MCP 配置的未授权修改,以及自动注册恶意的 MCP STDIO 服务器,从而无需用户进一步交互即执行任意命令」。它归类于 CWE-77(命令注入)。
使 Windsurf 成为 OX「通过提示注入编辑 MCP 配置」这一类中唯一获得 CVE 的细节,正是其零点击路径:模型对不可信内容的处理直接改写了 MCP 的 JSON 配置。同类中被测试的其他编码助手——Cursor、Claude Code、Gemini-CLI、GitHub Copilot——都至少需要用户明确批准才能编辑配置文件,按这些厂商的威胁模型,这不构成漏洞。
工作原理
这是一种落在特权副作用上的间接提示注入。此处不复现任何有效载荷;这条链条是一类问题,而非操作配方。
阶段 发生了什么
-------------------------- ------------------------------------------------
1. 不可信内容 代理摄入攻击者可控的文本:它浏览的网页、克隆仓库
中的 README,或远程 MCP 服务器返回的工具描述。
2. 注入 该内容中隐藏的指令被模型当作命令而非数据来处理。
3. 写入配置 该指令引导代理修改本地 MCP 配置(JSON)——
添加一个传输类型为「stdio」的新服务器条目。
4. 服务器注册 新的 STDIO 条目带有 host 将作为子进程运行的
「command」+「args」 [REDACTED]。
5. 执行 在(重新)启动时,host 以 IDE 进程的权限执行该
命令。即 RCE。
OX 在整份公告中追溯到的根本原因,位于任何单一产品的上游:MCP STDIO 配置指定一个 command 和若干 args,被传递给子进程启动器(例如 StdioServerParameters),没有任何净化或白名单。STDIO 传输按设计就是「运行这个本地进程」。当写入该配置的路径可被不可信输入触及——此处是经由 LLM 自身的上下文窗口——配置权限与代码执行便坍缩为同一个原语。这与MCP STDIO 传输以及其他代理中按工具名注入所记录的结构性问题如出一辙。
为何重要
编码 IDE 是高价值主机:它持有源代码、密钥、SSH 密钥、云凭据和一个 shell。把代理仅仅读取的内容变成主机执行的命令,彻底将人从回路中移除——没有恶意链接可点,也没有对话框可关闭。你克隆的某个依赖中一个被投毒的 README,或代理在「研究」时抓取的一个精心构造的页面,就足够了。
它还会泛化。OX 的公告列出十个 CVE,分属四个家族(LangFlow、GPT Researcher、LiteLLM、Agent Zero、Fay、Bisheng、Jaaz、DocsGPT 等),全部根植于同一种未净化的 STDIO 配置模式。Windsurf 只是最清晰地证明了写入路径可在无点击的情况下被提示注入驱动。多家厂商拒绝修补,称直接执行命令是「预期行为」——这意味着该模式将在生态中持续存在,负担转移到运营方身上。
防御
- 更新 Windsurf。 从构建版本
1.9544.26升级到当前版本。在补丁 SLA 中,把该 IDE 当作任何其他暴露于 RCE 的端点对待。 - 对 MCP 配置更改要求明确、知情的同意。 任何对 MCP 配置的写入——尤其是添加
stdio服务器——都应要求人工批准,并显示将要运行的命令和参数。盲目的「允许编辑文件?」是不够的;用户必须看到将会执行什么。 - 将 STDIO 命令加入白名单,并审计参数。 把
command限制为python/npm/npx是必要但不充分的:OX 通过参数标志绕过了此类白名单(例如借助被允许启动器的选项传入命令)。也要约束参数,或优先选用非 STDIO 传输。 - 将一切检索到的内容视为不可信数据,绝不当作指令。 套用致命三要素视角:一个同时具备私有数据访问、不可信内容暴露与外泄/执行通道的代理,按设计即可被利用。打断其中一条腿——把代理放入沙箱、剥夺其写入自身配置的能力,或隔离不可信的浏览。
- 对代理进程实行最小权限。 在不含长期云凭据、文件系统受限的容器或 VM 中运行编码代理,使得即便配置改写成功,也只产生一个受限的低价值 shell,而非整机沦陷。
- 监控配置文件。 监视
mcp配置路径是否出现意外写入和新的stdio条目;对由 IDE 发起、不匹配已知工具链的子进程发出告警。
状态
| 项目 | 参考 | 日期 | 备注 |
|---|---|---|---|
| OX Security 公告(10 个 CVE) | OX Security | 2026-04-15 | Windsurf 属第 3 类:「通过提示注入编辑 MCP 配置」 |
| CVE-2026-30615 发布 | NVD(来源:MITRE) | 2026-04-15 | CVSS 8.0 High,CWE-77;最后修改 2026-04-17 |
| GitHub 公告 GHSA-wj2m-jvpr-64cq | GitHub Advisory DB | 2026-04-15 | 受影响:Windsurf 1.9544.26 |
| 同类代理(无 CVE) | OX Security | 2026-04-15 | Cursor、Claude Code、Gemini-CLI、Copilot——编辑配置需用户批准 |
重点不是「某个 IDE 出了个 bug」。而是STDIO MCP 配置 + 不可信的模型上下文 = 一个远程代码执行原语,而 Windsurf 证明了写入可以在零用户交互下被触发。防御工作就是让配置写入权限与不可信内容分处于一道模型无法独自跨越的边界两侧。