VSCode Copilot Chat中的遠程代碼執行漏洞
研究人員發現VSCode Copilot的agent模式存在提示注入漏洞,攻擊者可利用applyPatch工具中的TOCTOU漏洞繞過用户確認,實現任意文件寫入,進而通過覆蓋.git/config或shell配置文件實現遠程代碼執行。
文章情報
要點
- Copilot agent模式存在提示注入漏洞,可自動處理GitHub Issue中的惡意提示。
- applyPatch工具存在TOCTOU漏洞,文件重命名操作未檢查目標路徑。
- 攻擊者可構造補丁將敏感文件如.git/config覆蓋,實現遠程代碼執行。
- 漏洞利用需要受害者使用特定模型(如GPT-4.1)並禁用Claude模型。
為甚麼重要
這條新聞值得關注,因為Copilot agent模式存在提示注入漏洞,可自動處理GitHub Issue中的惡意提示。
技術影響
可能影響模型選型、推理成本、產品能力和評測基準。
研究人員在VSCode Copilot Chat中發現了一個嚴重的遠程代碼執行(RCE)漏洞。該漏洞存在於Copilot的agent模式中,當維護者點擊GitHub Issue上的“Code with Agent Mode”時,Copilot會自動處理Issue描述,這可能被惡意提示注入攻擊利用。
漏洞的核心是applyPatch工具中的一個TOCTOU(Time-of-check to time-of-use)漏洞。該工具在處理補丁時,用户確認機制僅檢查文件來源路徑(如README.md),但未驗證重命名操作的目標路徑。攻擊者可以構造一個看似編輯無害文件(如f1)的補丁,但實際將內容寫入敏感位置(如.git/config或.vscode/settings.json)。
具體來説,prepareInvocation方法通過identify_files_needed和identify_files_added函數收集需要確認的URI,但這些函數只解析“*** Update File:”和“*** Add File:”指令,忽略了“*** Move to:”指令。因此,“*** Move to:”指定的目標路徑未經過安全檢查。而在invoke方法中,當存在movePath時,會直接執行未經驗證的文件重命名操作,從而寫入任意文件。
攻擊者可以通過兩種方式觸發該漏洞:直接向Copilot Chat粘貼惡意提示(需要GPT-4.1模型),或創建包含惡意提示的GitHub Issue。當受害者點擊“Code with Agent Mode”時,Copilot自動處理Issue並執行補丁。利用此漏洞,攻擊者可以覆蓋.git/config設置惡意sshCommand,或修改.vscode/settings.json啓用git.autofetch,下一條git fetch命令就會觸發惡意命令,從而竊取GITHUB_TOKEN。
該漏洞影響使用特定模型(如GPT-4.1)且未啓用Claude模型的用户。研究人員已向微軟報告,VSCode團隊已發佈相關補丁。用户應及時更新VSCode擴展,並謹慎處理不熟悉的GitHub Issue。