Uma nova e perigosa ameaça à segurança digital foi identificada por especialistas: pacotes maliciosos em Go e npm que não apenas roubam informações, mas também possuem um “kill switch” com capacidade de apagar todos os dados do sistema do desenvolvedor remotamente.
Essas descobertas mostram que ameaças na cadeia de suprimentos de software estão evoluindo de simples roubo de dados para ataques devastadores e silenciosos, atingindo diretamente desenvolvedores e sysadmins que confiam em bibliotecas de terceiros. Este artigo vai detalhar como esses ataques funcionam, os riscos envolvidos e, principalmente, como se proteger desse novo vetor de ataque.
Em tempos em que o ecossistema open source é fundamental para o desenvolvimento moderno, entender os riscos na importação de dependências é essencial para manter ambientes de desenvolvimento e produção seguros.

A dupla ameaça: O que foi descoberto?
O caso dos pacotes Go multiplataforma
Especialistas em segurança identificaram 11 pacotes maliciosos no ecossistema Go, entre eles os repositórios github.com/stripedconsu/linker e github.com/agitatedleopa/stm. Esses pacotes aparentavam ser utilitários legítimos, mas continham código perigoso escondido.
O ataque começa quando o desenvolvedor executa o comando go get
para importar a biblioteca. Nesse momento, o código embutido baixa silenciosamente uma carga maliciosa de segundo estágio a partir de um servidor de comando e controle (C2), executando-a diretamente na memória – o que dificulta a detecção por antivírus ou EDRs.
Esses binários são multiplataforma, afetando desde servidores Linux com execução de arquivos ELF até máquinas Windows, onde usam o utilitário certutil.exe para baixar e executar o malware. Essa versatilidade amplia o potencial de destruição e comprometimento dos ambientes de desenvolvimento.
O “kill switch” nos pacotes npm
No caso do ecossistema npm, dois pacotes se destacam pela periculosidade: naya-flore e nvlore-hsc. Disfarçados de bibliotecas relacionadas ao WhatsApp, eles escondem funcionalidades extremamente perigosas.
Além de roubar dados e tokens de acesso, o código realiza uma verificação de número de telefone contra uma lista remota. Se o número do desenvolvedor não estiver na whitelist, o pacote dispara um comando terminal:
rm -rf *
Esse comando apaga irreversivelmente todos os arquivos do sistema. É o chamado “kill switch”, que pode ser ativado remotamente pelo invasor, permitindo a destruição completa de sistemas com um simples clique.
Além disso, o código malicioso ainda continha token de acesso ao GitHub, sugerindo que os desenvolvedores dos pacotes estavam testando diferentes abordagens para manter o controle do malware em tempo real.
Como os ataques funcionam na prática?
Esses ataques seguem um padrão que explora o comportamento comum de desenvolvedores em busca de soluções rápidas:
- Busca por uma biblioteca para resolver um problema específico.
- Encontra um pacote malicioso com nome confiável e descrição atrativa.
- Instala a dependência usando comandos comuns como
go get
ounpm install
. - Um loader ofuscado é executado, geralmente durante o processo de instalação.
- Esse loader contata o servidor C2, de onde baixa e executa o código malicioso final.
- O sistema é comprometido: dados sensíveis são exfiltrados ou todos os arquivos são apagados remotamente.
A combinação de tática furtiva, execução na memória e comando remoto torna esses pacotes extremamente perigosos, especialmente em ambientes de desenvolvimento onde permissões elevadas são comuns.
O problema maior: A confiança na cadeia de suprimentos de software
Essa descoberta evidencia um problema estrutural no desenvolvimento de software moderno: a confiança cega na cadeia de suprimentos digital.
No ecossistema Go, a situação é agravada pela forma como as dependências são importadas diretamente do GitHub, o que dificulta o controle de versões e a auditoria de código. Qualquer repositório público pode se tornar uma fonte de código malicioso se for manipulado por um invasor ou se tiver intenções duvidosas desde o início.
Já no npm, a facilidade de publicação torna o ecossistema altamente suscetível a ataques, já que qualquer pessoa pode subir uma nova biblioteca com nome parecido a um pacote legítimo (técnica conhecida como typosquatting).
A popularidade do código aberto, embora traga agilidade ao desenvolvimento, aumenta também a superfície de ataque, permitindo que agentes maliciosos se aproveitem da pressa e da falta de verificação dos desenvolvedores.
Conclusão: Como desenvolvedores podem se proteger?
A ameaça representada por pacotes maliciosos em Go e npm é real, ativa e potencialmente devastadora. Mas existem medidas práticas que desenvolvedores e sysadmins podem adotar para se protegerem.
Boas práticas para mitigar riscos:
- Investigue antes de instalar: Sempre verifique o autor do pacote, número de downloads, data da última atualização, issues abertas e histórico de manutenção.
- Use ferramentas de auditoria: Ferramentas como npm audit, Socket.dev, Snyk, ou GoSec ajudam a identificar vulnerabilidades conhecidas em dependências.
- Fixe as versões: Utilize arquivos como
go.mod
epackage-lock.json
para garantir que as dependências não mudem inesperadamente entre builds. - Aplique o princípio do menor privilégio: Execute builds e testes em ambientes com permissões restritas, preferencialmente isolados (containers, VMs).
- Adote uma postura de confiança zero: Trate qualquer pacote de terceiros com desconfiança inicial. Analise o código-fonte, especialmente se o pacote for novo ou pouco conhecido.
- Monitore continuamente suas dependências: Configure alertas automáticos para mudanças em pacotes usados por seus projetos.
A segurança na cadeia de suprimentos de software depende de atenção constante, ferramentas certas e uma cultura de validação técnica rigorosa. Quanto mais cedo a comunidade adotar essas práticas, menor será o impacto de campanhas como essa.