wfx-loot: campanha rouba segredos de CI de 61 mil repositórios no GitHub e mira chaves de IA

A Aikido Security revelou em 12 de novembro uma campanha de roubo de segredos em larga escala no GitHub, batizada de wfx-loot. A partir de 10 de novembro, por volta de 12h45 UTC, um atacante passou a usar credenciais roubadas do GitHub para abrir pull requests de sondagem em 61.764 repositórios e injetar um payload que rouba segredos de integração contínua (CI) e credenciais de nuvem — incluindo chaves de serviços de IA como OpenAI, Anthropic, Gemini, Cursor e Copilot.

Segundo a Aikido, 4.837 contas comprometidas abriram 61.839 pull requests de sondagem, todos com o título "docs: dependency audit notes", a partir de branches chamadas "wfx-docs". Pelo menos 1.806 repositórios executaram o payload — e a empresa estima que o número real seja maior, porque o atacante apaga os registros de execução. Cerca de 92% das sondagens ainda estavam abertas quando o relatório foi publicado, o que sugere que a maioria dos responsáveis ainda não percebeu o problema.

Como funciona o ataque

O ataque tem três etapas. Primeiro, o atacante abre o pull request de sondagem, que confirma o acesso de escrita ao repositório. Em seguida, injeta o payload de três formas: adicionando cerca de 1.500 linhas a um workflow existente, com commits como "ci: refresh build cache"; criando um script e um hook "postinstall" no package.json, que executa em qualquer "npm install"; ou criando um novo workflow em uma branch descartável. Por fim, o atacante reverte as alterações em até um minuto e apaga a execução do workflow e seus logs — um número de execução ausente no histórico costuma ser o único vestígio.

O que o payload rouba — e as chaves de IA no alvo

O payload é um único script de shell com cerca de 1.500 linhas, que coleta segredos do GitHub Actions, tokens OIDC, arquivos de credenciais de AWS, Azure e GCP, chaves SSH e GPG, arquivos .env e .pem, históricos de shell e até a memória dos processos do runner. Entre os alvos estão credenciais de provedores e ferramentas de IA: OpenAI, Anthropic/Claude, Gemini, Hugging Face, Cursor, Copilot, Codex, Continue, Codeium, Aider, Weights & Biases e Ollama.

Depois de coletar, o script tenta ampliar o acesso: troca tokens OIDC por sessões na nuvem, cria chaves de acesso duradouras na AWS e personifica contas de serviço no GCP. Para persistir mesmo após a rotação de credenciais, ele falsifica verificações de status para burlar a proteção de branches, reescreve políticas de confiança de papéis da AWS para abrir o acesso a qualquer conta e injeta credenciais federadas com o prefixo "wfx-ci-" em aplicações do Azure. Nesta campanha, os dados foram enviados apenas por HTTP POST para dois servidores controlados pelo atacante.

Pacotes contaminados e a ligação com o GhostAction

A campanha também atingiu pacotes publicados por gatilhos automáticos: a versão 3.14.3 do pacote Packagist "digitalelvis/neuronai-studio" continha o payload — qualquer máquina que instalou ou abriu essa versão deve ser tratada como comprometida — e duas tags do módulo Go "github.com/onuragtas/docker-env" traziam o payload em um arquivo de workflow. A SafeDep contou 8.093 repositórios públicos com commits maliciosos, um número que mede commits, não execuções, e por isso difere da contagem da Aikido.

Há sobreposição com a onda GhostAction de outubro, que usou workflows de "auditoria de segurança" para roubar segredos de mais de 30 mil repositórios: contas atingidas em outubro tiveram probabilidade significativamente maior de serem atingidas agora, e em mais de 100 repositórios o wfx-loot foi injetado nos próprios arquivos do GhostAction. Mesmo assim, a Aikido avalia que são campanhas distintas, provavelmente de atores diferentes, porque infraestrutura, ferramentas e técnicas diferem.

O que fazer

Quem mantém repositórios deve procurar pull requests com o título "docs: dependency audit notes", branches "wfx-docs" ou commits como "ci: refresh build cache" e "chore: add ci helper" a partir de 10 de novembro, além de lacunas na numeração das execuções de workflows. Se o payload tiver executado, a recomendação da Aikido é assumir que todos os segredos e papéis de nuvem acessíveis aos workflows estão comprometidos: rotacionar credenciais, revisar papéis da AWS e credenciais federadas do Azure e remover as versões contaminadas dos pacotes.

Crédito da imagem: imagem oficial do blog da Aikido Security sobre a campanha wfx-loot. Crédito: Aikido Security.

Fontes: Aikido Security — wfx-loot campaign pushes CI secret stealer to tens of thousands of repositories; GBHackers — GhostAction Attack Hits Tens of Thousands of GitHub Repositories; OSSprey — WFX and GhostAction: Tracing the Links Between Two GitHub Attacks; Corgea — WFX Phantom (wfx-loot) GitHub Actions secret stealer.

Transparência: esta matéria foi produzida com auxílio de inteligência artificial, com cruzamento de publicações públicas no X e fontes da internet. Recomendamos consultar as fontes originais para mais detalhes.

Por Muse