Skip to main content

Snyk descubre vulnerabilidades de seguridad en la cadena de suministro de las extensiones de Visual Studio Code

Escrito por

26 de mayo de 2021

0 minutos de lectura

Hemos sido testigos de un aumento constante de los incidentes de seguridad de la cadena de suministro. Desde la explotación de fallas de seguridad en administradores de paquetes de código abierto hasta la vulneración de sistemas de integración continua y la incorporación de puertas traseras en artefactos de software. Ahora, estos incidentes empiezan a extenderse al lugar donde los desarrolladores pasan la mayor parte del tiempo: su entorno de desarrollo integrado y, en particular, el IDE Visual Studio Code.

En este artículo:

Hasta hace poco, no se habían descubierto vulnerabilidades de seguridad en las extensiones de VS Code, lo que generaba una sensación de seguridad entre millones de desarrolladores. Sin embargo, Snyk descubrió y divulgó vulnerabilidades que representan una amenaza real e inminente para quienes usan estas extensiones y luego interactúan con un agente malicioso. El posible nivel de compromiso es tan grave que se podría ejecutar código de forma remota en la máquina de un desarrollador con solo engañarlo para que haga clic en un enlace.

Esta nueva amenaza a la seguridad de la cadena de suministro de las extensiones de VS Code podría convertirse en un nuevo campo de ataque y afectar potencialmente a más de 2,000,000 de desarrolladores. Veámosla más de cerca.

Un Marketplace de extensiones de VS Code vulnerable

El Marketplace de extensiones de VS Code cuenta con cerca de 25,000 extensiones. Básicamente, son archivos comprimidos de código JavaScript similares a los paquetes de npm y, de hecho, también dependen del ecosistema de npm como fuente de dependencias de terceros para crear las extensiones.

Al igual que el registro de npm, el Marketplace de extensiones de VS Code es un ecosistema abierto que permite a cualquier desarrollador registrarse y enviar sus extensiones. Una vez cargadas y verificadas, estas extensiones quedan disponibles para los desarrolladores desde el IDE de VS Code.

Para que algunos de estos ataques funcionen, un desarrollador debe usar activamente la extensión. Algunas de las extensiones vulnerables que Snyk descubrió son:

  • Open in Default Browser: más de 520,000 descargas. Permite a los desarrolladores abrir archivos en un navegador para inspeccionarlos de forma fácil y rápida (algo común con los archivos HTML).

  • Instant Markdown: más de 120,000 descargas. Permite a los desarrolladores analizar la sintaxis Markdown de un archivo y luego presentarlo como HTML para abrirlo en un navegador. Es similar a cómo se mostraría un archivo Markdown, como README.md, en la página principal de un repositorio de GitHub.

Al ver estas extensiones populares, ¿cuántas veces hemos instalado una extensión en nuestro editor sin ser del todo conscientes de que estamos permitiendo la entrada de código escrito por una persona desconocida? ¿Código que ahora podría tener acceso a un entorno de desarrollo, o incluso controlarlo? ¿Cuántas veces el simple hecho de usar una extensión podría haber puesto en riesgo a los desarrolladores?

El impacto de las extensiones vulnerables de VS Code en los desarrolladores

Al principio, podría parecer que una extensión solo amplía las capacidades del IDE, pero el alcance de su impacto es mucho más grave. Si se compromete una extensión en la laptop de un desarrollador, significa que, como mínimo, el atacante atravesó el firewall y obtuvo acceso a las redes corporativas internas. Pensemos también en la información confidencial a la que tienen acceso los desarrolladores. Aunque un atacante solo pueda leer archivos, como ocurre con una vulnerabilidad clásica de path traversal, podría recopilar secretos, por ejemplo, al acceder a los archivos de configuración del entorno del desarrollador o a sus claves SSH. Esto, a su vez, podría darle acceso de lectura y escritura a los repositorios de código fuente.

Como puedes ver, un entorno de desarrollo tiene muchas capacidades y suele considerarse una entidad confiable dentro de una red, por lo que los desarrolladores son un objetivo de ataque muy atractivo.

