聚焦源代码安全,网罗国内外最新资讯!
编译:代码卫士
Visual Studio 代码远程开发扩展(Code Remote Development Extension) 1.50 未能在将其用作 ssh 命令的参数前清理 host 字段,导致注入 ProxyCommand 选项,从而运行任意代码。
产品描述
微软称,Visual Studio Code 远程开发可使用户使用容器、远程及其或 Windows Subsystem for Linux (WSL) 作为功能全面的开发环境。
用户能够:
在用户部署的操作系统上开发或者使用更大的或更专门的硬件。
分离开发环境,避免影响本地机器配置。
使新贡献者能够动手并让所有人都位于统一环境中。
使用本地OS上不可用的工具或运行时,或管理它们的多个版本。
使用 Windows Subsystem for Linux 开发自己的部署在 Linux 上的应用程序。
从多个机器或位置访问现有的开发环境。
调试在别处如在客户站点或云中运行的应用程序。
获得这些权益,无需在本地机器部署源代码。远程开发扩展包中的每个扩展都能够直接在容器内、WSL 中或远程机器上运行命令和其它扩展,使得在本地运行时未察觉任何变化。
CVE 编号
CVE-2021-17148
根因分析
“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
1、安装 Visual Studio Code
2、安装”远程开发“扩展
3、打开浏览器
4、访问如下URL:
vscode://vscode-remote/ssh-remote+-oProxyCommand=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -c msg %username% command_injection" "a@127.0.0.1+/a
5、确认打开VSCode
6、选择任意OS(Linux/Windows/MacOS)
7、通过 “command_injection” 信息发现由 PowerShell 执行的弹出信息
只要编辑 ProxyCommand,就可能在 Linux 和 MacOS 上复现同样的攻击。
影响
能够强迫受害者访问恶意链接的攻击者能够在系统上执行任意命令。
修复方案
将Visual Studio 代码远程开发扩展更新至 1.51 或更高版本
披露时间线
2020年8月17日:发现并将漏洞告知微软
2020年8月20日:微软证实漏洞存在
2020年11月2日:微软发布修复方案
2021年9月24日:Shielder 公司发布本公告
推荐阅读
微软紧急修复两个 RCE,影响 Windows Codecs 库和 Visual Studio
坐火车太无聊,我溜入微软 VS Code官方GitHub仓库,但没敢发动供应链攻击
原文链接
https://www.shielder.it/advisories/remote-command-execution-in-visual-studio-code-remote-development-extension/
题图:Pixabay License
本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的产品线。
觉得不错,就点个 “在看” 或 "赞” 吧~