DEV#POPPER RAT Distribuído Através de Lançamentos Comprometidos do Joyfill no npm
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Duas versões beta comprometidas do @joyfill pacote npm foram encontradas contendo um implante JavaScript de importação. O implante usa transações em blockchain através de Tron, Aptos e BNB Smart Chain para resolver e baixar o trojan de acesso remoto DEV#POPPER (RAT). A campanha tem como alvo estações de trabalho de desenvolvedores e pipelines CI/CD executando código malicioso assim que o módulo afetado é importado.
Investigação
A Equipe de Pesquisa da Socket descobriu o comprometimento enquanto analisava versões beta de @joyfill/layouts and @joyfill/components. Os pesquisadores identificaram uma cadeia de entrega de payloads em várias etapas que combinava JavaScript ofuscado com mecanismos de despacho baseados em blockchain. A investigação ligou o carregador inicial à família PolinRider e confirmou que o payload final pertencia à família de malware DEV#POPPER.
Mitigação
Os desenvolvedores devem remover imediatamente as @joyfill versões beta afetadas de lockfiles, caches de pacotes, ambientes de build e artefatos de implantação. Fixar dependências em versões verificadas como @joyfill/layouts@0.1.1 or @joyfill/components@4.0.0-rc24 é recomendado. As equipes de segurança também devem bloquear as versões comprometidas através de proxies de registro e ferramentas de governança de dependências.
Resposta
Qualquer sistema que importou os pacotes afetados deve ser isolado, e todas as credenciais acessíveis ao processo Node.js comprometido devem ser rotacionadas. Os investigadores devem inspecionar aplicativos de desenvolvedores, incluindo VS Code, GitHub Desktop e Discord, para mudanças inesperadas nos módulos principais. A telemetria de endpoint e CI/CD também deve ser revisada para processos Node.js destacados, endereços C2 conhecidos e tráfego suspeito de RPC em blockchain.
Fluxo de Ataque
Detecções
Possível Tentativa de Abuso de Publicnode Ethereum Como Canal C2 (via dns_query)
Possível Comunicação de Domínio de Consulta de IP Tentada (via dns)
Possível Captura de Tela no Linux (via linha de comando)
Arquivo Oculto Foi Criado no Host Linux (via file_event)
IOCs (HashSha256) para detectar: Duas Versões Beta do npm Joyfill Comprometidas para Entregar DEV#POPPER Trojan de Acesso Remoto
IOCs (SourceIP) para detectar: Duas Versões Beta do npm Joyfill Comprometidas para Entregar DEV#POPPER Trojan de Acesso Remoto
IOCs (DestinationIP) para detectar: Duas Versões Beta do npm Joyfill Comprometidas para Entregar DEV#POPPER Trojan de Acesso Remoto
Detecção de Indicadores de Malware DEV#POPPER [Conexão de Rede do Windows]
Detecção de Pacotes npm Joyfill Comprometidos Entregando Trojan de Acesso Remoto [Evento de Arquivo no Linux]
Detecção de Injeção de Módulo Node.js e Execução de Processo Destacado [Criação de Processo no Linux]
Execução de Simulação
Pré-requisito: O Check de Pré-voo de Telemetria & Base deve ter passado.
Justificativa: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para disparar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e visam gerar a telemetria exata esperada pela lógica de detecção. Exemplos abstratos ou não relacionados levarão a erros de diagnóstico.
-
Narrativa do Ataque & Comandos: O adversário injetou com sucesso código malicioso em uma dependência amplamente usada do npm (Comprometimento da Cadeia de Suprimentos). Quando um desenvolvedor executa
npm installou inicia um projeto, o script malicioso é executado. O script primeiro tenta ocultar sua intenção ao atribuir afunção require a uma variável global (global.r = requireglobal.r = require), permitindo que ele carregue módulos em qualquer lugar do aplicativo sem chamarfunção require a uma variável global (diretamente (ofuscação). Finalmente, ele usachild_process.spawnpara lançar um processo de shell destacado que se conecta de volta a um servidor de Comando & Controle (C2), tentando evitar a detecção ao desacoplar o processo malicioso do processo pai Node.js. -
Script de Teste de Regressão:
#!/bin/bash # Script de simulação para acionar a regra de detecção de injeção de Node.js. # Este script cria um arquivo JS malicioso temporário e o executa via Node.js. MALICIOUS_FILE="malicious_pkg.js" echo "[+] Criando script Node.js malicioso..." cat << 'EOF' > $MALICIOUS_FILE // Simular injeção global de módulo (T1027) global.r = require; // Simular execução de processo destacado via child_process.spawn (T1059.006) const cp = require('child_process'); cp.spawn('bash', ['-c', 'sleep 30 &'], { detached: true, stdio: 'ignore' }); console.log("[!] Payload malicioso executado."); EOF echo "[+] Executando script malicioso via Node.js..." node $MALICIOUS_FILE echo "[+] Simulação completa. Verifique SIEM para Alerta: Detecção de Injeção de Módulo Node.js e Execução de Processo Destacado." -
Comandos de Limpeza:
# Remover o arquivo malicioso simulado rm -f malicious_pkg.js # Matar quaisquer processos de sono órfãos gerados pela simulação pkill -f "sleep 30"