O malware que aprovou porque não conseguia vê-lo
O GlassWorm esconde o seu payload em Unicode invisível que passa a revisão de código humana e depois lê as credenciais espalhadas pela sua área de trabalho. Um verme invisível não quebra encriptação. Precisa de um ficheiro.
O revisor leu o pull request. Cada linha foi renderizada limpa: uma atualização de versão, um pequeno refactor, um ajuste a um documento. Nada parecia errado, porque a parte que estava errada nunca foi desenhada no ecrã. Estava escrita em caracteres Unicode sem glifo. Invisível aos seus olhos, invisível na vista de diff, invisível para a aprovação humana de que a segurança da cadeia de fornecimento ainda depende.
É isso que é o GlassWorm. Desde outubro, investigadores da Koi Security têm seguido o primeiro verme auto-propagável a espalhar-se por extensões do VS Code, e não parou [1]. A Socket sinalizou mais de setenta novas extensões maliciosas no marketplace Open VSX desde o final de janeiro [2]. O loader esconde-se dentro de Unicode invisível, por isso o código passa pela revisão com aspeto de tarefas de manutenção.
O que faz depois de instalar é a parte banal, e é esse o ponto. Lê o que está por ali espalhado. Tokens npm. Credenciais do GitHub. A configuração do Git. Variáveis de ambiente e segredos de CI expostos na sua área de trabalho. Depois usa essas credenciais roubadas para publicar mais pacotes envenenados em seu nome, que é como um verme se torna um verme. O comando e controlo usa transações Solana, por isso não há servidor para apreender [3].
Eis o enquadramento. Ninguém hackeou o @code. O Open VSX não foi comprometido no sentido clássico. O modelo de extensões fez exatamente aquilo para que foi concebido: instala um auxiliar e ele corre com as suas permissões, dentro do seu projeto aberto, ao lado dos seus segredos. Esse modelo foi construído para um mundo em que o autor da extensão era a única parte em quem tinha de confiar. O GlassWorm transforma a conta de um autor de confiança num camião de entregas e esconde a carga em caracteres que não consegue ver. A ferramenta não falhou. O modelo de ameaça deslocou-se para todos ao mesmo tempo.
O que nos leva a uma questão desconfortável sobre a sua própria máquina. Quando uma extensão em que confiou abre o seu projeto, o que há lá para ela levar?
Para a maioria dos programadores a resposta é: tudo. Um token npm de longa duração num dotfile. Um personal access token que um guia de configuração prestável lhe disse para colar uma vez e esquecer. Segredos num ficheiro env que todos os processos na máquina conseguem ler. Estas credenciais estão em repouso, no exato local onde o código corre, à espera de qualquer coisa com acesso local. Um verme invisível no seu editor não precisa de quebrar encriptação. Precisa de um ficheiro.
O Clavitor parte do pressuposto oposto. Uma credencial é intermediada no momento em que é necessária, limitada àquilo para que serve, e expira. Nunca é escrita no seu ambiente de desenvolvimento para ser descoberta mais tarde. Por isso, quando código hostil varre a área de trabalho à procura de chaves em repouso, não há um token npm permanente, nenhum PAT do GitHub eterno, nada que sobreviva ao segundo em que foi usado. O verme abre a gaveta, e a gaveta está vazia.
O limite honesto: uma credencial em uso ativo continua viva enquanto está a ser usada. Se a sua sessão está ativa e código hostil partilha essa sessão, pode montar-se no que está vivo nesse momento, dentro da janela curta e do âmbito restrito dessa credencial. A emissão efémera e limitada reduz o raio de impacto e o relógio. Não torna segura uma máquina que entregou a um atacante. Nada faz isso. Mas há uma grande distância entre um atacante que apanha uma credencial limitada a meio do seu uso e um atacante que copia um ficheiro de chaves permanentes e possui a sua máquina durante um ano.
Escrevemos a lista curta de coisas que um sistema de credenciais nunca deve fazer. Perto do topo: não deixar segredos parados onde o código corre. Leia-as aqui
Clavitor (@clavitorai) é o cofre de credenciais construído para agentes de IA, e contra eles. clavitor.ai
Fontes
[1] Koi Security — "GlassWorm: The First Self-Propagating Worm Using Invisible Code Hits the Open VSX Marketplace" (empresa de investigação; sem conta X verificada)
[2] Socket, via @TheHackersNews — "GlassWorm Supply-Chain Attack Abuses 72 Open VSX Extensions to Target Developers" (@SocketSecurity)
[3] @SecurityWeek — "Supply Chain Attack Targets VS Code Extensions With ‘GlassWorm’ Malware"