Pacotes maliciosos no npm se passam por ferramentas PostCSS para entregar trojan de acesso remoto no Windows

Pacotes maliciosos no npm se passam por ferramentas PostCSS para entregar trojan de acesso remoto no Windows

Uma campanha de cadeia de suprimentos explora o ecossistema npm com dependências falsas, desencadeando uma infecção complexa que rouba credenciais de navegadores, contorna criptografia local e estabelece comunicação remota via Python compilado.

ComponentePacotes npm maliciosos (aes-decode-runner-pro, postcss-minify-selector, postcss-minify-selector-parser) e cadeia de infecção baseada em PowerShell, VBScript e Python compilado via Nuitka.
VetorInstalação de dependências via npm em ambientes de desenvolvimento ou automação de build, explorando a confiança em pacotes com nomes similares a bibliotecas legítimas como postcss-selector-parser.
ImpactoExecução de um Remote Access Trojan (RAT) voltado para Windows, contorno da proteção App-Bound Encryption (ABE), roubo de credenciais e extensões do Google Chrome, execução de comandos no sistema e transferência arbitrária de arquivos.
PrioridadeRemover os pacotes identificados dos arquivos de dependência, realizar triagem forense nas máquinas comprometidas em busca de artefatos como .pyd e settings.ps1, e rotacionar credenciais de navegadores e estáções de trabalho.
Resumo técnico

Pesquisadores de segurança identificaram uma campanha ativa direcionada ao ecossistema npm, utilizando pacotes maliciosos projetados para se passarem por ferramentas legítimas de processamento de CSS. A operação se aproveita da confiança inerente dos desenvolvedores em bibliotecas de build e parseamento, adotando nomenclaturas que imitam codecs de criptografia ou minificadores de seletores com grande volume de downloads semanais.

A ameaça não se limita à coleta rudimentar de variáveis de ambiente, mas implementa uma arquitetura de infecção elaborada focada na implantação de um cavalo de troia de acesso remoto (RAT) em sistemas operacionais Windows. O ataque foi rastreado até pacotes específicos publicados na plataforma, que engatilham uma cascata de execuções de scripts envolvendo PowerShell, VBScript e binários personalizados.

Os pacotes maliciosos Identificados na campanha incluem aes-decode-runner-pro, postcss-minify-selector e postcss-minify-selector-parser. Todos foram publicados recentemente e Hamilton de dependências legítimas ou de uns aos outros para criar uma ilusão de utilidade. Ao final da execução, um binário Python ofuscado é carregado na memória assumindo o controle total da estáção de trabalho do desenvolvedor.

Fluxo técnico

A cadeia de infecção é inicializada durante a rotina de instalação do módulo comprometido. O código fonte malicioso vem acoplado a um dropper em JavaScript que atua na geração de um arquivo PowerShell chamado settings.ps1 no disco rígido da vítima. Ao ser executado, o script PowerShell atua como um mecanismo de download, fazendo uso do binário nativo curl.exe para requisitar a próxima fase do ataque a partir de um servidor de comando e controle.

O servidor remoto, cujo domínio de comunicação foi defangado como nvidiadriver[.]net, responde à requisição entregando um arquivo compactado no formato ZIP. O conteúdo deste pacote é composto por um arquivo Visual Basic Script denominado update.vbs, que é imediatamente acionado no sistema comprometido via wscript.exe.

Junto ao script VBScript, o arquivo compactado aloja um ambiente de execução Python embutido, um script de inicialização (loader.py) e múltiplos módulos de extensão nativa da linguagem, compilados estaticamente usando a ferramenta Nuitka (gerando arquivos com a extensão .pyd). A utilização do Nuitka converte o código fonte do malware em binários C, dificultando a análise estática tradicional e a inspeção de signatures por soluções antivirus baseadas em assinaturas.

A tarefa do script VBScript é configurar o ambiente isolado do Python na máquina do operador e disparar o carregamento do arquivo loader.py. Este carregador injeta as bibliotecas dinâmicas compiladas, ativando o núcleo lógico do malware, que se comunica com o servidor de gerenciamento no endereço IP 95.216.92[.]207, utilizando a porta de comunicação 8080.

As bibliotecas .pyd compõem a infraestrutura de roubo de dados. O módulo auto.pyd é responsável por varrer o sistema em busca de credenciais e extensões do Google Chrome, utilizando técnicas para contornar ativamente as proteções de App-Bound Encryption (ABE) implementadas pelo navegador. O módulo command.pyd contém rotinas de verificação de ambiente virtual perfilando o host para execução de comandos shell remotos e transferência de arquivos bilaterais. Já o config.pyd armazena as strings de configuração fundamentais, constantes, URLs remotas e os nomes das chaves de registro Windows necessárias para a instalação da persistência do ataque.

Superfície afetada

O alvo principal desta campanha são estáções de trabalho de desenvolvedores de software, engenheiros front-end ou servidores de automação de infraestrutura em ambientes Windows que utilizam a ferramenta PostCSS em seus fluxos de build. Ao comprometer as máquinas de engenharia, a falha de cadeia de suprimentos cria um vetor direto paraings de movimentação lateral contra repositórios de código corporativo, ambientes de nuvem e secrets de autenticação embutidos em arquivos de configuração de desenvolvimento.

