A versão 8.14.0 do pacote jscrambler, distribuído no npm, veio com um hook malicioso de preinstall que, de forma silenciosa, baixa e executa um infostealer nativo durante a instalação, com uma build para Windows, macOS e Linux.
Publicado em 11 de julho de 2026, o pacote não exige importação nem chamada pela CLI.
Basta instalar a versão 8.14.0 para que o código malicioso seja executado.
A Socket sinalizou o release seis minutos depois da publicação.
Se você ou algum sistema de build o instalou nesse intervalo, o payload já foi executado com o nível de acesso disponível no processo de instalação.
O hook é disparado antes mesmo de o pacote ser configurado, e nada disso aparece na versão anterior, 8.13.0.
O diff do pacote mostra dois novos arquivos em dist/: setup.js, um pequeno loader, e intro.js, que, apesar do nome, não é JavaScript, mas um contêiner de aproximadamente 7,8 MB que reúne três binários nativos compactados com gzip, um para Linux, um para Windows e um para macOS.
Na instalação, o setup.js seleciona o binário compatível com o sistema operacional do host, grava o arquivo com um nome aleatório no diretório temporário do sistema, marca o arquivo como executável e o inicia em modo detached, com a saída ocultada.
Os arquivos adicionados estão no pacote publicado, mas não aparecem em nenhum trecho do source público do jscrambler.
A StepSecurity e a SafeDep, que baixaram e analisaram o release, informaram que não há commit, tag ou pull request correspondente à 8.14.0 no repositório do GitHub, cujo último tag continua sendo 8.13.0.
A versão foi enviada diretamente ao npm por uma conta legítima de mantenedor, fora do fluxo normal de publicação do projeto, o que aponta para uma conta do npm comprometida ou para uma falha na pipeline de build.
Até agora, não se sabe qual dos dois cenários ocorreu.
O que os binários fazem já está mais claro.
Em análise atualizada, a Socket identificou o payload como um infostealer em Rust, desenvolvido para as três plataformas, que varre uma máquina de desenvolvedor em busca de segredos e os envia para um servidor de coleta via TLS.
A lista de alvos é ampla e mira diretamente desenvolvedores.
O malware coleta credenciais de nuvem da AWS, Azure e Google Cloud, incluindo os endpoints de metadados usados por runners de CI.
Também lê carteiras de criptomoedas e seed phrases do MetaMask, Phantom e Exodus, além do cofre do gerenciador de senhas Bitwarden.
Ele também extrai senhas e cookies armazenados no navegador, além de sessões do Discord, Slack, Telegram e Steam.
E vai atrás de algo mais recente: os arquivos de configuração de ferramentas de programação com IA, como Claude Desktop, Cursor, Windsurf, VS Code e Zed, onde costumam ficar chaves de API e credenciais de servidores do Model Context Protocol.
Os binários vão além do roubo comum.
No Linux, o payload vincula a biblioteca BPF do kernel e pode carregar um programa eBPF no kernel a partir da memória, criando um ponto de apoio no kernel, e não apenas no acesso a arquivos em userspace do qual o restante do stealer depende.
A StepSecurity e a SafeDep apontaram essa capacidade, embora ainda estejam analisando exatamente o que o eBPF faz.
As builds para Windows e macOS acrescentam verificações anti-debugging, e o stealer traz mecanismos de persistence para sobreviver a reinicializações: uma tarefa agendada oculta no Windows, configurada para relançar o processo a cada minuto, e um LaunchAgent no macOS que recarrega no login.
As informações de comando e controle permanecem criptografadas dentro do binário e não apareceram em análises estáticas.
O monitoramento em tempo de execução da StepSecurity detectou o binário baixado se conectando a dois endereços IP fixos e à infraestrutura da Tor, os primeiros indicadores de rede divulgados para a campanha.
O jscrambler é uma ferramenta usada na etapa de build, instalada como dependência de desenvolvimento ou executada via CI.
Isso coloca o stealer exatamente no ambiente que ele foi projetado para roubar: chaves de nuvem, tokens de deploy e o source code que um processo de build ou CI consegue alcançar.
O pacote recebe cerca de 15.800 downloads por semana, e ainda não se sabe quantos instalaram a versão comprometida.
Esse alcance é muito menor que o dos pacotes atingidos nas grandes compromissos de supply chain do último ano, que somam bilhões de downloads semanais.
Mas, para um stealer voltado a máquinas de build, o objetivo nunca foi alcance.
O objetivo é acesso.
O caso se encaixa em uma sequência de ataques à supply chain no npm que começou no fim de 2025.
O worm Shai-Hulud partiu de um hook de instalação para roubar tokens e se espalhar por centenas de pacotes em setembro.
Os pacotes amplamente usados chalk e debug foram tomados por meio de uma conta de mantenedor alvo de phishing e passaram a desviar pagamentos em criptomoedas.
Em março, uma conta sequestrada publicou um trojan multiplataforma no Axios, uma biblioteca HTTP com mais de 83 milhões de downloads semanais.
O que torna o timing deste caso ainda mais sensível é que o npm havia acabado de fechar exatamente essa porta: o npm 12 foi lançado em 8 de julho, três dias antes desta versão, com scripts de instalação de dependências desativados por padrão.
No npm 12, um hook de preinstall como este não executa sem aprovação do usuário.
Clientes mais antigos ainda o executam automaticamente.
A versão 8.15.0 já substituiu a 8.14.0 no topo da lista de versões do npm, publicada pela mesma conta de mantenedor e sem nenhum dos alertas de malware acionados pela 8.14.0: sem script de instalação e sem binário empacotado.
Mesmo assim, a 8.14.0 não foi removida.
Ela ainda está no npm, o que significa que qualquer lockfile ou comando travado nessa versão continua instalando o stealer.
Apenas o pacote principal da CLI foi afetado; os plugins do jscrambler para webpack, gulp, Metro e grunt seguiram nas versões limpas de junho, sem hooks de instalação.
O que fazer agora
- Saia da 8.14.0.
Mude para a 8.15.0 ou fixe a 8.13.0, que é anterior ao incidente, e remova [email protected] de lockfiles e caches.
- Verifique se a 8.14.0 foi instalada.
Consulte lockfiles e logs do gerenciador de pacotes em busca de [email protected] e revise registros de CI para qualquer execução de dist/setup.js a partir de 11 de julho.
O loader grava o payload com nome aleatório no diretório temporário, então não há um nome fixo de binário para procurar.
Em vez disso, cruze os horários de instalação com processos filhos do Node e execuções no diretório temporário.
No Windows, verifique o Task Scheduler em busca de tarefas ocultas.
No macOS, examine ~/Library/LaunchAgents em busca de arquivos plist desconhecidos.
- Se a 8.14.0 tiver sido executada em uma máquina, considere roubados todos os segredos aos quais ela poderia ter acesso, e não apenas expostos.
Faça a rotação de chaves de nuvem, tokens do npm e do GitHub, além de chaves de API de ferramentas de IA e do MCP.
Revogue sessões do Discord, Slack, navegador e Bitwarden, e mova qualquer criptomoeda armazenada em carteiras desse host.
Bloqueie os dois IPs de comando e controle listados abaixo.
A limpeza foi rápida, mas um stealer faz seu trabalho nos segundos após a instalação.
A 8.14.0 ainda está no npm, e uma build fixada nela, em um cliente antigo que executa scripts de instalação, continua rodando o payload.
Quando a 8.15.0 chegou ao topo da lista, os segredos de qualquer máquina que já havia executado a 8.14.0 provavelmente já tinham sido levados.
Indicadores de comprometimento
Pacote malicioso: [email protected].
Hashes SHA-256 dos arquivos adicionados e de seus payloads descompactados:
- dist/setup.js: a742de963f14a92d24ebcbc7b44ac867e23a20d31d1b0094a13a4f83287f4e60
- dist/intro.js: a41a523ef9517aab37ed6eea0ec881821bdcb7aefcb5c5f603adc7907f868c86
- Payload Linux: fbbcf4d8f98168f78f5c0c47a9ae56d59ec8ac84a7c9ca6b797fedfb8d62d2bd
- Payload Windows: b7ca95d1b23c8e67416a25cedf741de0917c2096bbc9d24649eea7853d054903
- Payload macOS: c8fd47d36bdf7c825378593ab82ed8c24d1dc52e26b507812393e24e1d5201fd
Endpoints de rede observados em tempo de execução pela StepSecurity, com os dois IPs sendo endpoints diretos do atacante e o binário também acessando a infraestrutura da Tor, possivelmente para conectividade ou roteamento:
- IP de C2: 37.27.122[.]124
- IP de C2: 57.128.246[.]79
- Infraestrutura da Tor: check.torproject[.]org, archive.torproject[.]org
Artefatos no host: um arquivo oculto com nome aleatório no diretório temporário do sistema (.{random}, ou .{random}.exe no Windows), além de uma tarefa agendada oculta no Windows ou de um LaunchAgent no macOS para persistence.
Publicidade
Tenha acesso aos melhores hackers éticos do mercado através de um serviço personalizado, especializado e adaptado para o seu negócio. Qualidade, confiança e especialidade em segurança ofensiva de quem já protegeu centenas de empresas. Saiba mais...