Ataque em repositório JavaScript usa tecnologia ICP para evitar derrubada por autoridades

Com infraestrutura imune a bloqueios, o malware do grupo TeamPCP comprometeu dezenas de pacotes npm e utiliza tokens de desenvolvedores para se espalhar automaticamente

JavaScript – Pesquisadores de segurança acenderam o sinal de alerta após detectarem uma onda massiva de pacotes maliciosos no npm, o maior repositório de bibliotecas JavaScript do mundo. Em uma ação coordenada, o grupo criminoso TeamPCP comprometeu 46 pacotes em menos de uma hora, sendo que 28 deles foram infectados em um intervalo de apenas 60 segundos.

O ataque, batizado de CanisterWorm, introduz uma técnica inovadora: a utilização de um “canister” na blockchain ICP (Internet Computer) como servidor de controle. Por ser uma rede descentralizada, a infraestrutura do malware torna-se virtualmente imune a tentativas de derrubada por autoridades ou bloqueios de provedores de internet.

LEIA: China testa ‘bolhas’ gigantes para reduzir impactos de obras urbanas

Escopo do Ataque

A ofensiva focou inicialmente em organizações específicas, comprometendo namespaces (prefixos que agrupam pacotes) inteiros:
• @EmilGroup: 28 pacotes infectados em menos de um minuto.
• @opengov: 16 pacotes comprometidos.
• Pacotes individuais: @teale.io/eslint-config, @airtm/uuid-base32 e @pypestream/floating-ui-dom.

Mecanismo de Infecção e Persistência

O vírus utiliza o postinstall hook, um script legítimo do npm que roda automaticamente após a instalação de um pacote. Enquanto o terminal exibe uma instalação normal, o malware executa em segundo plano o arquivo index.js, que decodifica uma backdoor em Python.

No Linux, o invasor registra um serviço persistente através do systemd. Este serviço é programado para reiniciar a cada 5 segundos em caso de falha e sobrevive até à reinicialização da máquina, sem exigir senha de administrador.

O papel da Blockchain

Diferente de malwares convencionais, o CanisterWorm não se conecta a um servidor fixo. Ele consulta a rede ICP, onde o código roda distribuído em centenas de computadores.

“O canister funciona como um ‘dead-drop’ (técnica de espionagem): ele não entrega o malware diretamente, mas fornece uma URL em texto simples que aponta para o payload real”, explicam os especialistas.

Isso permite que os atacantes alterem o arquivo malicioso a qualquer momento. As máquinas infectadas buscam novas instruções a cada 50 minutos. Além disso, existe um kill switch: se a URL retornada for o “youtube.com”, o vírus entra em modo dormente.

Autopropagação e Riscos Corporativos

A evolução mais perigosa do CanisterWorm é sua capacidade de se espalhar sozinho. O vírus vasculha o computador da vítima em busca de tokens de autenticação do npm em arquivos .npmrc ou variáveis de ambiente (comuns em sistemas de CI/CD como GitHub Actions).

Ao encontrar um token, o malware publica a si mesmo em outros pacotes que o desenvolvedor tenha permissão para editar. Em ambientes corporativos, isso cria um efeito cascata: um único desenvolvedor infectado pode comprometer todos os pacotes internos da empresa, infectando colegas e pipelines automatizados em segundos.

O que fazer se você foi afetado

Desenvolvedores que utilizaram pacotes dos escopos @EmilGroup ou @opengov entre os dias 20 e 21 de março devem seguir estes passos imediatamente:
1. Verifique o serviço: Execute o comando systemctl –user status pgmon.service para checar se o processo está ativo.
2. Localize arquivos maliciosos:
o Malware: ~/.local/share/pgmon/service.py e ~/.config/systemd/user/pgmon.service.
o Temporários: /tmp/pglog e /tmp/.pg_state.
3. Revogue Tokens: Qualquer token npm presente na máquina deve ser considerado exposto e revogado no painel do npmjs.com. É necessário auditar todos os pacotes publicados recentemente por esses tokens.

(Com informações de Tecmundo)
(Foto: Reprodução/Freepik/DC Studio)

Leia mais