A campanha wfx-loot usou contas comprometidas do GitHub para sondar repositórios e, quando havia permissão de escrita, inserir código criado para roubar segredos de ambientes de integração contínua (CI). A Aikido reportou 4.837 contas comprometidas e solicitações de pull request em 61.764 repositórios. Na contagem publicada pela empresa, o código malicioso foi executado e credenciais foram exfiltradas de pelo menos 1.835 repositórios.
4
9
Quando a campanha aconteceu — e por quanto tempo?
A atividade começou por volta das 12h45 UTC de 10 de novembro de 2026. Um relato situa a janela das solicitações de teste até 15h de 11 de novembro, um período de cerca de 26 horas e 15 minutos.
6
7 Esse intervalo se refere às sondagens observadas; não confirma que toda a atividade do código malicioso ou o uso posterior das credenciais roubadas tenha terminado nesse momento.
Os números divulgados representam etapas diferentes da operação:
- 4.837 contas foram reportadas como comprometidas.
- 61.764 repositórios receberam solicitações de pull request usadas para testar o acesso. Isso não significa que o código tenha sido executado em todos eles.
- Pelo menos 1.835 repositórios aparecem na contagem publicada pela Aikido como locais onde o código foi executado e credenciais foram exfiltradas.
9
Alguns relatos publicados na mesma época citaram um número menor: 1.806 repositórios.
6
10 As fontes disponíveis não explicam a diferença, então os números devem ser tratados como contagens divulgadas separadamente, e não somados ou apresentados como equivalentes. Os relatos fornecidos também não confirmam a alegação posterior de cerca de 1.970 casos públicos confirmados entre mais de 66 mil alvos.
Como os invasores testaram o acesso
Os invasores abriram solicitações de pull request com o título docs: dependency audit notes, a partir de branches chamadas wfx-docs. Essas solicitações serviam como sondagens para verificar se a conta comprometida tinha permissão para gravar no repositório.
3
4
9
Quando as permissões permitiam, os invasores inseriam um código para roubar segredos disponíveis no ambiente de CI. A campanha se apoiou em credenciais válidas roubadas, e não em uma vulnerabilidade do GitHub Actions.
4
9 A OX Security descreveu o malware como um único script de shell com cerca de 1.500 linhas.
31
Há relatos de que, em alguns casos, alterações maliciosas e logs de execução foram removidos, dificultando a investigação.
1
6 As evidências disponíveis sustentam o padrão geral de sondagem, execução do código e limpeza posterior, mas não comprovam que todos os métodos de implantação ou mensagens de commit citados tenham sido usados em cada infecção.
O que o código tentava roubar
O objetivo documentado era coletar credenciais acessíveis aos trabalhos de CI, incluindo segredos do GitHub Actions e credenciais de serviços em nuvem. Os relatos também descrevem tentativas de obter tokens de serviços de IA.
3
9 A análise da OX Security lista credenciais de AWS, Azure e Google Cloud entre os alvos.
31 Outros relatos dizem que o malware podia procurar segredos na memória de processos do runner, embora os trechos disponíveis não indiquem com que frequência essa técnica teve sucesso.
17
29
Um resumo consultado também descreve tentativas de ampliar o acesso por meio de alterações em políticas de confiança da AWS e da inclusão de credenciais federadas no Azure.
5 Esses detalhes devem ser entendidos como comportamentos relatados, e não como prova de que todos os repositórios afetados — ou todas as contas de nuvem — foram modificados. As evidências se concentram no roubo de credenciais; não demonstram roubo de código-fonte ou de bancos de dados de clientes.
9
15
O que os sinais relatados indicam — e o que não provam
Um relato apontou que 92% das 10.431 solicitações de teste enviadas por meio de acesso de colaborador ou organização continuavam abertas no momento da verificação.
10
19 Isso sugere que muitas sondagens ainda não tinham sido tratadas, mas não prova que nenhum responsável ou equipe de segurança as tenha detectado. O percentual não deve ser aplicado a todas as solicitações de pull request da campanha.
Um playbook de investigação também registrou 173 solicitações de teste originadas de 19 contas que usaram tokens pelo aplicativo do GitHub da Fly.io. Esse dado, por si só, não demonstra que a infraestrutura da Fly.io tenha sido invadida nem que o código malicioso tenha sido executado em todos os repositórios alcançados por esses tokens.
37
O que as equipes de defesa podem verificar
Se sua organização pode ter sido afetada, diferencie repositório sondado, código inserido, código executado e credenciais exfiltradas na avaliação do incidente. Essas etapas não são intercambiáveis.
- Procure os indicadores da sondagem. Revise solicitações com o título
docs: dependency audit notes e branches chamadas wfx-docs nos repositórios em que suas contas podiam gravar.
9
- Analise registros de CI e de auditoria. Confira execuções de workflows, commits, atividade de branches e logs disponíveis dos serviços em nuvem. Lacunas na numeração das execuções podem servir de pista, pois há relatos de execuções e logs apagados; uma lacuna, isoladamente, não comprova uma invasão.
1
24
- Revogue os acessos suspeitos. Invalide tokens do GitHub que possam ter sido comprometidos e revise acessos de contas, colaboradores e aplicativos do GitHub.
- Troque os segredos expostos de forma abrangente. Se o código foi executado, trate como potencialmente comprometidos os segredos e as funções de nuvem disponíveis para aquele workflow — não apenas as credenciais que aparecem nos logs que restaram.
3
9
- Investigue possíveis alterações de persistência na nuvem. Verifique mudanças inesperadas em políticas de confiança da AWS e em aplicativos ou credenciais federadas do Azure, além de chaves ou outras alterações de acesso não autorizadas.
5
- Preserve as evidências. Guarde os registros de auditoria e logs ainda disponíveis antes de fazer alterações de limpeza e documente qual etapa do ataque é sustentada pelas evidências.