Uma campanha de ataque à cadeia de suprimentos de software foi identificada por pesquisadores de segurança da JFrog, revelando um pacote npm malicioso chamado js-logger-pack. Este pacote, que aparentava ser uma ferramenta de log benigna, foi utilizado para transformar a plataforma Hugging Face, amplamente confiada para hospedagem de modelos de IA, em uma rede de entrega de malware e um backend de exfiltração de dados roubados.
descoberta e escopo da campanha
O ataque marca uma mudança clara na forma como os atacantes abusam de serviços legítimos em nuvem para executar ataques de cadeia de suprimentos enquanto permanecem ocultos. O pacote apareceu inicialmente inofensivo, carregando um logger plausível e benigno no projeto do desenvolvedor. No entanto, o ataque real foi iniciado através de um script postinstall que foi executado automaticamente durante a instalação.
Esse script lançou um processo em segundo plano desanexado, permitindo que o comando npm install visível terminasse normalmente enquanto um downloader oculto continuava a operar. Com base no sistema operacional do host, o malware buscava um dos quatro binários maliciosos de um repositório público do Hugging Face controlado pelo atacante, identificado como Lordplay/system-releases.
técnica de instalação e persistência
A análise da JFrog Security identificou e extraiu o payload de JavaScript embutido de todos os quatro binários de Aplicação Executável Única (SEA) do Node.js, abrangendo Windows, macOS e Linux. A análise confirmou que o mesmo bundle de JavaScript multiplataforma foi injetado em cada container, com toda a lógica maliciosa empacotada dentro desse único bundle.
Os quatro binários não eram famílias de malware separadas; eram o mesmo implante envolto em quatro diferentes contêineres de runtime do Node.js. Uma vez implantado, o malware estabeleceu persistência através de métodos nativos da plataforma: tarefas agendadas e chaves de registro Run no Windows, entradas LaunchAgent no macOS e unidades de usuário systemd no Linux.
exfiltração de dados via hugging face
O aspecto mais tecnicamente impressionante desta campanha foi o uso do Hugging Face como um canal de roubo de dados ao vivo. Em vez de enviar arquivos roubados para um servidor privado, o operador redirecionou todos os dados coletados para conjuntos de dados privados do Hugging Face, terceirizando todo o armazenamento de roubo de dados para a própria infraestrutura da plataforma.
Quando o operador acionava uma tarefa de upload através do servidor de comando e controle (C2), o implante recebia um token do Hugging Face, um nome de usuário, um caminho de destino e um ID de upload. O malware compactava o arquivo ou pasta solicitada em um arquivo gzip, criava ou reutilizava um conjunto de dados privado do Hugging Face sob a conta do atacante e enviava o arquivo usando um cliente embutido do Hugging Face hub.
impacto e alcance da infecção
Esta abordagem deu ao atacante uma vantagem operacional real. O servidor C2 nunca teve que armazenar o conteúdo roubado diretamente, reduzindo sua exposição e tornando o tráfego mais difícil de detectar. O atacante simplesmente apontava o implante para contas do Hugging Face controladas pelo atacante e deixava a plataforma lidar com o armazenamento.
O implante também suportava um recurso de limpeza de sessão que matava processos de navegador e apagava credenciais, forçando os usuários a digitar senhas novamente enquanto o keylogger já estava em execução. Qualquer credencial inserida após esse logout forçado poderia ser capturada e enviada para um conjunto de dados privado em minutos.
medidas de mitigação recomendadas
As organizações devem adotar medidas imediatas para mitigar este risco. Todas as chaves secretas devem ser rotacionadas sem demora, incluindo chaves AWS, chaves SSH, tokens npm, senhas de banco de dados, chaves de API e credenciais armazenadas em perfis de navegador.
É necessário remover todos os artefatos de persistência, excluindo a tarefa agendada MicrosoftSystem64, a chave de registro Run, a entrada LaunchAgent ou a unidade systemd, dependendo do sistema operacional. O pacote deve ser purgado e o cache do npm limpo, executando o comando npm config set ignore-scripts true para evitar que hooks postinstall sejam executados automaticamente.
Todas as alterações de dependência no package.json devem ser revisadas cuidadosamente, incluindo atualizações de nível de patch menor. Qualquer máquina que executou a versão 1.1.27 do js-logger-pack deve ser tratada como totalmente comprometida até que todas as chaves secretas sejam rotacionadas e todos os artefatos de persistência sejam removidos.
perguntas frequentes
Como identificar se meu projeto foi afetado?
Verifique se o pacote js-logger-pack está listado nas dependências do seu package.json e se a versão é 1.1.27 ou superior.
É seguro usar o Hugging Face para armazenamento?
Sim, mas é necessário monitorar o uso de tokens e garantir que apenas contas autorizadas tenham acesso aos conjuntos de dados privados.
Como prevenir ataques de cadeia de suprimentos?
Implementar políticas de aprovação de dependências, usar ferramentas de análise de segurança de software (SAST/DAST) e revisar scripts de instalação automatizados.