# Tsuba: Echa un vistazo antes de que un código desconocido se ejecute por primera vez.

> Una app gratis de barra de menús para macOS que revisa instalaciones de npm, scripts curl | bash, DMG descargados, extensiones de editor y plugins de herramientas de IA antes de que se ejecuten, para atrapar malware de entrevistas falsas como Contagious Interview, de Corea del Norte.

- URL: https://oliverz.dev/es/products/tsuba
- Author: Oliver Zhang (https://oliverz.dev)
- Language: es
- Platform: macOS app
- Status: live
- Price: Free
- License: Apache-2.0
- Version: 0.3.0
- First released: 2026-10-28
- Latest release: 2026-10-31
- Requirements: macOS 13+
- Descargar para Apple silicon: https://github.com/chihyungchang/Tsuba/releases/download/v0.3.0/Tsuba_0.3.0_aarch64.dmg
- Descargar para Intel: https://github.com/chihyungchang/Tsuba/releases/download/v0.3.0/Tsuba_0.3.0_x64.dmg
- Source: https://github.com/chihyungchang/Tsuba

Tsuba (鍔) es la guarda de una espada japonesa. Esta vive en tu barra de menús y actúa en el momento en que un código desconocido se ejecuta por primera vez: averigua qué va a hacer el código, de dónde viene y si se parece a un ataque conocido, y luego decide **Permitir**, **Advertir** o **Bloquear**.

La creé después de que clientes falsos de Upwork intentaran infectar mi Mac dos veces. La primera vez lo consiguieron, y ni XProtect ni el antivirus se dieron cuenta. [Aquí está la historia completa](https://oliverz.dev/es/blog/upwork-contagious-interview).

![Tsuba en 24 segundos.](https://oliverz.dev/products/tsuba/demo.en.mp4?v=d8f6a21d)

![El panel: estado de la protección, lo que necesita atención y un registro en vivo de cada comprobación.](https://oliverz.dev/products/tsuba/1-overview.en.webp?v=e341faf4)

## Por qué el antivirus no ve estos ataques

Los proyectos de entrevista falsos, las apps de reuniones falsas, los paquetes npm envenenados y las extensiones de editor maliciosas llegan con un envoltorio nuevo cada vez. Se ejecutan con herramientas corrientes como node, curl y bash, así que un antivirus tradicional no tiene nada que señalar. Tsuba vigila los puntos de entrada.

La magnitud del problema:

- La campaña norcoreana **Contagious Interview** está activa desde al menos diciembre de 2022. El "proyecto de prueba" es un proyecto npm en GitHub, GitLab o Bitbucket y, en cuanto confías en el repositorio, VS Code ejecuta su archivo de tareas por sí solo ([Microsoft, marzo de 2026](https://www.microsoft.com/en-us/security/blog/2026/03/11/contagious-interview-malware-delivered-through-fake-developer-job-interviews/)).
- Socket ha registrado **más de 1700 paquetes maliciosos** vinculados a la campaña desde enero de 2025, en npm, PyPI, Go, crates.io y Packagist ([Socket, abril de 2026](https://socket.dev/blog/contagious-interview-campaign-spreads-across-5-ecosystems)).
- Las extensiones GlassWorm escondían su código en caracteres Unicode invisibles y llegaron a unas **35 800 instalaciones** antes de que las descubrieran ([Koi Security, octubre de 2025](https://web.archive.org/web/20260101202601/https://www.koi.ai/blog/glassworm-first-self-propagating-worm-using-invisible-code-hits-openvsx-marketplace)).
- Sonatype registró **16 279 nuevos paquetes de código abierto maliciosos** en un solo trimestre, 845 204 en total ([Sonatype, 2.º trimestre de 2025](https://www.sonatype.com/press-releases/q2-2025-open-source-malware-index)).

## Antes de ejecutar un proyecto que te envió un reclutador

1. No lo abras todavía en tu editor. Una carpeta de confianza puede ejecutar su `.vscode/tasks.json` al abrirse.
2. Lee el `package.json`: scripts `preinstall` y `postinstall`, y dependencias que nunca has oído nombrar o que se publicaron la semana pasada.
3. Busca código que no pinta nada en una prueba técnica: direcciones IP fijas en el código, `eval` de texto descargado, lecturas de perfiles del navegador, carteras o el llavero.
4. Nunca pegues en tu terminal una línea `curl … | bash` sacada de un chat sin leer el script.
5. Si ya lo ejecutaste, da por hecho que la máquina está comprometida: busca rastros y luego cambia contraseñas, tokens y claves desde un dispositivo limpio.

Tsuba hace los pasos 1 a 4 por ti justo cuando importan, y su Chequeo de salud cubre el paso 5.

## Qué revisa

| Punto de entrada | Ejemplos | Qué mira Tsuba |
| --- | --- | --- |
| Comandos en la terminal | `curl … \| bash`, `npm install`, `npx`, `npm start`, `git clone` | Descarga el script remoto sin ejecutarlo; compara los paquetes npm con listas de paquetes maliciosos, revisa su antigüedad y sus scripts de instalación; busca en el proyecto código oculto, servidores fijos en el código y lecturas de carteras o gestores de contraseñas |
| Pegar en la terminal | Una página te dice que "copies este comando en tu terminal" | Avisa en cuanto pegas; los comandos ofuscados que se envían a un shell se marcan como de alto riesgo |
| Carpeta Descargas | Nuevos archivos `.dmg`, `.pkg`, `.vsix` | Firma, notarización, origen de la descarga y scripts de instalación |
| Extensiones de editor | VS Code, Cursor, Windsurf, VSCodium | La lista oficial de extensiones maliciosas, activación al iniciar, código oculto en caracteres invisibles; las extensiones de alto riesgo van a cuarentena |
| Herramientas de IA para programar | Servidores MCP, skills y hooks de Claude Code, Cursor, Codex | Paquetes maliciosos conocidos, arranques desde carpetas ocultas, instrucciones ocultas al usuario |
| Chequeo de salud | Barra de menús → Chequeo de salud | Rastros que dejan ataques conocidos e ítems de inicio sospechosos |

Los proyectos que te generan dudas se pueden probar primero en un sandbox: una carpeta de inicio falsa con señuelos, peticiones de red registradas pero nunca enviadas y un límite de 60 segundos.

![La instalación bloqueada de una app de reuniones falsa: el veredicto, los motivos y las evidencias, línea a línea.](https://oliverz.dev/products/tsuba/2-history.en.webp?v=f0168298)

![Escanea carpetas cuando quieras o de forma programada. Lo que sea de riesgo va a cuarentena.](https://oliverz.dev/products/tsuba/3-scan.en.webp?v=2f8accaf)

![El Chequeo de salud busca rastros de ataques conocidos y audita las extensiones de editor y las herramientas de IA.](https://oliverz.dev/products/tsuba/4-doctor.en.webp?v=8a48a5e3)

## Cómo se compara Tsuba

La mayoría de las herramientas cubren una sola vía de entrada. Tsuba cubre cada primera ejecución en un Mac y funciona junto a las demás.

| Herramienta | Qué revisa | Cuándo |
| --- | --- | --- |
| **Tsuba** | Comandos en la terminal, npm y npx, proyectos clonados, `.dmg` / `.pkg` / `.vsix`, extensiones de editor, servidores MCP, skills y hooks, comandos pegados | Antes de que el código se ejecute por primera vez |
| npq, Socket Firewall, Aikido Safe Chain | Paquetes de npm (y, algunas, de PyPI y otros) | Al instalar |
| mcp-scan y otros escáneres de MCP | Servidores MCP y herramientas de agentes | Cuando ejecutas un escaneo |
| LuLu, BlockBlock, KnockKnock (Objective-See) | Conexiones salientes y software que se instala para arrancar al iniciar sesión | Después de que el código se haya ejecutado |
| Antivirus y XProtect | Firmas de malware conocido | Cuando un archivo coincide con una muestra conocida |

## Cómo decide

Las reglas sin conexión siempre se ejecutan primero, respaldadas por inteligencia de amenazas pública que se actualiza a diario, con más de 230 000 paquetes npm y PyPI maliciosos reportados por [OpenSSF](https://ossf.github.io/malicious-packages/stats/). Después, un modelo de IA puede valorar las evidencias en contexto. Claude funciona mejor, también se admiten otros proveedores y modelos locales, y puedes desactivar la IA por completo.

Al modelo solo se envían las evidencias que necesita una comprobación. Antes se quitan los comentarios del código, y los secretos nunca se suben. La configuración y el historial se quedan en `~/.tsuba`, en tu Mac.

![Ajustes: activa o desactiva cada defensa y elige cómo se toman los veredictos, con o sin IA.](https://oliverz.dev/products/tsuba/5-settings.en.webp?v=ce24d1bc)

## Disponibilidad

Tsuba ya está disponible, es gratis y de código abierto con licencia Apache 2.0 ([en GitHub](https://github.com/chihyungchang/Tsuba)). Hay dos versiones: elige **Apple silicon** para Macs con M1 o posteriores, **Intel** para los más antiguos. ¿No sabes cuál tienes? Menú Apple → Acerca de este Mac → Chip.

La app habla diez idiomas, español incluido: English, 简体中文, 繁體中文, 日本語, 한국어, Español, Français, Deutsch, Português y Русский. La interfaz, las notificaciones, las comprobaciones en la terminal, las explicaciones de las reglas y las respuestas de la IA siguen el idioma de macOS, o elige uno en **Ajustes → Apariencia**.

Tsuba aún no está firmado ni notarizado por Apple, así que macOS lo bloquea la primera vez que lo abres. Ve a **Ajustes del Sistema → Privacidad y seguridad** y haz clic en **Abrir igualmente**. Por favor, no quites la marca de cuarentena con `xattr`: Tsuba advierte de los instaladores que te lo piden, y el suyo no debería ser la excepción.

Solo tienes que hacerlo una vez. Después, Tsuba se actualiza solo: te avisa cuando sale una versión nueva y solo la instala si su firma coincide con la clave integrada en la app.

Para comprobar que tu DMG es el que GitHub compiló a partir del código público, compara `shasum -a 256 Tsuba_*.dmg` con `SHA256SUMS.txt` en [la página de la versión](https://github.com/chihyungchang/Tsuba/releases/latest).

## FAQ

### ¿Es seguro ejecutar un proyecto que me envió un reclutador?

Trátalo como no fiable hasta revisarlo: en las entrevistas de trabajo falsas, el proyecto de prueba es el malware. Arrastra la carpeta a la ventana de Tsuba, o clónala con Tsuba conectado a tu terminal, y revisará dependencias, scripts de instalación y tareas de VS Code antes de que nada se ejecute. Si ya lo ejecutaste, haz un **Chequeo de salud** y lee [lo que me pasó a mí](https://oliverz.dev/es/blog/upwork-contagious-interview).

### ¿Cómo reviso un paquete npm antes de instalarlo?

Con Tsuba conectado a tu terminal, `npm install` y `npx` se revisan antes de ejecutarse: paquetes maliciosos conocidos de la lista de OpenSSF, paquetes publicados hace solo unos días y scripts de instalación. Herramientas de línea de comandos como npq hacen una revisión parecida, solo para npm.

### ¿Por qué macOS dice que no se puede abrir Tsuba?

Tsuba aún no está firmado ni notarizado por Apple, así que la primera vez que lo abras ve a **Ajustes del Sistema → Privacidad y seguridad** y haz clic en **Abrir igualmente**. Por favor, no quites la marca de cuarentena con `xattr`: Tsuba advierte de los instaladores que lo piden. Para verificar tu descarga, compárala con el SHA-256 que aparece en Novedades.

### ¿Tsuba sube mi código?

No se sube ningún archivo. Si activas la IA, solo las evidencias que necesita una comprobación van al modelo que elegiste, sin los comentarios del código y sin secretos. Con la IA desactivada, las comprobaciones se hacen en tu Mac con reglas sin conexión. La configuración y el historial se quedan en `~/.tsuba`. El [aviso de privacidad](https://oliverz.dev/es/products/tsuba/privacy) enumera todo lo que Tsuba envía y cuándo.

### ¿Necesito una suscripción de IA o una clave de API?

No. Las reglas sin conexión siempre se ejecutan primero y funcionan por sí solas. La IA es opcional: Claude funciona mejor, y también se admiten otros proveedores y modelos locales.

### ¿Sustituye a mi antivirus?

No. Reconocer malware conocido queda en manos de XProtect de macOS y de la inteligencia de amenazas abierta. Tsuba cubre lo que a ellos se les escapa: código con un envoltorio nuevo que nadie ha visto todavía, como proyectos de entrevista falsos, apps de reuniones falsas, paquetes envenenados y extensiones maliciosas, y actúa antes de que ese código se ejecute.

### ¿En qué Macs funciona?

macOS 13 o posterior, en Apple silicon e Intel, con una descarga distinta para cada uno. Menú Apple → Acerca de este Mac → Chip te dice cuál tienes.

### ¿Y si marca algo que en realidad es seguro?

Cada Advertir y cada Bloquear muestra sus evidencias (qué archivo, qué línea, qué coincidió), para que lo juzgues tú, y una advertencia que ya revisaste se puede ignorar, o lo que es de confianza puede ir a la lista de permitidos. Por favor, [reporta el falso positivo](#feedback): cada uno se convierte en una prueba de regresión.
