noticias·4 min read

El Gusano Shai-Hulud Sigue Vivo en npm: Qué Credenciales Rotar y en Qué Orden

tensorlake@0.5.144 es la última variante del gusano que roba tokens de npm, GitHub y tu .env antes de republicarse con tu identidad. Checklist práctico si instalaste paquetes afectados.

DevToolsHub Team
·
El Gusano Shai-Hulud Sigue Vivo en npm: Qué Credenciales Rotar y en Qué Orden

Otro paquete, mismo gusano

El 8 de octubre, el paquete tensorlake publicó la versión 0.5.144 con una sorpresa: un script de preinstall ofuscado que, al instalar el paquete, vacía tu máquina. Tokens de npm y GitHub, variables de entorno, credenciales de cloud, claves SSH, y hasta la configuración de tus herramientas de IA (archivos mcp.json, claude_desktop_config.json, settings de Cursor).

Y no se queda ahí: usa los tokens robados para publicar versiones comprometidas de otros paquetes a los que tengas acceso. Es un gusano. La tercera ola de la campaña Shai-Hulud que empezó en septiembre, y probablemente no la última.

Si instalaste tensorlake entre el 8 y el 9 de octubre —o cualquier paquete de la lista de afectados que mantienen Socket y StepSecurity—, esto es lo que tienes que hacer, y en qué orden.


Qué roba exactamente

El payload corre como usuario y recolecta:

  • Tokens de npm desde ~/.npmrc y variables NPM_TOKEN
  • Tokens de GitHub desde gh auth, variables de entorno y archivos de configuración
  • Credenciales de cloud: AWS, GCP, Azure desde sus directorios de configuración
  • Tu .env completo del directorio actual y directorios padre: claves de API, connection strings, secrets de firma JWT
  • Claves SSH y ficheros de configuración de herramientas MCP/AI coding
  • Un fingerprint del sistema: usuario, CI, IPs, DNS configurados

Todo se exfiltra a un endpoint remoto. Luego el gusano intenta republicarse: con tu token de npm, publica versiones maliciosas de los paquetes que mantienes.


El detalle más desagradable: el interruptor de hombre muerto

Esta variante escribe hooks de ejecución en .claude/settings.json y .vscode/tasks.json, de forma que vuelve a correr al abrir el proyecto o al usar herramientas de IA. Y hay un giro extra: si detecta que has revocado el token de GitHub robado —su canal de exfiltración principal—, el payload tiene instrucciones para borrar el directorio home de la víctima como represalia.

Traducción: no revoques el token de GitHub desde la máquina afectada. Hazlo desde otro equipo o desde la web de GitHub, y asume que todo lo que había en esa máquina está comprometido.


Checklist de rotación, en orden

1. Tokens de npm (prioridad máxima)

Son la vía de propagación del gusano. Revócalos desde la web de npm, genera nuevos granulares (solo lectura donde puedas) y verifica que ningún paquete tuyo publicó versiones que no reconoces:

npm ls -g --depth=0 | grep tensorlake
npm token list   # revoca los que no reconozcas o todos si tienes dudas

2. Tokens de GitHub y claves SSH

Desde otro dispositivo: revoca PATs, tokens de gh, OAuth grants sospechosos y claves SSH registradas después del 8 de octubre. Revisa también los webhooks y Actions secrets de tus repos: el gusano puede haberlos exfiltrado.

3. Credenciales de cloud

Rota access keys de AWS, service accounts de GCP y credenciales de Azure que vivieran en esa máquina. Revisa los logs de uso: claves usadas desde IPs que no reconoces son la señal más clara.

4. Todo lo que vivía en tus .env

Esto suele ser lo más tedioso: API keys de terceros, connection strings, secrets de firma JWT. Si rotas un secret JWT, todos los tokens firmados con él quedan inválidos —decodifícalos primero con nuestro decodificador JWT para saber qué claims y qué expiración llevan los tokens que vas a invalidar.

5. Sesiones persistentes

Cierra sesiones de npm, GitHub y dashboards de terceros. Los tokens de sesión robados no expiran porque sí.


Cómo no volver a pasarlo

  • npm config set ignore-scripts true (o --ignore-scripts): la mayoría de paquetes no necesita scripts de instalación. Los que sí, los activas caso a caso.
  • Instala con lockfile: npm ci en CI, nunca resoluciones flotantes. Las versiones maliciosas de este gusano se publican en patch versions precisamente para colarse en ranges permisivos.
  • No confíes en las attestations solas: la provenance verifica desde dónde se publicó un paquete, pero si el atacante publica con tu token legítimo, el attestation también parece válido. Defensa por capas.
  • Regenera secrets con entropía real: si tienes que crear contraseñas o secrets nuevos de forma masiva, usa nuestro generador de contraseñas con símbolos y al menos 24 caracteres.

La cadena de suministro de npm sigue siendo el eslabón más débil del stack JavaScript. Este gusano no es el primero ni será el último: lo que cambia es lo preparado que estés para rotar credenciales en una tarde en lugar de una semana.

#npm#seguridad#supply chain#tokens#credenciales

Related articles