Un error tipográfico y tu código deja de ser tuyo: así funciona el "modo gusano de arena" en los paquetes np

Un error tipográfico y tu código deja de ser tuyo: así funciona el "modo gusano de arena" en los paquetes np

Los scripts de automatización se han convertido en una línea de montaje para el robo de secretos.

image

El equipo de Socket describió una campaña activa en el ecosistema npm, que se hace pasar por paquetes populares y convierte la instalación accidental de una dependencia en una cadena de compromiso de repositorios y CI. La campaña se rastrea con el nombre SANDWORM_MODE — por los interruptores de entorno SANDWORM_ dentro del código malicioso.

Según Socket, los atacantes distribuyeron al menos 19 paquetes suplantadores mediante typosquatting y nombres «similares». Uno de los ejemplos es suport-color, que imita la biblioteca supports-color y al mismo tiempo mantiene el comportamiento esperado para no levantar sospechas. Al importarse ejecuta una carga multinivel: recopila secretos del desarrollador y del CI, transmite datos a través de la API de GitHub con un canal de respaldo por DNS, mezcla dependencias y archivos de workflow en repositorios accesibles y se fija mediante ganchos de Git para que la infección «se traslade» a nuevos proyectos.

Una rama aparte del ataque está ligada a GitHub Actions. Socket detectó el repositorio público ci-quality/code-quality-check, que se presenta como una comprobación de calidad de código pero en realidad extrae secretos del entorno CI, lee tokens desde .npmrc y los envía hacia el exterior por HTTPS con un respaldo por DNS. Luego la acción intenta propagarse más, modificando package.json y workflows en otros repositorios con los tokens disponibles. En conjunto esto forma un ciclo cerrado: una dependencia infectada añade un workflow, el CI ejecuta la acción, la acción roba secretos y ayuda a avanzar la propagación.

Una característica de la variante actual son los ataques dirigidos a herramientas de desarrollo con IA. La carga inyecta un servidor MCP falso y lo registra en la configuración de varios asistentes de programación, incluidos Claude Code, Claude Desktop, Cursor, Continue para VS Code y Windsurf/Codeium. Mediante sugerencias en las descripciones de las «herramientas», el servidor empuja al asistente a leer discretamente claves SSH, credenciales en la nube, .npmrc y variables de entorno, y luego las acumula para su envío posterior. Además, el código malicioso busca claves de API para varios proveedores de LLM, entre ellos OpenAI, Anthropic y Google.

Socket también menciona un mecanismo de desconexión de emergencia —una función destructiva que, en teoría, podría borrar el directorio home si simultáneamente se pierde acceso tanto a GitHub como a npm. En el conjunto descrito está desactivada, pero el propio mecanismo sigue siendo una señal alarmante.

Los autores comunicaron sus hallazgos a npm, GitHub y Cloudflare de forma anticipada. Cloudflare bloqueó la infraestructura relacionada, npm eliminó los paquetes maliciosos y GitHub retiró la infraestructura de los atacantes. Como medidas urgentes, Socket recomienda considerar el entorno donde se ejecutaron las dependencias sospechosas como potencialmente comprometido, rotar tokens y secretos con rapidez, y revisar los repositorios en busca de cambios inesperados en dependencias, workflows y plantillas globales de ganchos de Git. Se requirió una reacción similar tras ataques a gran escala previos a la infraestructura CI/CD de npm, cuando GitHub se vio obligado a revisar los mecanismos de publicación de paquetes.