檔名多一個點,VS 裡的 Copilot 能執行指令

微軟 10 月 13 日的每月更新修補了一個與 Copilot 相關的遠端程式碼執行漏洞,編號為 CVE-2026-103572,影響 Visual Studio(含 2026、2022 等舊版本)以及 SQL Server Management Studio(SSMS)。發現者是資安研究員 Johann Rehberger,他在同一天於個人部落格 Embrace The Red 公開了技術細節。

這兩款產品共用一個核心函式庫 Microsoft.VisualStudio.Copilot.Core.dll,漏洞就出在這裡,因此一個問題同時波及兩個產品。

一個句點如何繞過檢查

Copilot 在 IDE 裡可以替使用者寫入檔案,但 .mcp.json、Visual Studio 的設定檔這類組態檔被列為受保護對象,不允許它碰。問題出在檢查方式:驗證邏輯比對的是原始字串。

Windows 的 Win32 層有條老規矩,檔名結尾的句點會被自動移除。Rehberger 引用了微軟自己的文件:"File and Folder names that end with the ASCII Period (0x2E) character will also be saved without this character." 因此在驗證時,settings.json. 與 settings.json 並不是同一個字串,檢查便放行;真正寫入磁碟時,結尾的點被吃掉,寫進去的就是那個受保護的檔案。

攻擊鏈大致如下:攻擊者先透過間接提示詞注入影響 Copilot,例如讓某個 MCP 伺服器回傳的資料夾帶指令;Copilot 照辦,把攻擊者想要的內容寫進 .mcp.json 之類的組態檔;IDE 讀取組態時便會啟動惡意指令。在 Visual Studio 裡,修改相關工具路徑設定也能觸發指令執行。

Rehberger 還順帶通報了幾個問題:用 ..\ 做路徑穿越可以讀到受限檔案,部分檔案會洩漏安裝識別碼,MAI-Code-1-Flash 模型對間接提示詞注入的抵抗力偏弱。依他的分析,微軟的修補方式是加入一次 GetFullPath 呼叫,先將路徑正規化,去除結尾的點並展開 ..,再進行比對。

同類漏洞的第二次

這不是 Rehberger 第一次從組態檔下手。2025 年 8 月,他曾揭露 VS Code 中 GitHub Copilot 的一個遠端程式碼執行漏洞(CVE-2025-53773):提示詞注入讓 Copilot 改寫工作區的 settings.json,打開免確認自動執行工具的開關,之後就能直接跑指令。那次同樣是隨微軟例行更新修復。

兩次放在一起看,手法是一致的:代理程式被允許寫檔,組態檔決定了代理程式和 IDE 能做什麼,只要能讓代理程式寫到組態,權限就被它自己放大了。2025 年那次的教訓是替組態檔加上保護清單,這次被繞過的正是這一層清單。Rehberger 在文中的總結是:

"Security controls around agents must hold even when the agent itself is compromised or misaligned."

圍繞代理程式的安全控管,必須在代理程式本身被攻陷或行為失準時依然成立。

使用者該怎麼做

從時間線來看,Rehberger 於 8 月 4 日提交報告,8 月 4 日至 7 日補充了對 Visual Studio 的影響與利用細節,8 月 30 日再次跟進;微軟 9 月 16 日確認,10 月 11 日告知獎金為 0,10 月 13 日發布修復。微軟為何不給獎金,公開資料中沒有說明。

對於使用 Visual Studio 和 SSMS 的團隊,處理方式只有一條:盡快安裝本月更新。以 Copilot 連接第三方 MCP 伺服器的環境風險更高,因為提示詞注入的入口正是這些外部資料。

參考來源:Embrace The Red 技術部落格、CocoLoop、微軟安全更新指南;CVE 編號、CVSS 分數與揭露時間點,以研究人員部落格和微軟公告為準。