18 pacotes npm maliciosos distribuem RAT multiplataforma

18 pacotes npm maliciosos distribuem RAT multiplataforma

Os pacotes npm maliciosos voltaram a colocar a cadeia de suprimentos de software no centro das preocupações da comunidade de desenvolvimento. Pesquisadores de segurança identificaram uma campanha sofisticada que utilizou 18 pacotes maliciosos publicados no npm para distribuir um Trojan de Acesso Remoto (RAT) capaz de comprometer sistemas Linux, macOS e Windows, com foco especial em desenvolvedores ligados ao ecossistema da Alibaba.

O caso chama atenção porque não se trata apenas de um malware escondido em uma biblioteca qualquer. Os atacantes construíram uma árvore completa de dependências maliciosas, simulando componentes internos utilizados por empresas e explorando a confiança natural existente nos gerenciadores de pacotes modernos. O resultado é um ataque silencioso que pode conceder controle remoto do computador da vítima, roubar credenciais corporativas e abrir caminho para novas invasões.

Neste artigo, você entenderá como a campanha funciona, por que o Linux recebeu atenção especial dos criminosos, quais técnicas de evasão foram utilizadas e, principalmente, como proteger seus projetos Node.js contra esse tipo de ameaça.

Entendendo a anatomia do ataque à cadeia de suprimentos

Ataques à cadeia de suprimentos vêm crescendo rapidamente porque exploram um ponto crítico do desenvolvimento moderno: a confiança depositada em dependências externas.

Em vez de atacar diretamente uma empresa, os criminosos publicam pacotes aparentemente legítimos em repositórios públicos como o npm, esperando que desenvolvedores ou processos automatizados façam sua instalação.

Nesta campanha, os atacantes criaram diversos pacotes imitando bibliotecas privadas utilizadas pelo ecossistema da Alibaba, especialmente componentes associados ao escopo @ali.

A estratégia lembra ataques de dependency confusion, nos quais um pacote público recebe o mesmo nome de uma dependência privada. Caso uma configuração incorreta permita a consulta ao registro público, o gerenciador de pacotes poderá instalar automaticamente a versão maliciosa.

O aspecto mais sofisticado da campanha foi a construção de uma cadeia de dependências cuidadosamente organizada.

Bibliotecas aparentemente inofensivas, como lib-mtop e local-config-parser, não executavam imediatamente atividades suspeitas. Em vez disso, elas atuavam como intermediárias para carregar outros componentes, dificultando análises automatizadas e reduzindo as chances de detecção precoce.

Essa estrutura modular também permite que os operadores alterem partes da infraestrutura maliciosa sem precisar substituir todos os pacotes publicados.

npm

Como os pacotes npm maliciosos escondiam o malware

Um dos pontos mais perigosos dessa campanha foi o uso de scripts executados automaticamente durante a instalação dos pacotes.

Sempre que um desenvolvedor executava npm install, determinadas bibliotecas disparavam rotinas responsáveis por:

  • Baixar componentes adicionais diretamente da infraestrutura dos atacantes;
  • Identificar o sistema operacional utilizado pela vítima;
  • Selecionar a carga útil apropriada para Linux, Windows ou macOS;
  • Executar o malware utilizando técnicas destinadas a reduzir sua exposição ao antivírus.

Essa abordagem torna o ataque extremamente flexível, pois o código inicialmente presente no npm funciona apenas como um carregador (loader), enquanto a funcionalidade principal permanece hospedada em servidores externos.

Caso a infraestrutura seja modificada, basta alterar o conteúdo baixado dinamicamente, sem necessidade de republicar novos pacotes.

Como o malware age em Linux, macOS e Windows

O objetivo final da campanha é instalar um RAT multiplataforma, permitindo que os operadores assumam o controle remoto da máquina comprometida.

Embora a lógica geral seja semelhante, o comportamento varia conforme o sistema operacional.

Linux recebe uma das cargas mais furtivas

No Linux, a execução foi projetada para reduzir rastros no sistema.

Após identificar o ambiente, o malware realiza o download de um binário temporário para o diretório /tmp, um local frequentemente utilizado para arquivos temporários.

Em seguida, o executável é iniciado imediatamente.

Logo após sua execução, o arquivo armazenado em disco é removido, permanecendo apenas o processo ativo em memória.

Essa técnica oferece diversas vantagens aos invasores:

  • Redução dos indicadores de comprometimento no disco;
  • Menor probabilidade de detecção por ferramentas que monitoram apenas arquivos;
  • Dificuldade para análises forenses posteriores;
  • Persistência da sessão remota enquanto o processo permanece em execução.

Para administradores de sistemas Linux, isso significa que uma simples inspeção do sistema de arquivos pode não revelar a presença do malware.

Em muitos casos, torna-se necessário analisar processos ativos, conexões de rede e logs de auditoria para identificar a infecção.

Como funciona a infecção no macOS

No macOS, os operadores utilizam mecanismos típicos de persistência do sistema.

Entre eles estão alterações em arquivos como ~/.zshrc, garantindo que componentes maliciosos sejam executados sempre que um novo terminal for iniciado.

Além disso, foram observadas técnicas envolvendo Launch Agents, recurso nativo do macOS utilizado para iniciar aplicativos automaticamente durante o login do usuário.

O malware também procura comprometer aplicativos populares dentro do ecossistema da Alibaba, ampliando as possibilidades de espionagem e coleta de informações.

