Visual Studio Code Remote Development扩展程序远程执行代码漏洞。
Visual Studio Code Remote Development Extension(VS 代码远程开发扩展)允许用户使用容器、远程机器或Windows Linux子系统作为完整的开发环境。利用该扩展可以:
◼分隔开发环境来避免影响本地机器配置;
◼使用本地操作系统中没有的工具或运行时环境和管理多个版本;
◼使用Windows Linux子系统来开发Linux部署的应用;
◼远程开发扩展包中的每个扩展都可以直接在容器或WSL中运行命令和其他扩展,就像在本地运行一样。
CVE-2020-17148漏洞分析
研究人员在Visual Studio代码远程开发扩展中发现了一个远程代码执行漏洞——CVE-2020-17148,攻击者利用该漏洞可以迫使受害者访问恶意链接,访问恶意链接会导致其可以在系统中执行任意代码。
漏洞产生的原因是“Remote - SSH”扩展的一个参数注入。Remote-SSH扩展是远程开发扩展安全和使用的,会使用主机的SSH二进制文件来与远程主机建立连接。
其中一种触发SSH连接的方式是使用vscode:// URI方案,具体格式为:
vscode://vscode-remote/ssh-remote+$REMOTE_HOST+$PATH_OF_PROJECT_ON_THE_REMOTE_HOST
用户浏览该URI后,VSCode就会打开,扩展就会尝试连接到远程主机$REMOTE_HOST。
并执行命令:ssh -T -D $RANDOM_PORT "$REMOTE_HOST" bash
由于$REMOTE_HOST没有对用户提供的输入进行处理,可能会对SSH二进制文件注入任意参数。
SSH中有一个ProxyCommand的可选性,用来指定执行真实的SSH连接前要执行的命令。
结合以上,就可以使受害者打开一个恶意链接时在受害者主机上执行任意系统命令。
PoC
PoC示例过程如下:
1、安装 Visual Studio Code;
2、安装“Remote Development”扩展(https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack);
3、打开浏览器,访问URL: vscode://vscode-remote/ssh-remote+-oProxyCommand=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -c msg %username% command_injection" "[email protected]+/a
4、确认打开 VSCode
5、选择随机的操作系统(Linux / Windows / MacOS)
6、注意powershell执行的含有“command_injection”消息的弹窗。
通过编辑ProxyCommand也可以在Linux和macOS系统上复现同样的攻击。
补丁
目前,Visual Studio Code Remote Development Extension已经发布补丁,研究人员建议用户尽快更新到v1.51及更高版本。
本文翻译自:https://www.shielder.it/advisories/remote-command-execution-in-visual-studio-code-remote-development-extension/如若转载,请注明原文地址