Foram revelados detalhes do ataque à infraestrutura utilizada no desenvolvimento do framework de aprendizado de máquina PyTorch, que permitiu a extração de chaves de acesso suficientes para alojar dados arbitrários no repositório de lançamentos do projeto no GitHub e na AWS, além de injetar código na ramificação principal do repositório e adicionar um backdoor através de dependências. A substituição dos lançamentos do PyTorch poderia ser utilizada para realizar ataques a grandes empresas, como Google, Meta, Boeing e Lockheed Martin, que utilizam o PyTorch em seus projetos. No âmbito do programa Bug Bounty, a Meta pagou aos pesquisadores $16.250 por informações sobre a vulnerabilidade.
A essência do ataque está na possibilidade de execução de seu código em servidores integração contínua, que realizam a recompilação e a execução de tarefas para testar novas alterações enviadas ao repositório. O problema afeta projetos que utilizam seus próprios runners externos 'Self-Hosted Runner' com o GitHub Actions. Diferente das ações tradicionais do GitHub, os runners Self-Hosted são executados não na infraestrutura do GitHub, mas em seus servidores ou em máquinas virtuais mantidas pelos desenvolvedores.
A execução de tarefas de compilação em seus próprios servidores permite organizar a execução de código que pode escanear a rede interna da empresa, procurar nas FS locais chaves de criptografia e tokens de acesso, e analisar variáveis de ambiente com parâmetros para acesso a armazenamentos externos ou serviços em nuvem. Na ausência de devida isolamento do ambiente de compilação, os dados confidenciais encontrados podem ser enviados para fora pelos atacantes, por exemplo, através de chamadas a APIs externas. Para determinar a utilização de 'Self-Hosted Runner' por projetos, pode ser utilizada a ferramenta Gato, que analisa arquivos de workflow públicos e logs de execução de tarefas CI.
No PyTorch e em muitos outros projetos que utilizam 'Self-Hosted Runner', a execução de tarefas de compilação é permitida apenas para desenvolvedores cujas alterações já foram revisadas e incorporadas à base de código do projeto. A posse do status 'contributor' ao usar as configurações padrão no repositório permite a execução de runners do GitHub Actions ao enviar pull requests e, consequentemente, executar seu código em qualquer ambiente do GitHub Actions Runner vinculado ao repositório ou à organização que administra o projeto.
Contornar o status de «contributor» foi fácil — bastou enviar uma pequena alteração e esperar sua aceitação no código, após o que o desenvolvedor automaticamente adquiria o status de participante ativo, cujos pull requests poderiam ser testados na infraestrutura de CI sem verificação adicional. Para obter o status de desenvolvedor ativo durante o experimento, foram feitas pequenas alterações estéticas relacionadas à correção de erros de digitação na documentação. Para acessar o repositório e o armazenamento de releases do PyTorch durante o ataque, foi realizada a captura de um token do GitHub usado para acessar o repositório a partir dos processos de build, assim como chaves da AWS utilizadas para armazenar os resultados da build.
O problema não é específico do PyTorch e afeta muitos outros grandes projetos que usam as configurações padrão para «Self-Hosted Runner» no GitHub Actions. Por exemplo, menciono a realização de ataques semelhantes para introduzir backdoors em algumas grandes carteiras de criptomoedas e projetos de blockchain com capitalizações de bilhões, fazendo alterações nas releases do Microsoft Deepspeed e TensorFlow, comprometendo um dos aplicativos da CloudFlare, além de executar código em computadores da rede Microsoft. Os detalhes desses incidentes ainda não foram divulgados. Dentro dos programas Bug Bounty, pesquisadores enviaram mais de 20 pedidos de recompensa totalizando algumas centenas de milhares de dólares.
Fonte: opennet.ru
