Atacantes da GhostAction ampliaram a campanha de roubo de credenciais no GitHub com uma segunda etapa que disfarça JavaScript malicioso como arquivo de fonte e mira estações de trabalho de desenvolvedores por meio de tarefas do Visual Studio Code.
Jenn Gile identificou 94 repositórios comprometidos pertencentes a 66 proprietários, confirmando a carga maliciosa em todos os 79 repositórios disponíveis para análise. Os 15 restantes estavam inacessíveis.
A OpenSourceMalware investigou o caso depois que o pesquisador da Jamf Threat Labs Thijs Xhaflaire descobriu o conjunto de repositórios ao procurar infecções do PolinRider. A atividade dá continuidade a uma operação que antes se concentrava em fluxos de trabalho maliciosos do GitHub Actions, que roubam segredos de repositórios e credenciais expostas no histórico do Git.
Campanha GhostAction esconde malware que rouba credenciais
O ataque coloca um iniciador em .vscode/tasks.json e armazena sua carga útil em public/fonts/fa-solid-400.woff2. Embora se assemelhe a um recurso da Font Awesome, o arquivo contém 38 linhas de código Node.js sem ofuscação. Uma tarefa chamada eslint-check invoca o Node.js contra o script disfarçado.
A tarefa usa runOn: folderOpen para solicitar a execução quando os desenvolvedores abrem o projeto, enquanto as configurações de apresentação suprimem a visibilidade do terminal.
A execução exige um workspace confiável e permissão para tarefas automáticas. Clonar ou abrir simplesmente um repositório afetado não comprova que o malware foi executado.
Uma vez em execução, o roubador coleta nomes de usuário, nomes de host, variáveis de ambiente selecionadas e arquivos de credenciais associados à AWS (Amazon Web Services), ao npm (Gerenciador de Pacotes do Node.js), ao PyPI (Índice de Pacotes Python), ao Git, ao Kubernetes, ao Claude e ao Gemini.
Ele lê integralmente as chaves privadas SSH (Secure Shell) RSA e Ed25519, enquanto limita a leitura de outros oito arquivos de credenciais aos primeiros 3.000 caracteres.
Uma busca recursiva varre o diretório pessoal em busca de padrões de credenciais, incluindo tokens da AWS, da Anthropic, do GitHub, do npm e do PyPI. As informações coletadas são enviadas por meio de um HTTP POST (método de requisição do Protocolo de Transferência de Hipertexto) na porta 8080. Jenn Gile vinculou a infraestrutura ao endereço 193[.]32[.]204[.]199.
Em sistemas que suportam cron (agendador de tarefas do Unix e Linux), a carga útil instala um comando agendado que é executado a cada cinco minutos. Ele obtém um script por meio de um caminho de servidor específico para o nome de host e envia a resposta diretamente para o Bash (interpretador de comandos), possibilitando comandos adicionais adaptados a cada máquina.
A entrada carrega a marcação #ghc2, e a instalação remove entradas correspondentes existentes antes de adicionar outra. Excluir os arquivos maliciosos do repositório, portanto, deixa essa base de acesso intacta.
Jenn Gile não havia obtido a carga útil subsequente entregue pelo servidor, o que deixa sua funcionalidade sem esclarecimento. O Windows não possui o mecanismo de crontab visado, embora a coleta de credenciais ainda possa ser executada.
A maioria das adições de segunda etapa ocorreu em 15 de outubro. Dois proprietários que haviam removido fluxos de trabalho maliciosos anteriores foram reinfectados, o que mostra que a limpeza de arquivos não eliminou o acesso dos atacantes.
Apesar das semelhanças com o iniciador de fonte falsa do PolinRider, Jenn Gile constatou que não há indicadores compartilhados que estabeleçam operadores em comum.
Os responsáveis pela resposta devem revogar o acesso comprometido ao GitHub antes da limpeza, inspecionar todos os repositórios com permissão de escrita, remover tarefas e fluxos de trabalho maliciosos e investigar a persistência nos endpoints.
Credenciais expostas em arquivos, variáveis de ambiente ou no histórico do Git precisam ser rotacionadas a partir de um dispositivo limpo após a contenção.
IOCs (Indicadores de Comprometimento)
Nota: Endereços IP e domínios foram intencionalmente desfigurados (por exemplo, [.]) para evitar resolução ou hiperlink acidentais. Reverta a desfiguração apenas em plataformas controladas de inteligência de ameaças, como a MISP (plataforma de compartilhamento de inteligência de ameaças), o VirusTotal ou seu SIEM (sistema de gerenciamento de informações e eventos de segurança).