Visual Studio Copilot / SSMS 曝 RCE 漏洞 CVE-2026-103572:文件名尾点绕过可劫持 MCP 配置
Copilot 的文件保护被「settings.json.」尾点绕过,间接提示注入可借 .mcp.json 拿到 RCE,微软 10 月 13 日已修复。

微软在 2026 年 10 月 13 日的补丁星期二里修复了 Visual Studio 2026 18.10.4 的一个 Copilot 远程代码执行漏洞,编号 CVE-2026-103572。Visual Studio 与 SQL Server Management Studio(SSMS)内置的 Copilot 编码代理对 .mcp.json、settings.VisualStudio.json 这类配置文件设有「写入前需确认」的保护,安全研究者 Johann Rehberger(博客 Embrace The Red)当天披露的完整攻击链显示:这道保护只做字符串比较,而 Windows 落盘时会丢弃文件名末尾的点,于是一个尾点就能让代理静默改写真实配置文件,注册恶意 MCP 服务器并执行任意命令。研究者引述微软的定级为 Important 级 RCE,CVSS 8.8。
要点
- 根因在
Microsoft.VisualStudio.Copilot.Core.dll的GetEditConfirmationTypeAsync:保护文件名校验是纯字符串比较,比较前没有做路径规范化。 - 「settings.json.」这类尾点文件名落盘时被 Windows 去掉尾点,写进真实配置;攻击链的落点是
.mcp.json——IDE 会按它自动启动 MCP 服务器,注册的命令以用户身份执行。 - 微软 10 月 13 日在 VS 2026 18.10.4 修复,发行说明明确列出 CVE-2026-103572;SSMS 同样受影响,官方 CVE 标题即「SSMS SQLtoolsMCPserver.exe RCE」。
背景
Copilot 在 VS 与 SSMS 里的 agent 模式可以替用户改文件、跑工具,微软因此给一批配置文件设了写入确认——随披露文公开的校验代码覆盖 mcp.json、.mcp.json,并以 settings.visualstudio.json 后缀匹配。.mcp.json 另有分量:它本身就是一条执行入口,IDE 会按其中的配置自动启动 MCP 服务器,等价于一个随启动运行的自启项。Rehberger 于 8 月 4 日向微软报告,微软 9 月 16 日确认,补丁 10 月 13 日上线,全程两个月零一周。纳德拉几天前刚说过要「假定 AI 模型已被攻破」,这次披露给那句话补了一个操作系统层面的注脚。
攻击链拆解
这条针对 Copilot 文件保护的攻击链分三步。第一步,攻击者把不受控内容——网页、仓库文件、issue 评论——喂给 Copilot,用间接提示注入驱动代理去写 .mcp.json.:校验看到的是一个不在保护名单里的文件名,放行;Windows 文件系统落盘时去掉尾点,实际生成的正是受保护的 .mcp.json。第二步,用同样手法把恶意服务器写进 enabledMcpServers,并从 disabledMcpServers 移除;IDE 随后自动启动它,注册的命令就以当前用户身份执行。
第三步是定位配置文件。SSMS 的真实 settings.json 路径含实例 ID,研究者利用受信任扩展目录里未被拦截的 .. 路径穿越,读出 SSMS.isolation.ini 中的 InstallationID,拼出完整路径。VS 侧还有第二条路:改写 settings.VisualStudio.json 里的 copilot.general.tools.ripgrepPath,代理每次执行搜索都会调用该路径指向的程序。研究者用微软自家的 MAI-Code-1-Flash 模型复现了注入,PoC 让系统弹出了 calc.exe。
| 日期 | 进展 |
|---|---|
| 2026-08-04 | Rehberger 向微软报告,随后分享多枚可用利用 |
| 2026-09-16 | 微软确认问题 |
| 2026-10-11 | 赏金评定:0 美元 |
| 2026-10-13 | 补丁星期二发布修复,研究者公开细节 |
修复与口径
VS 2026 18.10.4 的修法是在校验里引入 GetFullPath:先规范化路径、去掉尾点、解析 ..,再做比较。先取规范形、后比较,这正是路径校验应有的写法。
读官方记录时有两处口径差异值得留意。其一,MSRC 给这个 CVE 的标题只提 SSMS 的 SQLtoolsMCPserver.exe,「影响 VS Copilot」出自 Rehberger 的分析;其二,发行说明表格未标严重级别,CVSS 8.8 与 Important 均来自研究者引述微软的定级。另外,今年 2 月披露的 CVE-2026-21256 是另一个 Copilot 命令注入漏洞(CVSS 8.8),与本次修复无关,检索时别混。
各方说法
对 CVE-2026-103572 的公开反应集中在披露当天。daily.dev 在 10 月 13 日跟进,把事件概括为「GitHub Copilot 集成于 VS 与 SSMS 的 RCE,CVSS 8.8」。Rehberger 在 X 上确认修复随补丁星期二落地,根因一句话:文件名尾点绕过了 Copilot 的安全控制。他的博客以「Assume Breach. Trust No AI.」收尾——防御设计要假设代理本身已被接管或被误导。他还提到一个钱的问题:这是他两个月里第三例「修复了但不发赏金」的漏洞,这一次 10 月 11 日的评定结果是 0 美元。
编辑判断
CVE-2026-103572 要修的那行代码属于老教训:字符串比较挡不住操作系统的文件名语义,比较之前必须先规范化。放到 agent 场景里,同一行代码的当量被放大——Manus 的 Gmail 集成已经演示过「不可信内容到达执行层」的形状,而 .mcp.json 把「到达」升级成「每次启动都执行」。用 VS 或 SSMS 里 Copilot 的读者应当立即更新到 18.10.4 或更高;混合部署的团队还要核对 SSMS 与 VS 2022 的对应修复版本——这两个版本号在我读到的来源里没有写明,需要到 MSRC 逐项确认。顺带把 .mcp.json 当部署工件管理:锁定、评审、监控变更。微软正把更多入口收进 Copilot,它承载的功能越多,配置劫持的收益就越高——0 美元的赏金与 8.8 的定级之间的落差,值得每个运营漏洞赏金计划的公司掂量。