GlassWorm Está nos Seus Repos de Python Agora — O Que É, Como Funciona, O Que Fazer
Isso está ativo e se movendo rápido, então vou direto ao ponto.
GlassWorm começou em outubro de 2025 como um ataque de cadeia de suprimentos visando extensões do VS Code através do marketplace OpenVSX. Provavelmente infectou mais de 35.000 downloads antes de ser contido. Houve duas ondas adicionais — novembro de 2025 e janeiro de 2026 — cada uma visando extensões do VS Code com um alcance combinado de dezenas de milhares de usuários.
O que você precisa entender é para o que o GlassWorm foi projetado: roubar credenciais. Especificamente, tokens do GitHub — colhidos do armazenamento de extensões do VS Code, arquivos de credenciais do git, ~/.git-credentials, e a variável de ambiente GITHUB_TOKEN.
Agora esses tokens roubados estão sendo usados em uma nova campanha chamada ForceMemo. E o alvo são seus repositórios de Python.
Como Funciona o Ataque
A campanha ForceMemo, ativa desde 8 de março de 2026, usa as credenciais roubadas pelo GlassWorm para acessar diretamente as contas do GitHub de desenvolvedores. Uma vez dentro, o atacante faz algo inusitado:
Em vez de abrir um pull request (visível) ou criar um novo commit (visível), ele pega o último commit legítimo em seu branch padrão, o rebasa — adicionando código malicioso ofuscado aos arquivos Python principais — e depois faz um force-push do resultado.
A mensagem do commit permanece a mesma. O nome do autor permanece o mesmo. A data do autor permanece a mesma. Na interface do GitHub, nada parece fora do lugar. Os únicos rastros: a data do committer muda para a data real do ataque, e o email do committer geralmente está configurado para a string "null".
Os arquivos alvo são setup.py, main.py, e app.py. O payload injetado é codificado em Base64 e adicionado ao final desses arquivos.
O que o payload faz? Consulta uma wallet de Solana — a mesma infraestrutura usada em ondas anteriores do GlassWorm desde novembro de 2025 — para obter uma URL de comando e controle. De lá, baixa scripts adicionais projetados para roubar criptomoedas e dados sensíveis.
O gatilho é simples: qualquer pessoa que execute pip install a partir de um repositório comprometido, ou que clone e execute o código, ativa o malware.
Quem Está Afetado
O ataque visa especificamente:
- Aplicações Django
- Código de pesquisa de ML
- Dashboards de Streamlit
- Pacotes do PyPI
Aproximadamente 150+ repositórios do GitHub foram comprometidos entre 3 e 9 de março na onda Unicode do GlassWorm. Centenas mais foram afetadas na onda de force-push do ForceMemo a partir de 8 de março. Ambos os ataques rastreiam a mesma infraestrutura de Solana — o que significa que o mesmo ator está executando múltiplas campanhas simultaneamente.
Um usuário do Reddit descobriu o compromisso ao notar que "null" havia feito commits na maioria de seus repositórios — e rastreou a infecção até uma extensão de Cursor comprometida. Isso importa: se você usa extensões de Cursor ou VS Code de fontes não oficiais, é possível que suas credenciais já tenham sido roubadas sem sua ciência.
Por Que É Difícil de Detectar
Três coisas tornam o ForceMemo particularmente perigoso:
1. Sem rastro de pull request. Como o ataque usa rebase com force-push em vez de novos commits, o feed de atividades do GitHub não mostra nada inusitado. Não há PR para revisar, não há novo commit para notar.
2. Unicode invisível na onda paralela do GlassWorm. A campanha Unicode relacionada oculta seu payload usando caracteres da Área de Uso Privado de Unicode (U+FE00–U+FE0F) — caracteres que são renderizados como espaços de largura zero em todos os editores, terminais e interfaces de revisão de código. A revisão visual não oferece nenhuma proteção.
3. A infecção começa em suas ferramentas. GlassWorm infectou extensões do VS Code e Cursor. É possível que você tenha estado executando isso por meses antes de ForceMemo converter essas credenciais roubadas em comprometimentos de repositórios.
O Que Fazer Agora Mesmo
1. Audite seus tokens do GitHub imediatamente.
Vá para GitHub Settings → Developer Settings → Personal Access Tokens. Revogue qualquer token que você não reconheça ou não tenha usado recentemente. Se você está em uma organização, revise todos os tokens dos membros.
2. Ative regras de proteção de branch que bloqueiem force-pushes.
No GitHub: Settings → Branches → Add rule → Ative “Require pull request reviews before merging” e “Do not allow bypassing the above settings.” Isso previne force-pushes para seu branch padrão mesmo com credenciais válidas.
3. Revise seus repositórios em busca da assinatura do ataque.
Procure por commits onde o email do committer seja "null" ou onde a data do committer não coincida com a data do autor em commits recentes. Esses são os sinais primários de um compromisso do ForceMemo.
4. Escaneie arquivos Python em busca de Base64 inesperado no final.
Revise seu setup.py, main.py, e app.py em busca de blocos Base64 suspeitos no final do arquivo. O código legítimo normalmente não tem esse aspecto.
5. Audite suas extensões do VS Code e Cursor.
Remova qualquer extensão que você não use ativamente. Seja especialmente cauteloso com extensões instaladas do OpenVSX ou fontes de terceiros. Verifique que as extensões que você usa não tiveram atualizações recentes inesperadas.
6. Se você mantém um pacote do PyPI, notifique seus usuários.
Se seu pacote estava na janela afetada (desde 8 de março), assuma compromisso até provar o contrário e publique uma nova release limpa.
A Visão Geral
GlassWorm é agora uma campanha multi-vetor: extensões do VS Code, extensões de Cursor, pacotes de npm, e agora repositórios Python no GitHub — todos compartilhando a mesma infraestrutura de Solana. O ataque está evoluindo de “infectar máquinas de desenvolvedores” para “usar desenvolvedores como vetores para a cadeia de suprimentos.”
O ecossistema de desenvolvimento — repositórios de ML, pacotes open source, ferramentas internas — é um alvo de alto valor. E a camada de ferramentas de IA (extensões de VS Code, extensões de Cursor) acaba sendo um ponto de infecção inicial perfeito, porque os desenvolvedores as instalam rapidamente e confiam nelas implicitamente.
Revise seus repositórios. Audite seus tokens. Ative a proteção contra force-push. A campanha está ativa agora.
Você já revisou seus repositórios? Se encontrou algo, compartilhe nos comentários — você ajuda outros na comunidade a saberem o que procurar. ![]()
