# Dos trabajos falsos en Upwork, un Mac infectado: mis encuentros con Contagious Interview, de Corea del Norte

> Un proyecto de prueba con un paquete npm envenenado y una app de reuniones falsa que se instalaba con curl | bash. Qué pasó las dos veces, cómo usé Claude Code para encontrar el malware y la herramienta que creé después.

- URL: https://oliverz.dev/es/blog/upwork-contagious-interview
- Author: Oliver Zhang (https://oliverz.dev)
- Language: es
- Published: 2026-10-28
- Tags: security, upwork, malware, macos, contagious-interview

> **En resumen:** Contagious Interview es un ataque de reclutamiento falso de hackers norcoreanos. Se hacen pasar por clientes o reclutadores en plataformas como Upwork y LinkedIn y, al final, consiguen que seas tú quien ejecuta un "proyecto de prueba" o instala una "app de reuniones". Una regla basta para detectarlo: si un proceso de selección te pide ejecutar código desconocido en tu propia máquina, detente. Si ya lo ejecutaste, desconéctate de la red, busca procesos en segundo plano y carpetas que no conozcas, cambia tus contraseñas y cierra la sesión en todos los dispositivos de los sitios que te importan.

## La primera vez: junio de 2026

Un cliente que decía ser ucraniano me contactó en Upwork. Tenía un proyecto, quería mi ayuda y me envió un proyecto de prueba en Node.js llamado "Online_Store".

El código malicioso estaba escondido en una de sus dependencias npm. Ya no recuerdo exactamente qué paquete era; creo que tenía que ver con Tailwind. En cuanto ejecuté el proyecto, creó sin hacer ruido una carpeta `~/.node_modules` en mi máquina con axios y socket.io-client dentro, preparada para enviar mis datos fuera.

Cuando me di cuenta, llevaba días funcionando en segundo plano. Lo descubrí por pura suerte: a un compañero mío en Reino Unido le había pasado exactamente lo mismo y, cuando me lo contó, entendí que probablemente a mí también me habían atacado.

## La segunda vez: octubre de 2026

Esta vez la persona decía ser lituana, de una firma de capital llamada Veyron Capital (veyron[.]capital), que había publicado un montón de ofertas Web3 en Upwork.

Me escribió primero y luego organizó una videollamada en Upwork. Tuvo la cámara apagada y me habló en chino todo el tiempo. Después me pidió que lo agregara en Telegram y me metió en un grupo, donde me pidieron construir una demo Web3 y presentarla al equipo en una reunión.

Cuando llegó el momento de presentar, dijeron que un compañero estaba de viaje y no podía usar la herramienta de reuniones habitual, así que teníamos que pasarnos a una app de reuniones llamada "Zeff" (zeff[.]app). Otra persona del grupo me "ayudó" a instalarla y me dio dos opciones: ejecutar un comando `curl | bash` en la terminal o descargar un DMG.

No la instalé. Después de haberme quemado una vez, en cuanto vi "ejecuta este comando desconocido en tu terminal para que podamos tener la reunión", supe que era el mismo truco.

## En retrospectiva

Los dos eran ataques "Contagious Interview" de Corea del Norte: reclutamiento falso y entrevistas falsas. Se ganan tu confianza con lo que parece un trabajo normal y luego consiguen que ejecutes su código con tus propias manos.

![Los dos ataques siguieron el mismo guion: contacto, confianza, la petición, la carga maliciosa. La segunda vez me detuve en la carga.](https://oliverz.dev/posts/upwork-contagious-interview/attack-flow.en.svg?v=4f6772d3)

Lo que más me molestó es que ni XProtect, el antivirus integrado de macOS, ni los antivirus tradicionales dijeron nada, ninguna de las dos veces.

## Claude Code como mi investigador forense

Después de la primera infección, lo que realmente sacó el problema a la luz fue Claude Code. Usé Fable 5 (Max), le di los permisos que necesitaba y dejé que revisara todo mi disco y mis procesos en segundo plano como un investigador. Enseguida descubrió que el malware seguía funcionando y luego me guio paso a paso para limpiarlo todo.

## Qué perdí

Por suerte, nada. Lo que más busca este tipo de malware son carteras de criptomonedas, y no tengo ninguna en esa máquina. Las cuentas que me importan tienen todas la autenticación en dos pasos activada, así que, aun con mis contraseñas, nadie podía entrar.

Eso sí, una advertencia: este malware suele robar también las sesiones iniciadas (cookies) guardadas en tu navegador. Con ellas, un atacante puede saltarse la autenticación en dos pasos y entrar directamente en tus cuentas. Así que, si te atacan, cambia tus contraseñas y además cierra la sesión en todos los dispositivos de los sitios que te importan.

## Así que creé una herramienta: Tsuba

Después de estos dos encuentros, vi dónde estaba el hueco. Estos ataques llegan con un envoltorio nuevo cada vez y usan las herramientas más corrientes que existen, como node, curl y bash, así que un antivirus tradicional no tiene motivos para sospechar.

Por eso creé una pequeña app de barra de menús para macOS llamada Tsuba (鍔, la guarda de una espada japonesa). La idea es sencilla: antes de que un código desconocido se ejecute por primera vez, le echa un vistazo por ti. Averigua qué va a hacer el código, de dónde viene y si se parece a un ataque conocido, y luego decide si lo permite, te advierte o lo bloquea.

![Antes de ejecutarse, el código desconocido pasa por las cuatro comprobaciones de Tsuba, que deciden si se permite, se advierte o se bloquea.](https://oliverz.dev/posts/upwork-contagious-interview/tsuba-check.en.svg?v=b30d64d2)

Así encaja con mis dos casos:

- **Un proyecto de entrevista falso, como el primero**: antes de que ejecutes `npm install` o `npm start`, comprueba si las dependencias están en listas públicas de paquetes maliciosos y revisa el código del proyecto en busca de código oculto, direcciones remotas fijas en el código o código que lee carteras y gestores de contraseñas. Si aún tienes dudas, puedes probar el proyecto en un sandbox y ver qué hace de verdad.
- **Una app de reuniones falsa, como la segunda**: cuando ve `curl | bash`, descarga el script remoto sin ejecutarlo y comprueba qué haría. A los DMG descargados también se les revisa la firma, la notarización y el origen.

Tsuba es gratis y de código abierto ([en GitHub](https://github.com/chihyungchang/Tsuba), Apache 2.0). La descarga para Macs con Apple silicon e Intel, y todo lo demás, está en [la página de Tsuba](https://oliverz.dev/es/products/tsuba). Si aceptas trabajos en Upwork o plataformas parecidas, o sueles ejecutar código que te envían otras personas, pruébalo.
