Foram divulgadas informações sobre vulnerabilidades nos manipuladores do GitHub Actions, que são automaticamente acionados ao enviar pull requests para o repositório de pacotes Nixpkgs, utilizado na distribuição NixOS e no ecossistema relacionado ao gerenciador de pacotes Nix. A vulnerabilidade permitia que um invasor extraísse um token que concedia acesso de leitura e gravação ao código fonte de todos os pacotes hospedados no Nixpkgs. Esse token permitia realizar alterações diretamente em qualquer pacote por meio do repositório Git do projeto, contornando os processos de verificação e revisão das mudanças.
A possibilidade de comprometer o Nixpkgs e inserir seu próprio código em qualquer pacote foi demonstrada por pesquisadores de segurança em outubro do ano passado na conferência NixCon e foi imediatamente corrigida na infraestrutura do projeto. No entanto, os detalhes sobre o ataque realizado foram revelados apenas um ano depois. O problema estava relacionado ao uso de manipuladores do GitHub Actions no repositório GitHub do Nixpkgs, vinculados ao evento 'pull_request_target' e que realizavam verificações automatizadas ao receber novos pull requests.
Diferentemente do evento 'pull_request', os manipuladores de 'pull_request_target' recebem acesso de leitura e gravação ao ambiente de construção, o que requer especial atenção ao trabalhar com os dados passados no pull request. Em um dos manipuladores associados ao 'pull_request_target', era realizada uma verificação do arquivo 'OWNERS' incluído no pull request, para isso, a utilidade codeowners-validator era coletada e chamada: steps: — uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf with: ref: refs/pull/$/merge path: pr — run: nix-build base/ci -A codeownersValidator — run: result/bin/codeowners-validator env: OWNERS_FILE: pr/ci/OWNERS
O problema estava no fato de que, em caso de erro na formatação do arquivo OWNERS, a utilidade codeowners-validator registrava o conteúdo da linha mal formatada no log padrão, acessível publicamente. O ataque consistiu em incluir no pull request um link simbólico chamado OWNERS, que apontava para o arquivo '.credentials', onde as credenciais são armazenadas no ambiente de construção. Assim, o processamento desse arquivo resultava em erro e na saída no log público da primeira linha, que continha o token de acesso ao repositório.

Além disso, foi encontrada mais uma vulnerabilidade no manipulador que verifica as regras do editorconfig. etapas: — nome: Obter lista de arquivos alterados do PR executar: gh api […] | jq [ … ] > «$HOME/changed_files» — usa: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 com: ref: refs/pull/$/merge — nome: Verificando EditorConfig executar: cat «$HOME/changed_files» | xargs -r editorconfig-checker
Neste caso, o problema estava no uso da ferramenta «xargs» para executar o programa editorconfig-checker com cada arquivo do pull request. Como os nomes dos arquivos não eram verificados quanto à validade, um atacante poderia incluir um arquivo com caracteres especiais no pull request, que seriam processados ao executar a ferramenta editorconfig-checker como argumentos da linha de comando. Por exemplo, ao criar um arquivo «—help», a ferramenta editorconfig-checker exibiria uma dica sobre as opções disponíveis.
Fonte: opennet.ru
