警惕恶意代码库:Visual Studio Code Python扩展中的代码执行漏洞

本文详细分析了Visual Studio Code Python扩展中的一个高危代码执行漏洞,攻击者可通过恶意代码库中的虚拟环境设置实现任意代码执行,影响超过1650万用户。

漏洞详情

某次审计客户Python Web应用时,我注意到编辑器出现警告提示:

pylint未安装

本以为只需运行pip install --user pylint即可解决,但警告依然存在。此时注意到编辑器左下角显示venv-test——VSCode竟然自动选择了项目文件夹中的Python虚拟环境!为验证猜想,我在该虚拟环境中安装pylint后警告果然消失。

这引起了我的警觉。于是我在pylint源文件中添加os.exec("/Applications/Calculator.app"),计算器程序竟直接被启动!这堪称最简单的代码执行漏洞。

漏洞机制

VSCode的危险行为在于:无需用户交互即可自动激活项目文件夹中的虚拟环境。攻击者只需将恶意文件夹添加到工作区并打开Python文件即可触发漏洞。

当发现虚拟环境时,VSCode会将其路径保存至.vscode/settings.json。如果克隆的代码库中存在该文件,系统将直接加载并信任该值而不询问用户。实际上,攻击者可将虚拟环境隐藏在任何代码库中。

概念验证(PoC)

可尝试以下无害PoC代码库(macOS系统将打开计算器):

  1. git clone git@github.com:doyensec/VSCode_PoC_Oct2019.git
  2. 将克隆的代码库添加到VSCode工作区
  3. 在VSCode中打开test.py

该代码库包含"恶意"的settings.json文件,其指向路径totally_innocuous_folder/no_seriously_nothing_to_see_here中的虚拟环境。虽然在此简单示例中容易发现异常,但在真实代码库中极易被忽略。更重要的是,VSCode仅通过打开Python文件就执行来自文件夹的代码,这显然是不可接受的行为。

披露时间线

  • 2019年10月2日:发现漏洞
  • 2019年10月2日:向微软提交安全建议
  • 2019年10月8日:微软回应,在vscode-python问题跟踪器创建#7805
  • 2020年1月7日:向微软询问解决时间表
  • 2020年1月8日:微软回复称问题将在2020年4月中旬修复
  • 2020年3月16日:Doyensec发布安全公告和博客文章

修正说明

2020年3月17日:原文声称该扩展默认与编辑器捆绑发布,经@justinsteven指正,该说法不准确,已移除该表述。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计