Versões beta de dois pacotes npm no namespace @joyfill foram comprometidas para distribuir um trojan de acesso remoto, ou RAT, associado à família de malware DEV#POPPER.
A lista de pacotes afetados é a seguinte:
@joyfill/[email protected]
@joyfill/[email protected]
Segundo análise da Socket, os dois pacotes “contêm um implante JavaScript acionado no momento da importação que resolve código criptografado por meio de transações nas redes Tron, Aptos e BNB Smart Chain”.
Diferentemente de outros pacotes maliciosos, que são disparados por meio de um gancho de ciclo de vida do npm, o implante distribuído nessas bibliotecas JavaScript é executado quando o Node.js carrega o ponto de entrada do pacote CommonJS.
Vale destacar que o uso de uma estrutura de resolução multiblockchain, com Tron, Aptos e BNB Smart Chain (BSC), já foi associado a um cluster de ameaça monitorado como PolinRider, considerado relacionado ao Contagious Interview.
No início deste mês, Checkmarx e OpenSourceMalware chamaram atenção para um conjunto de pacotes npm maliciosos, reunidos sob o nome ViteVenom, que miravam o ecossistema de ferramentas de frontend Vite usando a mesma infraestrutura em camadas baseada em blockchain para entregar um RAT com capacidade de shell reverso, coleta de credenciais, exfiltração de arquivos e implantação persistente de backdoor.
O implante é composto por duas sequências paralelas de ações:
Uma ramificação em processo, que leva a um payload JavaScript recuperado de 77 KB com semelhanças com a família de malware DEV#POPPER
Uma segunda ramificação, que inicia um processo Node.js isolado, solicita um payload de inicialização separado ao endereço 23.27.13[.]43, descriptografa a resposta e a avalia
Depois que o pacote é carregado, ele inicia uma distribuição baseada em blockchain para obter um hash de transação da BSC a partir da transação de saída mais recente de um endereço Tron codificado.
Se essa etapa falhar, ele consulta uma conta Aptos como alternativa para buscar a transação da BSC e, a partir dela, descriptografar e extrair o código JavaScript para então executá-lo.
Tanto a ramificação em processo quanto a isolada usam um conjunto distinto de endereços de carteira, contas e transações para Tron, Aptos e BSC.
O uso de blockchain também traz resiliência operacional e permite trocar os payloads sem a necessidade de publicar uma nova versão dos pacotes.
O primeiro payload em processo é um carregador JavaScript que usa o método de resolução via blockchain para recuperar uma segunda etapa de malware chamada “clientCode”.
Já o processo isolado consulta o endereço IP citado para obter e executar código JavaScript.
“Esta é uma ramificação redundante de entrega, não um fallback inofensivo”, explicou a Socket.
“Ela fica isolada do processo Node.js que fez a importação e pode continuar mesmo depois que uma tarefa de build, teste ou CLI termina.”
O payload final “clientCode” está fortemente ofuscado e funciona como um RAT para Node.js com os recursos abaixo, ao mesmo tempo em que evita a execução em máquinas de desenvolvimento, de CI ou em sandbox com os nomes de host github-runner, buildbot, buildkitsandbox e microsoft-standard-WSL2:
Carregar arquivos para o host de envio configurado
Recuperar JavaScript adicional
Coletar detalhes básicos do host
Enviar mensagens de verificação de status
Ler dados da área de transferência por meio do PowerShell no Windows, do pbpaste no macOS e do xclip ou xsel no Linux
Dois payloads foram associados ao processo isolado: o RAT “clientCode” e um infostealer em Python capaz de coletar uma ampla variedade de dados de hosts comprometidos.
A avaliação é de que se trata de uma nova iteração do malware OmniStealer, cujos detalhes foram divulgados pela eSentire no início de abril.
Os dados coletados pelo malware incluem:
Informações do ambiente e do host
Dados do Windows Credential Manager e do Linux Secret Service
Dados de navegadores Chromium e Firefox
Armazenamento de extensões de navegador para carteiras digitais e gerenciadores de senhas
Credenciais do Git
Configuração da GitHub CLI
Logs do GitHub Desktop
Armazenamento do Microsoft Visual Studio Code
Segundo a Socket, tanto o ViteVenom quanto o conjunto mais recente de pacotes npm estão ligados à mesma operação em andamento conduzida por hackers norte-coreanos, e não a campanhas separadas.
De acordo com a empresa de segurança de aplicações, ambas as versões maliciosas teriam sido publicadas pela mesma identidade no npm, usando Node.js 18.20.0 e npm 10.5.0, com o código presente no momento da montagem do pacote.
Ainda não está claro se essa injeção de código-fonte ocorreu após o comprometimento de uma estação de trabalho de desenvolvimento, de um repositório de código, de um ambiente de CI ou de credenciais de publicação.
Desenvolvedores que instalaram as versões afetadas são orientados a removê-las de lockfiles, caches, espelhos internos, imagens de build e artefatos de implantação, fixar uma versão verificada e rotacionar as credenciais expostas pelo processo Node.js afetado.
“A versão @joyfill/layouts deve ser tratada como capaz de executar código arbitrário no contexto de qualquer processo que a carregue”, afirmou a Socket.
“Isso inclui ambientes de desenvolvimento, executores de CI, ferramentas de teste, renderização no lado do servidor e builds.”
“O código final recuperado pode coletar informações do host, estabelecer um canal de controle remoto via Socket.IO, executar JavaScript ou comandos de shell fornecidos, enviar arquivos, ler dados da área de transferência e modificar arquivos pertencentes a ferramentas de desenvolvimento.”
Publicidade
Nossa audiência é formada por analistas, pentesters, decisores e entusiastas que consomem nossas notícias todo dia pelo Site, Newsletter e Instagram. Fale com quem realmente importa para o seu negócio. Anuncie aqui. Saiba mais...