Uma nova e cuidadosamente elaborada campanha de cadeia de suprimentos de software está atingindo desenvolvedores através do registro de pacotes npm, utilizando mensagens de instalação falsas para ocultar atividade maliciosa. A campanha, batizada de "Ghost campaign" por pesquisadores de segurança, começou no início de fevereiro de 2026 e depende de um conjunto de pacotes npm construídos para enganar desenvolvedores a entregarem suas credenciais do sistema enquanto implantam secretamente um trojano de acesso remoto (RAT) em suas máquinas.
Descoberta e escopo da campanha Ghost
A análise da ReversingLabs identificou a atividade maliciosa no início de fevereiro de 2026, rastreando-a até sete pacotes publicados por um usuário do npm operando sob o nome de usuário "mikilanjillo". Os pacotes sinalizados incluem react-performance-suite, react-state-optimizer-core, react-fast-utilsa, ai-fast-auto-trader, pkgnewfefame1, carbon-mac-copy-cloner e coinbase-desktop-sdk. Pesquisadores notaram que o uso de logs de instalação falsos para mascarar comportamento malicioso foi uma técnica nova, representando uma mudança clara na forma como os atores de ameaças trabalham para permanecer indetectáveis dentro de ecossistemas de código aberto.
O escopo desta campanha se estende além dos sete pacotes inicialmente identificados. Em março de 2026, a JFrog documentou um cluster relacionado chamado GhostClaw, que compartilha técnicas e similaridades de infraestrutura com o que a ReversingLabs encontrou. A análise do Jamf Threat Labs mostrou ainda que a campanha se espalha por repositórios do GitHub que se passam por ferramentas de desenvolvedores legítimas, como bots de negociação e SDKs.
Mecanismo de infecção: logs falsos e phishing sudo
O elemento mais enganoso desta campanha é como os pacotes enganam os desenvolvedores para entregarem sua senha sudo. Durante a instalação falsa, o pacote gera uma mensagem de erro afirmando que não pode instalar certas dependências devido à falta de permissões de gravação em /usr/local/lib/node_modules, o diretório de pacotes global padrão no Linux e macOS. O desenvolvedor é então solicitado a inserir sua senha de root para resolver o problema e permitir que a instalação termine.
Isso funciona porque erros de permissão durante instalações do npm são comuns, e a solicitação de uma senha parece totalmente esperada nesse contexto. Assim que a senha é inserida e confirmada, o downloader do malware é executado silenciosamente enquanto a saída de log falsa continua rolando para mascarar a atividade. O downloader entra em contato com um canal do Telegram para puxar a URL do payload final e sua chave de decodificação.
Infraestrutura de comando e controle via Telegram
As URLs de payload e as chaves de decodificação são buscadas de um canal do Telegram ou, no caso do pacote coinbase-desktop-sdk, de uma postagem web3 no teletype.in feita para parecer documentação blockchain. Uma vez que o payload do RAT é executado, ele opera silenciosamente em segundo plano, dando aos atacantes acesso persistente e amplamente invisível ao sistema comprometido. O payload final é projetado para roubar carteiras de criptomoedas, coletar dados sensíveis e receber comandos remotos de um servidor controlado pelo atacante.
Pacotes maliciosos identificados e IoCs
A tabela abaixo detalha os pacotes maliciosos identificados, suas versões e hashes SHA1, servindo como indicadores de comprometimento (IoCs) para equipes de segurança:
| Nome do Pacote | Versão | SHA1 |
|---|---|---|
| react-performance-suite | 2.0.0 | bdffc2f98ff422db9f9ddc190401cfcb686e3c32 |
| react-performance-suite | 2.0.1 | 5928e3121f12f3c5d690bc7968b28b2f67835ef5 |
| react-state-optimizer-core | 1.0.0 | cbe7c87293de7ab5853e2aef3f638d54c45f5c9f |
| react-state-optimizer-core | 3.0.3 | fe6ee1104c402be39819822ed959039ea313e67 |
| react-fast-utilsa | 2.0.1 | e6cfaef4b50d2a4ddd8453bf5a91e81a092d6e09 |
| ai-fast-auto-trader | 2.2.1 | 963b79f59fb2c070a06b9a2af9db2b5512c1ed74 |
| ai-fast-auto-trader | 2.2.6 | d22eb34facf13b5c1e820d9e6358eb4cd3797eaa |
| pkgnewfefame1 | 3.2.1 | 2a8c625660ad6bb77c953a147c84c0fcc75794b |
| carbon-mac-copy-cloner | 1.1.0 | 63783f6e5d20e2c664123b349f22dd53d1293d4 |
| coinbase-desktop-sdk | 1.5.14 | cb9208d756dc4d4674801611d8d5f5ba79e76366 |
| coinbase-desktop-sdk | 1.5.19 | d5ade32ac52140e6c25f50780dc4ff4d466faddb |
Impacto em desenvolvedores e empresas
Esta campanha representa uma ameaça significativa para a cadeia de suprimentos de software, especialmente para organizações que dependem de pacotes npm para seus fluxos de trabalho de desenvolvimento. O uso de mensagens de instalação realistas e a solicitação de credenciais de root exploram a confiança dos desenvolvedores nas ferramentas padrão do ecossistema. Empresas que não possuem processos rigorosos de revisão de dependências podem ter seus ambientes de desenvolvimento comprometidos, levando a vazamentos de dados, roubo de credenciais e acesso persistente por atacantes.
Recomendações para CISOs e equipes de DevSecOps
Desenvolvedores nunca devem inserir suas senhas sudo ou root quando solicitados por um pacote npm durante a instalação, pois nenhum pacote legítimo requer acesso ao nível do sistema nessa etapa. Autores de pacotes e histórico de repositórios devem ser verificados antes da instalação, e ferramentas de varredura de segurança automatizadas devem ser usadas para detectar scripts suspeitos. As organizações devem impor fluxos de trabalho rigorosos de revisão de dependências e tratar qualquer solicitação de senha durante instalações de software como um sinal de alerta maior.
Perguntas frequentes
Como saber se um pacote npm é malicioso?
Verifique o histórico do repositório, o número de downloads e as avaliações. Desconfie de pacotes que solicitam senhas sudo durante a instalação.
O que fazer se um sistema já foi comprometido?
Isolar o sistema imediatamente, revogar credenciais comprometidas, verificar logs de instalação e varredura de malware.
Existem ferramentas para detectar essa campanha?
Ferramentas de análise de dependências e scanners de segurança de código aberto podem identificar pacotes suspeitos baseados em hashes conhecidos.