Grupo TeamPCP – 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: Confirme presença no Techday e concorra a iPhone 17; vagas limitadas!
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:
- Verifique o serviço: Execute o comando systemctl –user status pgmon.service para checar se o processo está ativo.
- 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. - 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)
