RCE en Visual Studio Code a través de su extensión de Python

El equipo de Doyensec ha encontrado una vulnerabilidad en la popular extensión para Python de Visual Studio Code que permitiría la ejecución remota de código.

La extensión de Python, con aproximadamente 16.5 millones de instalaciones, cuenta con un fallo de diseño que permite ejecutar el código encontrado en el ‘virtualenv‘ de un proyecto sin notificar al usuario. Este comportamiento es utilizado para tareas como reestructuración de código, autocompletado, etcétera. Sin embargo, el diseño inseguro de esta extensión permitiría a un atacante ejecutar código arbitrario en el sistema de una víctima que clone un repositorio malicioso basado en Python.

En una de sus auditorías a una aplicación web basada en Python, un ingeniero de Doyensec se dio cuenta de que Visual Studio había seleccionado automaticamente el ‘virtualenv‘ del proyecto que estaba auditando y que estaba tratando de ejecutar el componente ‘pylintsin ningún tipo de confirmación del usuario. Esto le hizo sospechar que sería posible una ejecución de código: procedió a añadir la línea os.exec(«/Applications/Calculator.app») en el código fuente del componente ‘pylint‘ y tras instalar el componente y forzar su ejecución abriendo un fichero de tipo Python, la calculadora del sistema se abrió y sus sospechas se confirmaron.

Bastaría con crear un proyecto con un fichero ‘settings.json’ que seleccionase el entorno malicioso por defecto para poder explotar la vulnerabilidad cuando la víctima clone y abra alguno de los ficheros del proyecto.

Doyensec ha publicado una prueba de concepto en su repositorio de Github que ejecuta la calculadora de macOS:

  1. Primero hay que clonar el proyecto: git clone git@github.com:doyensec/VSCode_PoC_Oct2019.git
  2. Añadirlo al entorno de trabajo de Visual Studio
  3. Abrir el fichero test.py desde Visual Studio

Este repositorio contiene un fichero ‘settings.json’ «malicioso» que selecciona el ‘virtualenv‘ situado en la carpeta ‘totally_innocuous_folder/no_seriously_nothing_to_see_here’.

La extensión vulnerable no está instalada por defecto y el fallo ya ha sido revelado de forma responsable a sus desarrolladores quienes han estimado que estará resuelto a mediados de abril de 2020.

Más información:
Tweak settings to prevent accidental execution of code from within a workspace. Issue #7805
https://github.com/microsoft/vscode-python/issues/7805

Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.