La campaña Contagious Interview aprovecha VS Code para instalar un backdoor en desarrolladores

Última actualización: enero 22, 2026
  • Amenaza persistente vinculada a Corea del Norte que usa proyectos maliciosos de VS Code como filtro de selección laboral
  • El truco consiste en clonar repositorios en GitHub, GitLab o Bitbucket y abusar de tasks.json para ejecutar JavaScript ofuscado
  • Los atacantes despliegan backdoors como BeaverTail e InvisibleFerret con funciones de espionaje, robo de cripto y minería
  • Se recomienda extremar precauciones con pruebas técnicas, repositorios de terceros y dependencias npm desconocidas

Campaña Contagious Interview en VS Code

La campaña Contagious Interview se ha consolidado como una de las tácticas más llamativas de los últimos tiempos contra desarrolladores, aprovechando pruebas técnicas aparentemente legítimas en Visual Studio Code (VS Code) y en repositorios de código para colar un backdoor en los equipos de las víctimas. El gancho suele presentarse como una oportunidad laboral muy atractiva, acompañada de un proyecto de código que el candidato debe clonar y abrir en su entorno de desarrollo.

Detrás de esta apariencia inofensiva se esconde una operación atribuida a actores vinculados a la República Popular Democrática de Corea (DPRK), que están perfeccionando el uso de tareas de VS Code y código JavaScript ofuscado para conseguir ejecución remota de comandos, robo de información y, en muchos casos, acceso a activos financieros digitales. El objetivo preferente son ingenieros de software, muy especialmente los que trabajan en cripto, blockchain y fintech.

Extensión Amazon Q Developer
Artículo relacionado:
Comprometida la seguridad de la extensión Amazon Q Developer para VS Code

Cómo funciona el engaño en Visual Studio Code

Según análisis recientes, la técnica arranca con un mensaje al desarrollador en el que se le pide que clone un repositorio en GitHub, GitLab o Bitbucket y lo abra con VS Code como parte de una supuesta evaluación técnica. El proceso es, en apariencia, rutinario: clonar, abrir el proyecto y ejecutar algunas tareas.

El punto clave está en el fichero de configuración de tareas de VS Code, normalmente tasks.json, que se configura con la opción runOn: «folderOpen». Esto implica que, cada vez que se abre ese proyecto —o cualquiera de sus archivos— en el IDE, se dispara automáticamente una tarea predefinida sin que el usuario necesariamente sea consciente de lo que ocurre en segundo plano.

En esta campaña, esa tarea se encarga de descargar y ejecutar cargas maliciosas alojadas en dominios de la plataforma Vercel, escogiendo el payload adecuado según el sistema operativo de la máquina comprometida. Cuando la tarea se activa, desencadena la instalación de implantes como BeaverTail y InvisibleFerret, diseñados para ofrecer control remoto y capacidades de espionaje continuado.

La interacción del usuario con VS Code tampoco es inocente: cuando el desarrollador abre el proyecto, el IDE le solicita confiar en el autor del repositorio. Si el candidato concede esa confianza, el propio VS Code procesa automáticamente el fichero tasks.json y puede ejecutar comandos arbitrarios incluidos en él, abriendo así la puerta a la infección.

Esta forma de ataque resulta especialmente peligrosa porque se integra en flujos de trabajo legítimos de los desarrolladores, camuflándose como parte normal de una prueba de código o de un proyecto compartido, lo que dificulta que salten las alarmas de inmediato.

JavaScript ofuscado, diccionarios falsos y múltiples etapas de infección

Las investigaciones de varios laboratorios de seguridad han revelado que los operadores de Contagious Interview han ido perfeccionando la campaña con versiones cada vez más complejas de sus droppers. En iteraciones recientes, se han detectado tareas de VS Code que esconden código malicioso en ficheros de configuración camuflados como simples diccionarios de corrección ortográfica.

Estos supuestos diccionarios actúan como mecanismo de reserva por si el script no consigue descargar el payload desde Vercel. El JavaScript ofuscado incrustado en esos archivos se ejecuta en cuanto el usuario abre el proyecto en el IDE, estableciendo una conexión con un servidor remoto —por ejemplo, a través de dominios del tipo ip-regions-check.vercelapp— y ejecutando el código que el servidor devuelve en cada momento.

En el tramo final de la cadena, el ataque termina cargando otra capa de JavaScript fuertemente ofuscado, que a su vez incluye la lógica principal del backdoor y mantiene un bucle de ejecución persistente. Esta estructura modular facilita que los operadores puedan ir cambiando componentes sobre la marcha, probando nuevas funciones o ajustando la campaña sin reescribirlo todo desde cero.