De hecho, en noviembre de 2018 una vulnerabilidad de seguridad similar afectó al entorno de ejecución de Node.js. La vulnerabilidad, identificada como CVE-2018-12120, ponía a los desarrolladores en una situación potencialmente peligrosa porque el puerto del depurador del entorno de ejecución escuchaba en todas las interfaces de red disponibles. Imagina que estás depurando una aplicación de Node.js o JavaScript con el comando node --debug mientras trabajas desde una red pública e insegura, como la de una cafetería. Esto podría permitir que los atacantes se conectaran a la interfaz de depuración y ejecutaran código JavaScript arbitrario en tu entorno de desarrollo.

Si crees que el ejemplo anterior es un caso poco común, debes saber que Rapid7 convirtió en arma un exploit que apunta específicamente a esta vulnerabilidad de inyección de comandos en el depurador de Node.js, al crear un módulo para el framework de explotación Metasploit.

Ataques a las extensiones de VS Code

Veamos más a fondo una de las extensiones vulnerables y cómo un atacante podría aprovecharla.

En la siguiente demostración, vamos a explotar una vulnerabilidad de código en la extensión Instant Markdown. Una vez instalada desde el Marketplace, puedes ver cómo funciona el caso de uso habitual de previsualizar archivos Markdown:

Página de la extensión Instant Markdown de Visual Studio Code que muestra código Markdown en el editor junto con su vista previa en el navegador.

En cuanto ves un archivo Markdown, como README.md de un repositorio, la extensión inicia un servidor web que escucha en localhost y el puerto 8090. Ni siquiera tienes que abrir el panel de vista de la extensión en VS Code. Se inicia automáticamente en segundo plano.

Si abres un archivo README.md en el editor de VS Code y luego visitas http://localhost:8090, verás el contenido de README.md como un archivo HTML.

El problema empieza porque la extensión Instant Markdown tiene una vulnerabilidad de path traversal. Esto significa que cualquier persona con acceso a ese servidor local puede solicitar y recibir cualquier archivo del entorno donde se ejecuta VS Code, que en esencia es la máquina del desarrollador.

Por ejemplo, si estuviera usando esa extensión y tuviera un archivo con el logotipo de Snyk en la carpeta de descargas, como ~/Downloads/snyk-dog.svg, y ejecutara el siguiente comando curl en la línea de comandos, el resultado incluiría el contenido de ese archivo:

curl "http://localhost:8090/foo/?/../../../../../Downloads/snyk-dog.svg"

Quizás te preguntes cómo podría alguien acceder a un archivo que sirve un servidor web local. ¿Y si te engañaran para que visitaras un sitio web? Solo necesitan que abras en tu navegador un sitio web controlado por el atacante.

Este diagrama de flujo explica cómo se eluden los problemas relacionados con CORS:

Diagrama de secuencia que muestra cómo una URL maliciosa lleva desde el navegador de una víctima, a través de un iframe y una extensión de VS Code, hasta un atacante, y expone archivos locales secretos.

El vector de ataque descrito anteriormente aprovecha la vulnerabilidad de path traversal junto con la falsificación de solicitudes del lado del servidor y algunos ingeniosos trucos de JavaScript, como forzar una descarga en el entorno del usuario y usar un iframe y la API Window.postMessage del navegador para comunicar los datos necesarios.

En este video se muestra todo el proceso en acción. Kirill Efimov, investigador de seguridad de Snyk, inicia un servidor web bajo su control, lo hace accesible a través de ngrok para simular un sitio HTTP disponible en Internet y termina robando las claves SSH del desarrollador que usa VS Code y una extensión vulnerable:

Snyk publica los hallazgos de su investigación sobre la seguridad de la cadena de suministro de VS Code

Este es solo un ejemplo de cómo los atacantes buscarán formas de explotar las extensiones de VS Code y este vector de la cadena de suministro para atacar a los desarrolladores. De hecho, encontramos otras extensiones vulnerables a vectores de ataque similares, como LaTeX Workshop, que tiene más de 1,200,000 descargas.

