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。