Cinco versiones de npm de jscrambler comprometidas con infostealer en Rust que elude --ignore-scripts

El atacante comprometió la cuenta npm de jscrambler el 11 de julio y publicó cinco versiones maliciosas de la herramienta utilizada por 43 mil empresas, incluyendo Fortune 500, con infostealer en Rust que captura credenciales de navegadores y cofres Bitwarden.
Cinco versiones del paquete npm oficial de jscrambler, herramienta de ofuscación de JavaScript utilizada por más de 43,000 empresas, incluyendo clientes de Fortune 500, fueron comprometidas el 11 de julio con un infostealer compilado en Rust que captura credenciales guardadas en navegadores y cofres del gestor de contraseñas Bitwarden. El ataque mantuvo versiones maliciosas disponibles en npm por aproximadamente tres horas. La plataforma de seguridad Socket detectó la primera versión comprometida seis minutos después de su publicación.
Cinco versiones, dos tácticas, un mismo payload
Las versiones 8.14.0, 8.16.0, 8.17.0, 8.18.0 y 8.20.0 fueron publicadas por el atacante intercaladas con versiones limpias que los mantenedores de jscrambler empujaron en un intento de remediación, indicando que el control de la cuenta o del pipeline de CI/CD se mantuvo durante toda la ventana del incidente.
Las versiones 8.14.0 a 8.17.0 operaban a través de un preinstall hook: al ejecutar npm install, el script dist/setup.js extraía un binario nativo por sistema operativo (Linux, Windows y macOS) y lo ejecutaba en modo silencioso. A partir de la versión 8.18.0, el atacante modificó el enfoque. El payload comenzó a ser cargado por el propio módulo principal al ser importado, a través de dist/index.js y dist/bin/jscrambler.js. Este cambio elude la bandera --ignore-scripts de npm, parámetro adoptado por equipos de seguridad corporativa como barrera contra scripts de instalación no confiables.
Qué capturaba el infostealer
El binario Rust, idéntico en las cinco versiones comprometidas, escanea la máquina del desarrollador en busca de perfiles de navegadores Chromium (Chrome, Brave, Edge), datos del cofre local de la extensión Bitwarden y sesiones activas de Steam. La información recolectada es transmitida a un servidor de recolección vía TLS. En Windows, el malware instalaba persistencia a través del Programador de tareas; en macOS, a través de LaunchAgents. Las máquinas Linux solo recibían la exfiltración inmediata, sin mecanismo de persistencia.
Según análisis de Socket, el acceso ilegítimo a la cuenta npm o al pipeline de CI/CD de jscrambler permitió publicar versiones firmadas bajo la identidad legítima del paquete, haciendo ineficaz la detección por inspección de metadatos.
Por qué el vector afecta directamente a entornos de producción financiera
El jscrambler es adoptado por empresas para ofuscación de JavaScript en producción y para cumplimiento con el PCI DSS v4, el estándar de seguridad de la industria de tarjetas de pago que exige protección de scripts en páginas de checkout. Con 60,000 descargas mensuales en npm, el paquete circula rutinariamente en pipelines de integración continua de minoristas, bancos y procesadores de pago en los Estados Unidos y el Reino Unido, dos de los mercados donde el PCI DSS v4 se ha vuelto obligatorio en 2025.
El compromiso de una herramienta de protección de código utilizada por empresas del sector financiero representa un vector de segundo nivel: el atacante no invadió al cliente final, sino la herramienta que el cliente usa para proteger a sus propios clientes. Este patrón fue documentado en SolarWinds (2020), cuando el software de monitoreo de red se convirtió en canal de acceso a agencias gubernamentales americanas, y en 3CX (2023), cuando un software de comunicación corporativa fue trojanizado para distribuir malware a empresas en más de 60 países.
Qué se sabe sobre la extensión del daño
Socket no divulgó cuántas organizaciones instalaron las versiones comprometidas antes de su eliminación. Jscrambler no había emitido un comunicado público con el número de máquinas afectadas hasta el cierre de esta materia. Las cinco versiones fueron eliminadas de npm dentro de las tres horas del incidente, pero cualquier entorno que ejecutó npm install contra una de las versiones comprometidas durante ese período debe ser tratado como comprometido hasta prueba en contrario.
Desarrolladores que instalaron las versiones 8.14.0, 8.16.0, 8.17.0, 8.18.0 o 8.20.0 deben rotar inmediatamente contraseñas guardadas en Chrome, Brave y Edge, revocar tokens de Bitwarden y auditar procesos programados en Windows y LaunchAgents en macOS. La ausencia de mecanismo de persistencia en Linux no equivale a ausencia de daño: la exfiltración ocurre en el momento de la instalación, antes de que cualquier persistencia sea necesaria.