La versión 8.14.0 del paquete jscrambler npm se envió con un gancho de preinstalación malicioso que silenciosamente suelta y ejecuta un ladrón de información nativo durante la instalación, una compilación para Windows, macOS y Linux.
Publicado el 11 de julio de 2026, no necesita importación ni llamada CLI. Instalar 8.14.0 es suficiente para ejecutarlo.
Socket marcó el lanzamiento seis minutos después de su publicación. Si usted o uno de sus sistemas de compilación lo abrió en esa ventana, la carga útil ya se ejecutó con cualquier acceso que tuviera su proceso de instalación.
El gancho se activa incluso antes de que se configure el paquete, y nada aparece en la versión anterior, 8.13.0. El paquete diff muestra dos archivos nuevos en dist/: setup.js, un pequeño cargador, e intro.js, que, a pesar del nombre, no es JavaScript sino un contenedor de aproximadamente 7,8 MB que contiene tres archivos binarios nativos comprimidos con gzip, uno para Linux, uno para Windows y otro para macOS.
Durante la instalación, setup.js elige el binario para el sistema operativo host, lo escribe con un nombre aleatorio en el directorio temporal del sistema, lo marca como ejecutable y lo inicia separado con su salida oculta.
Los archivos agregados están en el paquete publicado, pero en ninguna parte de la fuente pública de jscrambler. StepSecurity y SafeDep, que extrajeron y analizaron la versión, informan que no hay confirmación, etiqueta o solicitud de extracción coincidentes para 8.14.0 en el repositorio de GitHub, cuya última etiqueta sigue siendo 8.13.0.
La versión se envió directamente a npm con una cuenta de mantenimiento legítima, sin pasar por el flujo de lanzamiento normal del proyecto, lo que apunta a una cuenta de npm comprometida o un proceso de compilación. Cuál de los dos no ha sido establecido.
Lo que hacen los binarios ahora está claro. Socket, en un análisis actualizado y una declaración a The Hacker News, identifica la carga útil como un ladrón de información de Rust, creado para las tres plataformas, que busca secretos en una máquina de desarrollador y los envía a un servidor directo a través de TLS.
La lista de objetivos es amplia y está dirigida directamente a los desarrolladores. Obtiene credenciales de nube de AWS, Azure y Google Cloud, incluidos los puntos finales de metadatos que utilizan los corredores de CI. Lee billeteras de criptomonedas y frases iniciales de MetaMask, Phantom y Exodus, y la bóveda del administrador de contraseñas Bitwarden.
Elimina las contraseñas y cookies almacenadas en el navegador, junto con las sesiones de Discord, Slack, Telegram y Steam. Y busca algo más nuevo: los archivos de configuración para herramientas de codificación de IA, incluidos Claude Desktop, Cursor, Windsurf, VS Code y Zed, donde tienden a ubicarse las claves API y las credenciales del servidor Model Context Protocol.
Los binarios van más allá del robo ordinario. En Linux, la carga útil vincula la biblioteca BPF del kernel y puede cargar un programa eBPF en el kernel desde la memoria, un punto de apoyo en el kernel en lugar del acceso a archivos del espacio de usuario en el que depende el resto del ladrón; Tanto StepSecurity como SafeDep señalaron la capacidad, aunque lo que hace el eBPF aún se está desmantelando.
Las compilaciones de Windows y macOS agregan comprobaciones antidepuración y el ladrón se conecta de forma persistente para sobrevivir a un reinicio: una tarea oculta programada de Windows configurada para reiniciarse cada minuto y un LaunchAgent de macOS que se recarga al iniciar sesión.
![]() |
| Fuente: Paso Seguridad |
Sus detalles de comando y control permanecen cifrados en el binario y nunca aparecen en el análisis estático; El monitoreo del tiempo de ejecución de StepSecurity detectó que el binario caído llegaba a dos direcciones IP codificadas y a la infraestructura Tor, los primeros indicadores de red publicados para la campaña.
jscrambler es una herramienta en tiempo de compilación, que se instala como una dependencia de desarrollo o se ejecuta desde CI. Eso coloca al ladrón exactamente en el entorno para el que fue creado: las claves de la nube, los tokens de implementación y el código fuente al que puede acceder un proceso de compilación o CI.
El paquete recibe alrededor de 15.800 descargas por semana y aún no se sabe cuántas extrajeron la versión comprometida. Esa es una huella mucho menor que la de los paquetes afectados en los grandes compromisos de npm del año pasado, que generan miles de millones de descargas por semana entre ellos.
Sin embargo, para un ladrón cuyo objetivo era construir máquinas, el alcance nunca fue el objetivo. El acceso es.
Esto se ajusta a una serie de ataques de npm a la cadena de suministro que se remontan a finales de 2025. El gusano Shai-Hulud se ejecutó desde un gancho de instalación para robar tokens y se propagó a través de cientos de paquetes en septiembre. Los paquetes de tiza y depuración ampliamente utilizados se tomaron a través de una cuenta de mantenimiento fraudulenta y se utilizaron para redirigir pagos criptográficos.
En marzo, una cuenta secuestrada introdujo un troyano multiplataforma en Axios, una biblioteca HTTP con más de 83 millones de descargas semanales. Lo que hace que el momento sea preciso es que npm acababa de actuar en contra de esta ruta exacta: npm 12 se envió el 8 de julio, tres días antes de este lanzamiento, con los scripts de instalación de dependencia desactivados de forma predeterminada.
En npm 12, un enlace de preinstalación como este no se ejecuta a menos que alguien lo apruebe. Los clientes más antiguos todavía los ejecutan automáticamente.
Desde entonces, la versión 8.15.0 la reemplazó en la parte superior de la lista de versiones de npm, se publicó desde la misma cuenta de mantenimiento y no muestra ninguna de las alertas de malware activadas por la 8.14.0: sin script de instalación, sin binario incluido.
Pero la versión 8.14.0 no fue eliminada. Todavía está en npm, por lo que cualquier archivo de bloqueo o comando fijado en él sigue instalando el ladrón. Sólo se vio afectado el paquete CLI principal; Los complementos jscrambler para webpack, gulp, Metro y grunt se mantuvieron en sus versiones limpias de junio, sin ganchos de instalación.
Que hacer ahora
- Bájese de 8.14.0. Vaya a 8.15.0 o fije a 8.13.0 para obtener una versión anterior al incidente y borre jscrambler@8.14.0 de los archivos de bloqueo y cachés.
- Averigua si instalaste 8.14.0. Verifique los archivos de bloqueo y los registros del administrador de paquetes para jscrambler@8.14.0 y los registros de CI para cualquier ejecución de dist/setup.js, a partir del 11 de julio. El cargador coloca su carga útil bajo un nombre aleatorio en el directorio temporal, por lo que no hay un nombre binario fijo para buscar; En su lugar, alinee las marcas de tiempo de instalación con los procesos secundarios de Node y la ejecución del directorio temporal. En Windows, consulte el Programador de tareas para ver si hay tareas ocultas; en macOS, inspeccione ~/Library/LaunchAgents en busca de listas desconocidas.
- Si 8.14.0 se ejecutó en una máquina, trate todos los secretos a los que pueda acceder como robados, no simplemente expuestos. Rotar claves de nube, tokens de npm y GitHub, y claves de API de MCP y herramientas de IA; revocar sesiones de Discord, Slack, navegador y Bitwarden; y sacar cualquier criptomoneda de las billeteras en ese host. Bloquee las dos IP de comando y control que se enumeran a continuación.
La limpieza fue rápida, pero un ladrón hace su trabajo segundos después de la instalación. 8.14.0 todavía está en npm, y una compilación fijada en él, en un cliente anterior que ejecuta scripts de instalación, aún ejecuta la carga útil.
Cuando 8.15.0 llegó a la cima de la lista, los secretos de cualquier máquina que ya ejecutara 8.14.0 ya habían desaparecido.
Indicadores de compromiso
Paquete malicioso: jscrambler@8.14.0. Hashes SHA-256 para los archivos agregados y sus cargas útiles descomprimidas:
- dist/setup.js: a742de963f14a92d24ebcbc7b44ac867e23a20d31d1b0094a13a4f83287f4e60
- dist/intro.js: a41a523ef9517aab37ed6eea0ec881821bdcb7aefcb5c5f603adc7907f868c86
- Carga útil de Linux: fbbcf4d8f98168f78f5c0c47a9ae56d59ec8ac84a7c9ca6b797fedfb8d62d2bd
- Carga útil de Windows: b7ca95d1b23c8e67416a25cedf741de0917c2096bbc9d24649eea7853d054903
- Carga útil de macOS: c8fd47d36bdf7c825378593ab82ed8c24d1dc52e26b507812393e24e1d5201fd
Puntos finales de red observados en tiempo de ejecución por StepSecurity (las dos IP son los puntos finales del atacante directo; el binario también llega a la infraestructura Tor, probablemente para conectividad o enrutamiento):
- IP C2: 37.27.122(.)124
- IP C2: 57.128.246(.)79
- Infraestructura Tor: check.torproject(.)org, archive.torproject(.)org
Artefactos en el host: un archivo oculto con nombre aleatorio en el directorio temporal del sistema (. {random} o . {random}.exe en Windows), además de una tarea oculta programada de Windows o un LaunchAgent de macOS para persistencia.