Antes de compartir estos resultados públicamente, Snyk siguió un proceso de divulgación responsable e informó a los mantenedores correspondientes sobre los problemas señalados aquí para coordinar una solución.

Te invito a leer más sobre los detalles técnicos de la historia de la cadena de suministro de VS Code, investigada por los expertos de seguridad de Snyk Raul Onitza-Klugman y Kirill Efimov. Ellos realizaron la investigación, crearon las pruebas de concepto y colaboraron con los mantenedores de las extensiones para resolver el problema y mantener seguro nuestro ecosistema.

Cómo mitigar los problemas de seguridad de las extensiones de VS Code

Si desarrollas estas extensiones o programas en JavaScript, TypeScript o Java, puedes y debes usar una herramienta que te ayude a encontrar fallas de seguridad mientras programas en tu IDE. No me refiero a un linter estándar, sino a Snyk Code, una herramienta de análisis estático de seguridad de aplicaciones (SAST) anunciada recientemente que puedes usar directamente desde tu IDE. También puedes ejecutarla con la CLI de Snyk: $ snyk code test.

Esta captura de pantalla muestra cómo Snyk Code detecta esta vulnerabilidad de path traversal en la extensión Instant Markdown para VS Code:

IDE que muestra código TypeScript marcado por Snyk por una vulnerabilidad de recorrido de rutas de gravedad alta (CWE-23).

Otra forma de encontrar problemas de seguridad en el código detectados mediante análisis estático en varios repositorios de proyectos es importar tus repositorios de GitHub a Snyk, que identificará estas posibles vulnerabilidades. Aquí puedes ver la misma información sobre la vulnerabilidad de path traversal, anotada en la aplicación web de Snyk:

Panel de análisis de código que muestra un problema de recorrido de rutas de gravedad alta en código TypeScript, con la llamada vulnerable a sendFile resaltada

Como desarrollador que usa el IDE de VS Code, debes prestar más atención a las extensiones que instalas y ser consciente de los riesgos. Lamentablemente, el Marketplace aún no cuenta con herramientas integradas para verificar la seguridad de las extensiones. Sin embargo, para las bibliotecas de código abierto de tus propios proyectos, ya sea en npm o en otro lugar, siempre puedes usar Snyk (¡es gratis!) para encontrar y corregir vulnerabilidades de seguridad en esos paquetes.

Resumen

Los problemas de seguridad de la cadena de suministro seguirán creciendo y se volverán más profundos y dirigidos al ecosistema de desarrolladores. Esperamos que leer estos hallazgos de investigación te ayude a tomar aún más conciencia de los posibles riesgos e implicaciones de seguridad.

Si quieres ver una demostración en vivo del hackeo de las extensiones de Visual Studio Code, te invito a ver esta sesión el 8 de junio a las 3 p. m. UTC con Liran Tal, director de Developer Advocacy en Snyk, y Kirill Efimov, investigador de seguridad en Snyk:

https://www.youtube.com/watch?v=pkvywMhd30c

I can use VS Code to hack into your development environment

Aquí tienes otros estudios de caso similares que recomendamos:

Leer más

blog feature snyk container custom base recommendations
Blog

Presentamos Evo Agentic AppSec: seguridad al ritmo del desarrollo con IA

El desarrollo impulsado por IA supera el ritmo de los flujos de trabajo de seguridad tradicionales. Agentic AppSec de Snyk usa agentes de seguridad para encontrar, corregir y verificar vulnerabilidades de forma continua, mientras las personas definen el estándar.

blog feature ai violet
Blog

VulnBump: ¿Pueden los agentes de IA corregir dependencias vulnerables sin romper la compilación?

VulnBump prueba agentes de IA en 307 actualizaciones reales de dependencias. Una corrección cuenta solo si elimina la vulnerabilidad y mantiene en verde la compilación y las pruebas.

Blog

Los modelos de frontera encontraron las vulnerabilidades. Solo el atacante encontró las cadenas.

El análisis estático encontró las fallas, pero solo las pruebas de ataque en vivo demostraron cómo podían encadenarse para provocar brechas. Una comparación de Evo COS, Claude Security y Claude Code Security.