
Ferramenta de Enumeração e Ataque de Pipelines do GitHub Actions
[!WARNING]
Este repositório está obsoleto e arquivado
O Gato foi substituído pelo Trajan, ferramenta multiplataforma da Praetorian para detecção de vulnerabilidades e automação de ataques em CI/CD. O Trajan consolida as capacidades de ataque em CI/CD do GitHub Actions (Gato) e do GitLab (Glato) em um único projeto mantido ativamente.
Por favor, migre para o Trajan: https://github.com/praetorian-inc/trajan
Nenhuma atualização adicional, correção de bugs ou patches de segurança serão feitos neste repositório.
Gato, ou Kit de Ataque ao GitHub, é uma ferramenta de enumeração e ataque que permite tanto a profissionais de blue team quanto de segurança ofensiva identificar e explorar vulnerabilidades de pipeline em repositórios públicos e privados de uma organização no GitHub.
A ferramenta possui recursos de pós-exploração para usar um token de acesso pessoal comprometido, além de recursos de enumeração para identificar vulnerabilidades de execução de pipeline envenenado e segredos em artefatos de actions em repositórios públicos.
O GitHub recomenda que runners auto-hospedados sejam utilizados apenas em repositórios privados; no entanto, existem milhares de organizações que utilizam runners auto-hospedados. As configurações padrão costumam ser vulneráveis, e o Gato usa uma combinação de análise de arquivos de workflow e análise de logs de execução para identificar repositórios potencialmente vulneráveis em escala.
A versão 1.7 do Gato apresenta o Actions Artifacts Secrets Scanner.
O Actions Artifacts Secrets Scanner enumera segredos em artefatos de workflow do GitHub Actions.
Pesquisadores da Praetorian usaram o scanner para identificar vulnerabilidades críticas em diversos projetos proeminentes de código aberto. Os detalhes dessas vulnerabilidades serão divulgados assim que os processos de divulgação forem concluídos. Este trabalho foi inicialmente inspirado por pesquisa da Palo Alto Networks.
O Actions Artifacts Secrets Scanner executa as seguintes ações:
NoseyParker deve estar instalado no $PATH do sistema que executa o Actions Artifacts Secrets Scanner.
Segredos em artefatos de workflow públicos podem conter muitos falsos positivos. Por padrão, o Actions Artifacts Secrets Scanner exclui regras e resultados associados a falsos positivos comuns. Para incluir todos os resultados da varredura de segredos, você pode usar a flag --include_all_artifact_secrets.
Aqui está um exemplo de comando que executa o Actions Artifacts Secrets Scanner em uma lista de organizações do GitHub, desabilita a enumeração de runners auto-hospedados, inclui todos os resultados de segredos de artefatos e exibe a saída em um arquivo JSON.
gato e --enum_wf_artifacts --include_all_artifact_secrets --skip_sh_runner_enum -O testorgs.txt -oJ testorgoutput.json
Por padrão, o Actions Artifacts Secrets Scanner impõe as seguintes limitações para reduzir o tempo gasto em um único repositório:
Essas restrições foram otimizadas para que o Actions Artifacts Secrets Scanner possa escanear as 200 principais organizações do GitHub em 48 horas. Se você quiser modificar essas restrições, pode atualizá-las na função scan_wf_artifacts() do arquivo gato/enumerate/repository.py.
O Gato suporta OS X e Linux com pelo menos Python 3.7.
Para instalar a ferramenta, basta clonar o repositório e usar pip install. Recomendamos fazer isso em um ambiente virtual.
git clone https://github.com/praetorian-inc/gato
cd gato
python3 -m venv venv
source venv/bin/activate
pip install .
O Gato também requer que o git versão 2.27 ou superior esteja instalado e no PATH do sistema. Para executar o módulo de ataque fork PR, o sed também deve estar instalado e presente no PATH do sistema.
Mantemos uma branch de desenvolvimento que contém recursos mais novos do Gato que ainda não foram adicionados à main. Há uma chance maior de você encontrar bugs; no entanto, ainda executamos nosso conjunto de testes de integração na branch dev, portanto não deve haver bugs evidentes.
Se quiser usar a branch dev, basta fazer checkout dela antes de executar o pip install - é só isso!
Se você encontrar algum bug para seu caso de uso específico, fique à vontade para abrir uma issue!
Após instalar a ferramenta, ela pode ser iniciada executando gato ou praetorian-gato.
Recomendamos visualizar os parâmetros da ferramenta base usando gato -h, e os parâmetros de cada um dos módulos executando os seguintes comandos:
gato search -hgato enum -hgato attack -hA ferramenta requer um token clássico do GitHub ou de instalação de aplicativo para funcionar. Para criar um, faça login no GitHub e vá para GitHub Developer Settings e selecione Generate New Token e depois Generate new token (classic).
Após criar este token, defina a variável de ambiente GH_TOKEN no seu shell executando export GH_TOKEN=<YOUR_CREATED_TOKEN>. Alternativamente, armazene o token em um gerenciador de senhas seguro e insira-o quando o aplicativo solicitar.
Se estiver criando um token de instalação de aplicativo do GitHub, o aplicativo precisa ter pelo menos Actions:read e Contents:read para executar os módulos de enumeração.
Para solução de problemas e detalhes adicionais, como instalação em modo desenvolvedor ou execução de testes unitários, consulte a wiki.
Consulte a wiki para documentação detalhada, bem como as considerações de OpSec para os diversos módulos da ferramenta!
Se você acredita ter identificado um bug no software, por favor abra uma issue contendo a saída da ferramenta, juntamente com as ações que você estava tentando realizar.
Se não tiver certeza se o comportamento é um bug, use a seção de discussões!
Contribuições são bem-vindas! Por favor, revise nossa metodologia de design e padrões de codificação antes de trabalhar em um novo recurso!
Além disso, se você estiver propondo mudanças significativas na ferramenta, por favor abra uma issue para iniciar uma conversa sobre a motivação das mudanças.
O Gato é licenciado sob a Apache License, Version 2.0.
Copyright 2023 Praetorian Security, Inc
Licenciado sob a Apache License, Versão 2.0 (a "Licença");
você não pode usar este arquivo exceto em conformidade com a Licença.
Você pode obter uma cópia da Licença em
http://www.apache.org/licenses/LICENSE-2.0
A menos que exigido por lei aplicável ou acordado por escrito, o software
distribuído sob a Licença é distribuído "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas.
Veja a Licença para as permissões específicas e limitações sob a Licença.