FlawOpen

flawopen.com/Incidents/tensorlake-npm-install-hook-compromise-october-2026

● Tensorlake · CWE-506 · October 8, 2026 · Crítica
Investigación · FlawOpen

Tensorlake npm 0.5.144: hook malicioso de instalación

Una versión maliciosa del SDK de IA de Tensorlake añadió un cargador preinstall. El equipo confirmó cambios directos en main y reforzó las publicaciones; el aviso de GitHub considera comprometidos los equipos donde se ejecutó. Los investigadores vinculan el patrón del cargador con la familia ChainDrop/Shai-Hulud; el aviso de GitHub no confirma esa atribución.[1], [2], [3], [4], [5]

💡 Explicación en Lenguaje Sencillo (ELI5)

Instalar este paquete fue como enchufar un aparato que empieza a funcionar en cuanto recibe corriente: no hacía falta pulsar un botón ni usarlo. npm ejecutó el hook malicioso de preinstalación con los permisos de quien lo instaló, antes de que alguien importara el SDK.[3], [6], [1]

Conceptos Clave y Términos

hook preinstall
Script que npm puede ejecutar durante la instalación. El manifiesto publicado de Tensorlake 0.5.144 invocaba un cargador desde este hook, sin necesidad de importar el SDK.[1], [6]
atestación de procedencia
Evidencia sobre el origen y la compilación de un artefacto. El equipo indicó que la publicación maliciosa tenía procedencia npm; eso no demuestra que el código fuente fuera seguro.[2], [3]
barrera para scripts de instalación
Control de CI que falla si un manifiesto publicado declara scripts de instalación. Tras el incidente, Tensorlake añadió este control y npm ci --ignore-scripts.[3]
Atribución de familia de campaña
StepSecurity y Socket relacionan el patrón del cargador con ChainDrop/Shai-Hulud. El aviso de malware de GitHub no identifica una familia de campaña; atribuye esa conexión a los investigadores.[4], [5], [1]

Mapeos de marcos

  • Referencia CWE para la debilidad descrita en esta guía: CWE-506

Cronología del Incidente

7 de octubre de 2026

La respuesta del equipo indica que se enviaron commits directos a main desde una cuenta administradora del repositorio.[2], [3]

8 de octubre de 2026

El flujo de publicación envió tensorlake@0.5.144 con malware; el equipo afirma que npm lo retiró después.[1], [2]

8 de octubre de 2026

El equipo integró la PR #1016, restauró el último commit limpio, añadió controles de scripts de instalación y elevó la versión limpia a 0.5.145.[3], [7]

Flujo de Ataque Paso a Paso

Paso 1

Se eludió la confianza del repositorio

La PR de respuesta indica que una cuenta administradora envió commits directamente a main, fuera del flujo normal de revisión de pull requests. Después, la publicación se inició manualmente desde ese repositorio.[2], [3]

Paso 2

El paquete ejecutó código al instalarse

Los investigadores encontraron un hook preinstall que iniciaba un cargador en tensorlake@0.5.144. El código heredaba los permisos del proceso instalador; no hacía falta importar primero el SDK.[1], [4], [5], [6]

Paso 3

Las credenciales y la persistencia del equipo quedaron en riesgo

El aviso de malware de GitHub indica que un equipo afectado debe tratarse como comprometido. StepSecurity y Socket informan de robo de credenciales y persistencia, incluido un monitor que podía reaccionar a la revocación de tokens. Atribuye esos detalles a los investigadores; no des por hecho que todas las capacidades se ejecutaron en todos los equipos.[1], [4], [5]

Paso 4

El equipo restableció los controles de publicación

La respuesta revirtió los commits maliciosos, añadió npm ci --ignore-scripts y una barrera de manifiestos, reforzó las protecciones del repositorio y de publicación, y sustituyó el paquete por 0.5.145. El GHSA no enumera una versión corregida porque clasifica malware, no un rango de código vulnerable convencional.[3], [7]

Código Fuente: Vulnerable vs. Seguro

Esta comparación de CI sigue la PR integrada #1016; no es el paquete malicioso ni un exploit. La barrera se ejecuta antes de instalar y rechaza hooks de instalación en manifiestos publicados; ignore-scripts impide que npm ci ejecute scripts de ciclo de vida de dependencias. El equipo indicó que sus pruebas y la compilación del SDK funcionaron con este ajuste. Puede afectar a paquetes que requieran hooks, y los comandos invocados explícitamente, como npm test, aún ejecutan sus scripts. Aísla los pasos posteriores y no confundas procedencia con una revisión del código fuente. El fragmento es parcial: además de comprobar los hooks de instalación declarados, la barrera del mantenedor también rechaza archivos inesperados en typescript/lib/.[3], [6]

IMPLEMENTACIÓN VULNERABLE
steps:
  - run: npm ci
PARCHE SEGURO Y ROBUSTO
steps:
  - run: node scripts/check-no-install-scripts.mjs
  - run: npm ci --ignore-scripts

Lista de Verificación de Seguridad para Ingeniería

Fuentes