
Sete pacotes publicados no npm simulam instalação legítima, induzem desenvolvedores a informar senha administrativa e carregam um RAT voltado a credenciais, carteiras cripto e segredos de desenvolvimento.
| Componente | Sete pacotes npm maliciosos publicados pelo usuário mikilanjillo, com sobreposição a react-state-optimizer, fluxos GitHub relacionados e o malware GhostLoader. |
| Vetor | Execução durante instalação de pacote ou de script de repositório, com telas falsas de progresso e solicitação enganosa de senha root ou administrativa por suposta falta de permissão em /usr/local/lib/node_modules. |
| Impacto | Coleta de credenciais do sistema e de ferramentas de desenvolvimento, busca por carteiras de criptomoedas, chaves SSH, configurações de provedores de nuvem, tokens e posterior comunicação com servidor externo. |
| Prioridade | Remover dependências suspeitas, auditar execuções de instalação que pediram senha administrativa, rotacionar segredos expostos e investigar endpoints macOS e Linux usados por desenvolvedores. |
| Artefatos | Uso de postinstall.js, scripts/setup.js, scripts/postinstall.js, variável GHOST_PASSWORD_ONLY, Telegram como canal de configuração, página Teletype[.]in disfarçada e contratos BSC para armazenamento ou redirecionamento de dados operacionais. |
| Técnica | A cadeia simula logs e indicadores de instalação, aplica atrasos aleatórios, exibe mensagens benignas e busca configuração externa para obter URL e chave de descriptografia da etapa final. |
| Limite | O vínculo entre a campanha Ghost e o cluster GhostClaw é descrito como sobreposição técnica, sem confirmação de que seja o mesmo operador. |
A campanha Ghost explora a confiança de desenvolvedores no ecossistema npm e em repositórios aparentemente legítimos para executar uma cadeia de infecção durante a instalação. O conjunto inicial envolve sete pacotes publicados por mikilanjillo, desenhados para parecerem bibliotecas Node.js comuns enquanto escondem lógica de coleta de credenciais e carregamento de estágio posterior. O comportamento observado combina engenharia social local, abuso de rotinas de instalação e entrega de um trojan de acesso remoto identificado como GhostLoader, com foco em carteiras de criptomoedas e segredos armazenados em estáções de desenvolvimento.
O ponto central da cadeia é a indução do usuário a informar uma senha privilegiada. Durante a instalação, os pacotes exibem logs falsos, atrasos aleatórios e mensagens que simulam um processo legítimo em andamento. Em determinado momento, a instalação informa uma suposta falha por ausência de permissão de escrita em /usr/local/lib/node_modules, diretório usado por instalações globais do Node.js em Linux e macOS. A partir desse pretexto, o fluxo solicita senha root ou administrativa. Caso a senha seja inserida, o malware usa o acesso para buscar um downloader, recuperar configuração externa e implantar a carga final.
A atividade também se conecta a fluxos observados em repositórios GitHub que se passam por ferramentas de negociação, SDKs e utilitários para desenvolvedores. Alguns repositórios teriam sido mantidos inicialmente com código benigno ou parcialmente funcional para ganhar credibilidade antes da introdução de componentes maliciosos. Em variantes voltadas a fluxos assistidos por IA, arquivos como SKILL.md aparecem como isca para agentes e ambientes de desenvolvimento que aceitam instruções externas. O resultado é uma superfície de risco que não se limita ao registro npm: ela alcança rotinas de automação, estáções macOS e Linux, segredos de nuvem e tokens usados por equipes de engenharia.
A etapa inicial é acionada no processo de instalação ou em scripts auxiliares distribuídos com o pacote ou repositório. O código malicioso não se apresenta imediatamente como downloader: primeiro ele constrói uma experiência visual de instalação, com mensagens de progresso, esperas artificiais e saída compatível com ferramentas de desenvolvimento. Essa camada reduz a chance de suspeita porque transforma a espera e os avisos de permissão em parte esperada do fluxo. Quando a mensagem de erro por permissão aparece, o usuário é orientado a fornecer senha administrativa para continuar, e essa credencial passa a ser usada pela cadeia seguinte.
Depois da coleta da senha, o pacote recupera um downloader que consulta um canal no Telegram para obter a URL da carga final e a chave necessária para descriptografá-la. Em outro fluxo relacionado, a configuração também pode vir de uma página Teletype[.]in disfarçada como documentação de blockchain. Essa separação entre pacote inicial, configuração remota e carga final permite alterar infraestrutura sem modificar todos os artefatos já distribuídos. O malware também usa contratos na Binance Smart Chain em pelo menos uma parte do modelo operacional, tanto para armazenamento de dados de configuração quanto para redirecionamentos afiliados ligados à monetização secundária.
Nos repositórios GitHub associados ao mesmo conjunto de técnicas, a execução começa por um script de instalação descrito no README. O fluxo identifica arquitetura do host e versão do macOS, verifica se Node.js está presente e, se necessário, instala uma versão compatível em diretório controlado pelo usuário para reduzir sinais visíveis. Em seguida, a execução passa para cargas JavaScript por meio de arquivos como scripts/setup.js e scripts/postinstall.js. Esses estágios coletam credenciais do sistema, acionam a entrega do GhostLoader, contatam servidor de comando e controle e tentam remover rastros ao limpar o Terminal.
A variável GHOST_PASSWORD_ONLY altera o comportamento do instalador. Quando configurada para caminho completo, o fluxo mostra uma instalação interativa com prompts e indicadores. Quando configurada para coleta direta, reduz a interface e prioriza a obtenção de credenciais. O uso dessa chave indica que o operador separou modos de execução para diferentes cenários, mantendo uma aparência convincente quando há interação humana e uma trilha mais curta quando a coleta de senha é o objetivo principal.
A superfície primária são estáções de desenvolvedores que instalam pacotes npm ou clonam repositórios com instruções de instalação. Linux e macOS aparecem no fluxo porque a mensagem de permissão usa /usr/local/lib/node_modules como justificativa e porque a cadeia relacionada identifica versão do macOS antes de prosseguir. O risco aumenta quando usuários executam instalações globais, aceitam scripts de pós-instalação sem revisão ou executam instruções de README em ambientes com acesso a segredos corporativos.
Os ativos visados vão além da senha local. O stealer descrito busca credenciais de navegadores, carteiras de criptomoedas, chaves SSH, configurações de provedores de nuvem e tokens de ferramentas de desenvolvimento. Esse conjunto é especialmente sensível em workstations de engenharia porque pode incluir acesso a repositórios, pipelines, contas de nuvem e ambientes de build. Mesmo sem evidência de movimentação lateral confirmada no contexto, a exposição desses segredos cria risco de uso posterior por operadores ou parceiros que recebam os dados por canais Telegram segmentados por identificador de campanha.
- Desenvolvedores que instalaram pacotes npm publicados por
mikilanjillooureact-state-optimizerdevem ser tratados como prioridade de investigação. - Repositórios GitHub que simulam ferramentas de negociação, SDKs, utilitários de desenvolvimento ou habilidades para agentes de IA entram na superfície de revisão.
- Endpoints macOS e Linux com scripts de instalação que pediram senha administrativa durante setup de biblioteca precisam de análise de credenciais e artefatos de pós-instalação.
- Ambientes com tokens de nuvem, chaves SSH, carteiras cripto, credenciais de navegador e tokens de ferramentas de desenvolvimento armazenados localmente têm maior impacto potencial.
A investigação deve começar pela telemetria de gerenciadores de pacotes, histórico de shell e inventário de dependências. O objetivo não é procurar apenas o nome de um pacote, mas reconstruir quando uma instalação executou scripts de pós-instalação, exibiu solicitação de senha ou acionou processos Node.js fora do padrão do projeto. Em estáções de desenvolvimento, eventos de execução de node associados a arquivos postinstall.js, diretórios temporários, caches npm e repositórios recém-clonados ajudam a delimitar a janela de exposição.
Na rede, a atenção deve se concentrar em conexões de processos Node.js para Telegram, páginas Teletype[.]in com aparência de documentação blockchain, servidores externos usados como C2 e acessos relacionados a contratos BSC descritos no fluxo. Como a configuração remota permite alterar URLs e chaves sem redistribuir o pacote, bloqueios estáticos por domínio isolado tendem a ser insuficientes. É mais útil correlacionar processo pai, momento da instalação, acesso a arquivos sensíveis e saídas de rede incomuns iniciadas logo após instalação de dependência.
Em endpoint, sinais relevantes incluem leitura de diretórios de navegadores, enumeração de carteiras cripto, acesso a chaves SSH, leitura de configurações de provedores de nuvem e coleta de tokens de ferramentas de desenvolvimento. A limpeza do Terminal citada no fluxo é outro indicador comportamental, especialmente quando ocorre após execução de scripts de instalação. Em pipelines e repositórios, a revisão deve verificar se instruções de README ou arquivos SKILL.md introduziram comandos operacionais omitidos que acionavam scripts externos ou instalavam dependências fora do lockfile esperado.
- Execução de
postinstall.jsou arquivos JavaScript de setup logo após instalação de pacote npm desconhecido. - Solicitação de senha administrativa apresentada como correção de permissão em
/usr/local/lib/node_modules. - Processos Node.js consultando Telegram,
Teletype[.]indefangado ou infraestrutura externa logo após instalação. - Acesso incomum a carteiras cripto, chaves SSH, credenciais de navegador, configurações de nuvem e tokens de ferramentas de desenvolvimento.
- Alteração ou limpeza de histórico do Terminal após scripts de instalação em macOS.
A resposta deve priorizar contenção de segredos antes de qualquer reinstalação cosmética. Máquinas que executaram os pacotes ou repositórios relacionados devem ser isoladas para preservação de evidências, com coleta de histórico npm, cache de pacotes, árvore de processos, conexões de rede e artefatos JavaScript. Como a cadeia coleta senhas e tokens, a rotação precisa incluir senha local do usuário afetado, chaves SSH, tokens de repositório, credenciais de nuvem, tokens de ferramentas de desenvolvimento e segredos de pipelines que tenham estado acessíveis na estáção.
Em engenharia, é necessário restringir execução automática de scripts de instalação quando possível, revisar dependências adicionadas recentemente e exigir lockfiles verificáveis em projetos sensíveis. Repositórios que pedem execução manual de scripts de instalação, especialmente quando combinam README convincente, estrelas artificiais ou promessa de utilitário de desenvolvimento, devem passar por análise antes de uso. Fluxos assistidos por IA também precisam de controle: arquivos como SKILL.md devem ser tratados como conteúdo não confiável quando vêm de repositórios externos, e agentes não devem receber permissão para executar instruções de instalação sem revisão humana.
A validação final deve confirmar que não restaram pacotes maliciosos no ambiente, que caches não continuam oferecendo o artefato comprometido e que segredos rotacionados não aparecem em logs ou variáveis locais. Para equipes com EDR, vale criar detecções comportamentais para instalação npm que aciona leitura de credenciais, contato com serviços de mensageria, acesso a carteiras cripto ou limpeza de terminal. Em ambientes de nuvem, logs de autenticação devem ser revisados na janela posterior à instalação para identificar uso anômalo de chaves e tokens potencialmente coletados.
- Remover pacotes suspeitos e preservar cache npm, histórico de instalação e artefatos
postinstall.jspara análise. - Rotacionar senha local, chaves SSH, tokens de repositório, credenciais de nuvem e segredos de ferramentas de desenvolvimento acessíveis no host.
- Bloquear ou alertar sobre processos Node.js que consultem Telegram, páginas externas de configuração ou C2 após instalação de dependência.
- Revisar repositórios com README ou
SKILL.mdque instruam execução de scripts externos, principalmente em fluxos assistidos por IA. - Desabilitar scripts de pós-instalação em projetos de maior risco quando a cadeia de dependências não tiver sido validada.
0 Comentários