O comportamento observado no Windows

No Windows, a campanha adapta sua execução ao ambiente da vítima, utilizando mecanismos compatíveis com o sistema operacional para manter a persistência e facilitar futuras conexões remotas.

Assim como ocorre nas demais plataformas, o objetivo principal não é causar danos imediatos, mas estabelecer uma presença duradoura que permita:

  • Execução remota de comandos;
  • Roubo de credenciais;
  • Exfiltração de arquivos;
  • Movimentação lateral em redes corporativas.

Essa abordagem demonstra que o interesse dos atacantes está muito mais na espionagem e no acesso contínuo do que em ataques destrutivos.

Técnicas de evasão utilizadas pelos pacotes npm maliciosos

Outro diferencial da campanha está no conjunto de mecanismos empregados para escapar da detecção.

Entre as principais técnicas observadas destacam-se:

  • Execução em múltiplos estágios, dificultando análises estáticas;
  • Download dinâmico da carga útil apenas após a instalação;
  • Uso de dependências aparentemente legítimas;
  • Estrutura modular de componentes;
  • Remoção do executável temporário após sua execução;
  • Separação entre loader e payload principal.

Esse conjunto reduz significativamente a eficácia de scanners automatizados que verificam apenas o conteúdo publicado originalmente no repositório npm.

O caso do pacote PyPI mrmustard envenenado

Embora o foco desta campanha seja o npm, pesquisadores também chamaram atenção para um incidente semelhante envolvendo o PyPI, principal repositório de pacotes Python.

O pacote mrmustard, utilizado em projetos relacionados à computação quântica, foi alvo de comprometimento e passou a distribuir código malicioso.

O malware buscava principalmente o roubo de credenciais associadas a ambientes de computação científica e infraestrutura em nuvem, incluindo:

  • SLURM;
  • AWS;
  • Kubernetes.

O episódio reforça que ataques à cadeia de suprimentos deixaram de atingir apenas um ecossistema específico e passaram a afetar praticamente todos os grandes gerenciadores de pacotes utilizados pela indústria.

Como verificar se você foi afetado pelos pacotes npm maliciosos

Caso sua organização utilize projetos Node.js, especialmente em ambientes corporativos, é recomendável realizar uma auditoria imediata.

Entre os pacotes identificados pelos pesquisadores estão exemplos como:

  • lib-mtop
  • local-config-parser
  • aone-kit
  • smart-config-manager

Como a campanha envolveu 18 bibliotecas maliciosas, também é importante verificar toda a árvore de dependências instalada em projetos recentes, principalmente aqueles ligados ao ecossistema da Alibaba.

Uma inspeção apenas do arquivo package.json pode não ser suficiente, já que parte dos componentes pode ter sido instalada como dependência indireta.

Como proteger projetos Node.js contra ataques semelhantes

Nenhuma medida isolada elimina completamente esse tipo de ameaça. Entretanto, um conjunto de boas práticas reduz significativamente o risco.

Entre as recomendações mais importantes estão:

  • Executar regularmente o npm audit para identificar dependências conhecidas como vulneráveis ou maliciosas.
  • Revisar cuidadosamente novas bibliotecas antes de adicioná-las aos projetos.
  • Utilizar registros privados para dependências internas, evitando ataques de dependency confusion.
  • Configurar políticas de aprovação para novas dependências em pipelines de CI/CD.
  • Rotacionar imediatamente credenciais caso exista qualquer suspeita de comprometimento.
  • Inspecionar conexões de saída inesperadas após instalações de pacotes.
  • Monitorar processos ativos em sistemas Linux para identificar binários executados a partir de diretórios temporários.
  • Verificar alterações não autorizadas em arquivos como ~/.zshrc e configurações de inicialização automática.
  • Empregar ferramentas de análise de dependências capazes de detectar comportamentos suspeitos durante a instalação.
  • Manter ambientes de desenvolvimento isolados sempre que possível.

Também é recomendável revisar periodicamente os arquivos package-lock.json ou equivalentes, garantindo que dependências inesperadas não tenham sido introduzidas durante atualizações automáticas.

O impacto para a segurança do código aberto

O episódio demonstra que a confiança implícita existente nos gerenciadores modernos de pacotes continua sendo um dos maiores desafios da segurança de software.

À medida que projetos passam a depender de centenas — ou até milhares — de bibliotecas externas, torna-se praticamente impossível realizar uma validação manual completa de toda a cadeia de dependências. Esse cenário cria oportunidades para campanhas cada vez mais sofisticadas, nas quais pacotes aparentemente legítimos servem apenas como porta de entrada para malwares altamente especializados.

Para desenvolvedores, equipes de DevOps, administradores de sistemas Linux e profissionais de cibersegurança, a principal lição é clara: instalar uma dependência não deve ser encarado como um ato de confiança automática. Auditorias contínuas, monitoramento de comportamento, uso de registros privados e processos rigorosos de revisão passaram a ser requisitos fundamentais para proteger ambientes de desenvolvimento.

Em um momento em que ataques à cadeia de suprimentos se tornam mais frequentes e direcionados, revisar os arquivos package.json, analisar dependências transitivas e compartilhar esse alerta com toda a equipe pode evitar que uma simples instalação de pacote se transforme em uma invasão completa da infraestrutura.