A obscuridade do ataque é ampliada pelo fato de que as bibliotecas falsas simulam ser ramificações de parsers altamente requisitados. O pacote postcss-minify-selector-parser, por exemplo, se aproveita da alta demanda pela biblioteca legítima postcss-selector-parser, que registra mais de 127 milhões de downloads semanais, exacerbando o risco de instalação indepente por digitação incorreta ou automatização sem auditoria.

O escopo do problema não está restrito a estes pacotes isoladamente. O ecossistema tem sofrido pressão semelhante com ataques a repositórios de Inteligência Artificial, ferramentas de conhecimento e bibliotecas de integração falsa. Grupos de ameaças têm sobreposto estas implantações de RATs com infecções gêmeas, como pa- cotes entregando o bot InvisibleFerret, via diffs maliciosos escondidos em espaços horizontais de whitespace de repositórios Git colaborativos, ou scripts roubando credenciais do ecossistema Claude Code, chaves SSH, configurações do git config, tokens do GitHub CLI e arquivos sensíveis do Docker como ~/.docker/config.json.

  • Estáções de trabalho de desenvolvedores em ambientes Windows utilizando dependências de build não auditadas.
  • Credenciais de navegadores, senhas sincronizadas e tokens de extensões comprometidos pelo módulo de roubo auto.pyd.
  • Chaves de configuração contidas em ambientes de desenvolvimento locais que podem ser comprometidos em ataques colaterais do mesmo cluster de infraestrutura de ameaça.
  • Repositórios de controle de versão comprometidos por pull requests maliciosos contendo diferenças ocultas em caracteres invisíveis.
Hunting e telemetria

A detecção eficaz desta ameaça exige cruzamento de logs de processos, auditoria rigorosa de registros npmPJects e vigilância ativa sobre acessos de rede não autorizados. É fundamental mapear a geração de processos suspeitos originários a partir de tarefas de build de aplicações front-end. O uso de binários legítimos do Windows como wscript.exe, curl.exe e chamadas diretas a partir de interpretadores de JavaScript levanta fortes suspeitas de injeção de código lateral.

Equipes de resposta a incidentes devem configurar alertas focados na linhagem de processos (process lineage), observando se tarefas como npm install resultam em execuções subsequintas em terminais nativos do sistema operacional Windows. A presença de arquivos com extensão .pyd fora dos diretórios padrões das instalações oficiais da linguagem Python também deve gerar alertas críticos imediatos.

  • Monitorar processos de gerenciadores de pacotes acionando o binário curl.exe para baixar arquivos a partir de domínios não pertencentes ao registro oficial de repositórios.
  • Inspecionaralertas de linhagem de processos onde wscript.exe aciona arquivos como update.vbs, resultando em processos fantasma executando scripts Python nativos.
  • Deflagrar alertas de firewall e IDS para tráfego de saída nas portas não convencionais tentando contactar C2 em endereços previamente identificados ou na porta 8080, em especial a comunicação com o IP 95.216.92[.]207.
  • Auditorar estáções de trabalho Windows que apresentem acessos de leitura ou modificação na pasta de dados locais do Google Chrome por processos não assinados.
  • Inspecionar logs de alteração de arquivos para identificar a criação de bibliotecas dinâmicas compiladas via Nuitka (*.pyd) nos diretórios %TEMP% ou %APPDATA%.
Mitigação

A contenção deste risco exige abordagem dupla: higienização de dependências no ambiente de desenvolvimento e resposta forense rigorosa em estáções de trabalho com evidências de infecção. O uso de ferramentas de análise estática de música (SCA) focadas na descoberta de typosquatting pode reduzir drasticamente a possibilidade de infecções iniciais.

Equipes afetadas devem priorizar isolamento de máquinas, exame de artefatos locais para identificar a extensão do comprometimento e revogação agressiva de todos os tokens, contas de serviços e credenciais vinculadas à identidade do desenvolvedor afetado, operando sob premissa de que as credenciais de navegação e de repositórios remotos foram totalmente comprometidas e exfiltradas.

  • Remover imediatamente os pacotes identificados (aes-decode-runner-pro, postcss-minify-selector, postcss-minify-selector-parser) dos repositórios e bloquear suas hashes ou nomes em gateways locais de gerenciamento de pacotes.
  • Isolar máquinas suspeitas e analisar o sistema de arquivos em busca de artefatos conhecidos da camada de dropper, como os arquivos settings.ps1, update.vbs e bibliotecas com nomes padronizados do núcleo RAT como loader.py, auto.pyd, command.pyd e config.pyd.
  • Rotacionar forçadamente as credenciais de desenvolvedores, especialmente redefinindo senhas salvas no navegador e revogando chaves SSH e tokens de acesso pessoal (PATs) de sistemas como GitHub, GitLab e DockerHub.
  • Implementar políticas rígidas de execução scripts (AppLocker ou Windows Defender Application Control) para prevenir a execução de .vbs, .ps1 e binários não assinados pelo sistema operacional acionados durante processos de packaging de JavaScript.
  • Adotar ferramentas de revisão de pull requests nas esteiras de CI/CD que detectem e bloqueiem diffs baseados em caracteres de formatação ocultos ou hidden payloads de stealers como BeaverTail.

Postar um comentário

0 Comentários