- Dois pacotes npm, colortoolsv2 e mimelib2, consultaram contratos inteligentes Ethereum para buscar URLs C2 para malware de segundo estágio.
- Os invasores executaram uma campanha encenada usando repositórios falsos de bots de negociação do GitHub para atrair desenvolvedores.
- A técnica se mistura com tráfego legítimo de blockchain, complicando a detecção e a remoção.
- O ReversingLabs compartilhou IoCs, incluindo hashes de pacotes e um endereço de contrato usado para servir URLs.

Pesquisadores detalharam um esquema de cadeia de suprimentos no registro npm no qual duas bibliotecas JavaScript foram consultadas Contratos inteligentes Ethereum para descobrir locais de download para malware subsequente. A tática, observada em julho de 2025 e agora removida do npm, mostra como blockchains públicos podem ser mal utilizados como uma camada de indireção para manter infraestrutura de comando e controle (C2) fora de vista.
Em vez de incorporar URLs fixas, o código malicioso as extraiu em tempo de execução de um contrato no Ethereum, fazendo com que a atividade parecesse consultas comuns na cadeia. Essa mudança para o uso de um “livro de endereços” descentralizado para entrega de carga útil ilustra como os agentes de ameaças estão se adaptando para escapar da varredura convencional e das listas de bloqueio simplistas.
O que foi carregado no npm
De acordo com o ReversingLabs, os pacotes nomeados ferramentas de cores v2 e mimelib2 foram publicados em julho de 2025 e posteriormente retirados. Cada um atuou como um pequeno carregador: uma vez que o pacote foi instalado ou importado, ele executou um código que alcançou um contrato Ethereum, leu um valor e então buscou um componente de próximo estágio do URL retornado.
Embora as bibliotecas npm não ofuscassem profundamente o comportamento do carregador, a credibilidade foi fabricada em outro lugar: os projetos GitHub vinculados adotaram padrões de nomenclatura e atividade familiares para parecerem legítimos, tornando mais fácil para os desenvolvedores aceitar a dependência num ápice.
Como funcionou a transição dos contratos inteligentes
Os locais de carga útil não foram codificados. Em vez disso, o carregador consultou um contrato em 0x1f171a1b07c108eae05a5bccbe86922d66227e2b, usando funções de leitura que retornavam uma string interpretada como uma URL para o segundo estágio. Ao hospedar o ponteiro na cadeia, os invasores ganharam resiliência: é público, consultável e atualizável sem enviar novos lançamentos do npm ou manter um único servidor sujeito a quedas.
Como as pesquisas em blockchain se assemelham a ferramentas e análises criptográficas inofensivas, essas solicitações podem se misturar aos fluxos de trabalho normais do desenvolvedor. A abordagem ecoa ideias anteriores, como EtherHiding, mas aqui foi conectada diretamente a execução do pacote npm, transformando uma instalação de rotina em um caminho para entrega em etapas.
Um esforço mais amplo do GitHub para semear a adoção
Os pacotes npm foram referenciados em uma rede de repositórios do GitHub posicionados como utilitários de negociação de criptomoedas. Exemplos incluem solana-trading-bot-v2, ethereum-mev-bot-v2, robô de arbitragem e bot de negociação hiperlíquido. A atividade em torno desses repositórios — estrelas, bifurcações, observadores e confirmações frequentes — foi planejada para projetar legitimidade e impulso.
O ReversingLabs vincula essa amplificação a um cluster de distribuição como serviço conhecido como Rede Fantasma Stargazers, onde contas coordenadas inflacionam sinais de popularidade e introduzem dependências maliciosas em projetos. A conta do GitHub associada a um repositório principal foi posteriormente removida, mas os históricos de commits mostraram como importações maliciosas foram incorporadas ao código ao longo do tempo.
Cronograma e rotação de pacotes
O Colortoolsv2 apareceu primeiro e foi bloqueado no npm por volta de 7 de julho de 2025. Logo depois, os atores mudaram para um substituto quase idêntico chamado mimelib2, preservando a mesma consulta de contrato inteligente para a URL do segundo estágio. Essa troca rápida destaca um padrão familiar em incidentes da cadeia de suprimentos: assim que um artefato é sinalizado, um pacote semelhante cumpre rapidamente o seu papel.
Indicadores de comprometimento (IoCs)
O ReversingLabs relatou os seguintes indicadores que correspondem à campanha. As organizações podem usá-los para impulsionar detecção e caça esforços:
- Pacotes e versões do npm:
- colortoolsv2 1.0.0 (SHA1 678c20775ff86b014ae8d9869ce5c41ee06b6215)
- colortoolsv2 1.0.1 (SHA1 1bb7b23f45ed80bce33a6b6e6bc4f99750d5a34b)
- colortoolsv2 1.0.2 (SHA1 db86351f938a55756061e9b1f4469ff2699e9e27)
- mimelib2 1.0.0 (SHA1 bda31e9022f5994385c26bd8a451acf0cd0b36da)
- mimelib2 1.0.1 (SHA1 c5488b605cf3e9e9ef35da407ea848cf0326fdea)
- Arquivo de segundo estágio: SHA1 021d0eef8f457eb2a9f9fb2260dd2e39ff009a21
- Ethereum contract: 0x1f171a1b07c108eae05a5bccbe86922d66227e2b
Por que esse método complica a defesa
Ao terceirizar a decisão de “para onde ir a seguir” para um smart contract, os invasores desacoplaram a lógica do malware de um único endpoint. Se uma URL for bloqueada, o valor do contrato pode ser atualizado e o mesmo pacote npm resolverá um novo local sem alterações. Esse dinamismo prejudica indicadores estáticos e eleva o nível das quedas.
Além disso, muitos ambientes de desenvolvedores já interagem com endpoints web3, portanto, chamadas EVM podem não ser inerentemente suspeitas. A linha entre o tráfego legítimo de blockchain e sinalização maliciosa desfoca, desafiando estratégias de monitoramento de rede e detecção de endpoint.
Etapas práticas para desenvolvedores npm e web3
As equipes devem combinar a análise do código, do mantenedor e da rede antes de implementar uma dependência. Além da contagem de downloads e das estrelas, examine histórico do mantenedor, idade do repositório, qualidade da confirmação, cadência de lançamento e se o pacote inesperadamente alcança contratos na cadeia ou hosts desconhecidos.
- Inspecione os ganchos de instalação e pós-instalação, bem como os pontos de entrada para chamadas de rede ou execução do processo filho.
- Bloqueie ou alerte sobre consultas EVM RPC inesperadas de CI/CD ou pipelines de construção; defina o que suas ferramentas devem acessar e negar o resto.
- Fixe versões, use arquivos de bloqueio e espelhe pacotes verificados em um registro interno para reduzir a exposição a trocas de pacotes.
- Adote atestados de artefatos e verificação de assinaturas (por exemplo, proveniência SLSA) para que a integridade da dependência seja verificado na construção.
- Examine continuamente os gráficos de dependência em busca de IoCs recém-divulgados e anômalos mudanças no mantenedor.
Para repositórios que foram afetados pela campanha, revise os commits recentes para a introdução de colortoolsv2 ou mimelib2, role as chaves e tokens usados durante as compilações comprometidas e considere refazer a imagem dos sistemas que executaram os pacotes impactados para remover qualquer artefatos de segundo estágio.
O episódio destaca como uma plataforma familiar — npm — pode ser utilizada em conjunto com o Ethereum para mascarar o rastro entre uma dependência e seu host de carga útil. Com os dados on-chain servindo como um indicador resiliente, os defensores são pressionados a correlacionar comportamento do pacote, sinais do GitHub e leituras de blockchain para detectar o que verificações estáticas simples não detectam.