En algunos casos observados, al cabo de varios minutos tras la infección inicial se han descargado instrucciones JavaScript adicionales que se ejecutan de forma periódica, por ejemplo, cada cinco segundos. Estas nuevas instrucciones permiten aumentar las capacidades del malware, lanzar otro código bajo demanda y limpiar rastros de actividad cuando los operadores deciden cerrar la sesión o cubrir sus huellas.

Llama la atención que ciertas porciones del código incluían comentarios y redacciones que apuntan al uso de herramientas de inteligencia artificial para generar o asistir en la creación del malware, algo que encaja con la tendencia actual de los grupos avanzados a apoyarse en IA para acelerar su ciclo de desarrollo.

BeaverTail e InvisibleFerret: backdoors orientados al espionaje y al lucro

Los principales implantes identificados en la campaña, conocidos como BeaverTail e InvisibleFerret, no se limitan a ejecutar una simple puerta trasera, sino que componen una estructura de ataque en varias capas, combinando entornos como Node.js y Python para ampliar sus capacidades.

El payload JavaScript alojado en Vercel incorpora la lógica necesaria para establecer un canal persistente con un servidor de mando y control, recogiendo datos básicos del sistema, como el tipo de dispositivo, versión del sistema operativo y otra información útil para perfilar a la víctima. A partir de ahí, los atacantes pueden ordenar la ejecución de comandos, desplegar nuevos módulos o ajustar el comportamiento del backdoor.

En entornos macOS, se ha observado que la infección se apoya en un comando en segundo plano que combina nohup bash -c con curl -s para descargar un payload JavaScript y pasarlo directamente al runtime de Node.js. Este enfoque permite que el código siga ejecutándose incluso si el proceso de VS Code se cierra, además de ocultar la salida de los comandos para no llamar la atención del usuario.

En determinados incidentes analizados, tras la primera etapa de infección el sistema empezaba a enviar señales al servidor cada pocos segundos, recibir nuevas instrucciones JavaScript y borrar rastros cuando el operador así lo ordenaba. Esta comunicación continua sugiere un interés tanto en el espionaje prolongado como en ajustar tácticas en tiempo real según la reacción de la víctima.

La actividad se enmarca en una estrategia más amplia en la que los grupos vinculados a Corea del Norte buscan tanto obtener acceso a propiedad intelectual y código fuente como canalizar ingresos a través del robo de criptoactivos y el uso de criptomineros encubiertos, una combinación que encaja con necesidades financieras de un régimen fuertemente sancionado.

Repositorios fraudulentos, TsunamiKit y minado de criptomonedas

Paralelamente a BeaverTail e InvisibleFerret, otras investigaciones han sacado a la luz repositorios maliciosos que usan el mismo patrón de abuso de tareas de VS Code para descargar JavaScript ofuscado y desplegar herramientas como el backdoor de propósito general Tsunami, también conocido como TsunamiKit.

En uno de estos casos, un repositorio de prueba incluía un task de VS Code que obtenía y ejecutaba código JavaScript diseñado para instalar un backdoor completo y, además, introducir un minero de criptomonedas XMRig en la máquina comprometida. De este modo, los atacantes combinan el acceso remoto con un aprovechamiento inmediato de recursos de cómputo de la víctima.

En otro escenario documentado, la víctima fue contactada a través de LinkedIn por supuestos responsables técnicos de un proyecto llamado Meta2140. En el mensaje de reclutamiento se facilitaba un enlace a un documento de Notion con la prueba técnica, además de una URL a un repositorio en Bitbucket que escondía el código malicioso. Todo el flujo estaba diseñado para que el candidato siguiera los pasos con naturalidad, confiando en la legitimidad de la oferta laboral.

Cuando el repositorio se abría en VS Code, el proceso malicioso podía recurrir a dos vías adicionales si el método principal fallaba: la instalación de una dependencia npm maliciosa llamada «grayavatar» o la ejecución de un script JavaScript encargado de descargar un controlador Node.js más sofisticado.

Ese controlador Node.js se organizaba en cinco módulos con funciones bien definidas: captura de pulsaciones de teclado (keylogging), toma de capturas de pantalla, exploración del directorio home en busca de archivos sensibles, sustitución de direcciones de monederos de criptomonedas copiadas al portapapeles y robo de credenciales almacenadas en navegadores web, además de mantener una conexión persistente con el servidor de los atacantes.

El malware, además, desplegaba un entorno Python paralelo a través de un script de preparación (stager) que permitía ampliar capacidades de recolección de datos, integrar el minado de criptomonedas mediante XMRig, continuar con el keylogging y, llegado el caso, instalar herramientas de control remoto como AnyDesk para un acceso aún más directo al sistema.

Paralelamente a BeaverTail e InvisibleFerret, otras investigaciones han sacado a la luz repositorios maliciosos que usan el mismo patrón de abuso de tareas de VS Code para descargar JavaScript ofuscado y desplegar herramientas como el backdoor de propósito general Tsunami, también conocido como TsunamiKit.

En uno de estos casos, un repositorio de prueba incluía un task de VS Code que obtenía y ejecutaba código JavaScript diseñado para instalar un backdoor completo y, además, introducir un minero de criptomonedas XMRig en la máquina comprometida. De este modo, los atacantes combinan el acceso remoto con un aprovechamiento inmediato de recursos de cómputo de la víctima.

En otro escenario documentado, la víctima fue contactada a través de LinkedIn por supuestos responsables técnicos de un proyecto llamado Meta2140. En el mensaje de reclutamiento se facilitaba un enlace a un documento de Notion con la prueba técnica, además de una URL a un repositorio en Bitbucket que escondía el código malicioso. Todo el flujo estaba diseñado para que el candidato siguiera los pasos con naturalidad, confiando en la legitimidad de la oferta laboral.

Cuando el repositorio se abría en VS Code, el proceso malicioso podía recurrir a dos vías adicionales si el método principal fallaba: la instalación de una dependencia npm maliciosa llamada «grayavatar» o la ejecución de un script JavaScript encargado de descargar un controlador Node.js más sofisticado.

Ese controlador Node.js se organizaba en cinco módulos con funciones bien definidas: captura de pulsaciones de teclado (keylogging), toma de capturas de pantalla, exploración del directorio home en busca de archivos sensibles, sustitución de direcciones de monederos de criptomonedas copiadas al portapapeles y robo de credenciales almacenadas en navegadores web, además de mantener una conexión persistente con el servidor de los atacantes.

El malware, además, desplegaba un entorno Python paralelo a través de un script de preparación (stager) que permitía ampliar capacidades de recolección de datos, integrar el minado de criptomonedas mediante XMRig, continuar con el keylogging y, llegado el caso, instalar herramientas de control remoto como AnyDesk para un acceso aún más directo al sistema.

Un actor que se adapta rápido y se integra en el flujo de trabajo del desarrollador

Los análisis coinciden en que estamos ante un actor patrocinado por un Estado que experimenta de forma constante con múltiples métodos de entrega en paralelo, con el fin de aumentar la probabilidad de éxito y sortear medidas defensivas. No se trata de una campaña estática, sino de un conjunto de iteraciones que comparten la misma idea base: utilizar VS Code y repositorios de código como vector de entrada.

Los expertos que han monitorizado la actividad apuntan a que el malware observado cambia muy rápido en intervalos de tiempo cortos, incorporando nuevos módulos, variaciones en el ofuscado y ajustes en la infraestructura de mando y control. El hecho de que ciertas partes del payload de macOS estén escritas íntegramente en JavaScript y presenten indicios de asistencia por IA refuerza la impresión de un ciclo de desarrollo ágil.

Este tipo de campañas demuestran que los atacantes buscan integrarse de forma natural en herramientas y hábitos de trabajo legítimos, como las tareas de VS Code, los tests técnicos compartidos por Git o el uso de dependencias npm comunes. La idea es infiltrarse en procesos que los desarrolladores consideran rutinarios, aprovechando la confianza que se deposita en plataformas conocidas.

Para los profesionales de la programación en España y el resto de Europa, donde VS Code y el ecosistema JavaScript/Node.js son extremadamente populares, este enfoque supone un riesgo añadido: el vector de ataque ya no es únicamente un archivo adjunto sospechoso o una URL extraña, sino una prueba técnica de trabajo o un repositorio que parece profesional y bien presentado. Casos como la fuga de secretos en GitHub Copilot ilustran además cómo las herramientas de desarrollo pueden añadir riesgos complementarios.

La campaña Contagious Interview ilustra, en definitiva, cómo los actores vinculados a la DPRK están afinando sus herramientas para compatibilizar espionaje técnico, robo económico y explotación de recursos computacionales, todo ello disfrazado de procesos normales de selección y colaboración en proyectos de software. Ante este panorama, la prudencia al abrir repositorios de origen dudoso y la revisión minuciosa de ficheros de configuración y dependencias se convierten en pasos casi obligatorios para cualquier desarrollador.