
Strumento di Enumerazione e Attacco per Pipeline GitHub Actions
[!WARNING]
Questo repository è deprecato e archiviato
Gato è stato sostituito da Trajan, lo strumento multi-piattaforma di Praetorian per il rilevamento delle vulnerabilità CI/CD e l'automazione degli attacchi. Trajan consolida le capacità di attacco CI/CD di GitHub Actions (Gato) e GitLab (Glato) in un unico progetto mantenuto attivamente.
Per favore migra a Trajan: https://github.com/praetorian-inc/trajan
Non verranno effettuati ulteriori aggiornamenti, correzioni di bug o patch di sicurezza a questo repository.
Gato, o GitHub Attack Toolkit, è uno strumento di enumerazione e attacco che consente sia ai blue team che ai professionisti della sicurezza offensiva di identificare e sfruttare le vulnerabilità delle pipeline all'interno dei repository pubblici e privati di un'organizzazione GitHub.
Lo strumento dispone di funzionalità post-exploitation per sfruttare un token di accesso personale compromesso, oltre a funzionalità di enumerazione per identificare vulnerabilità di esecuzione della pipeline avvelenata e segreti negli artefatti delle azioni nei repository pubblici.
GitHub raccomanda che i runner self-hosted siano utilizzati solo per repository privati, tuttavia ci sono migliaia di organizzazioni che utilizzano runner self-hosted. Le configurazioni predefinite sono spesso vulnerabili e Gato utilizza una combinazione di analisi dei file di workflow e dei log di esecuzione per identificare repository potenzialmente vulnerabili su larga scala.
La versione 1.7 di Gato introduce lo Scanner di Segreti negli Artefatti delle Azioni.
Lo Scanner di Segreti negli Artefatti delle Azioni enumera gli artefatti dei workflow di GitHub Actions alla ricerca di segreti. I ricercatori di Praetorian hanno utilizzato lo scanner per identificare vulnerabilità critiche in diversi importanti progetti open-source. I dettagli di queste vulnerabilità saranno rilasciati una volta completati i processi di divulgazione. Questo lavoro è stato inizialmente ispirato dalla ricerca di Palo Alto Networks.
Lo Scanner di Segreti negli Artefatti delle Azioni esegue le seguenti operazioni:
NoseyParker deve essere installato nel $PATH del sistema che esegue lo Scanner di Segreti negli Artefatti delle Azioni.
I segreti negli artefatti dei workflow pubblici possono contenere molti falsi positivi. Per impostazione predefinita, lo Scanner di Segreti negli Artefatti delle Azioni esclude regole e risultati associati a falsi positivi comuni. Per includere tutti i risultati della scansione dei segreti, puoi utilizzare il flag --include_all_artifact_secrets.
Ecco un comando di esempio che esegue lo Scanner di Segreti negli Artefatti delle Azioni su un elenco di organizzazioni GitHub, disabilita l'enumerazione dei runner self-hosted, include tutti i risultati dei segreti negli artefatti e produce l'output in un file JSON.
gato e --enum_wf_artifacts --include_all_artifact_secrets --skip_sh_runner_enum -O testorgs.txt -oJ testorgoutput.json
Per impostazione predefinita, lo Scanner di Segreti negli Artefatti delle Azioni impone le seguenti limitazioni per ridurre il tempo speso su un singolo repository:
Questi vincoli sono stati ottimizzati in modo che lo Scanner di Segreti negli Artefatti delle Azioni possa scansionare le prime 200 organizzazioni GitHub entro 48 ore. Se desideri modificare questi vincoli, puoi aggiornarli nella funzione scan_wf_artifacts() di gato/enumerate/repository.py.
Gato supporta OS X e Linux con almeno Python 3.7.
Per installare lo strumento, basta clonare il repository e usare pip install. Raccomandiamo di farlo all'interno di un ambiente virtuale.
git clone https://github.com/praetorian-inc/gato
cd gato
python3 -m venv venv
source venv/bin/activate
pip install .
Gato richiede anche che git versione 2.27 o superiore sia installato e presente nel PATH di sistema. Per eseguire il modulo di attacco fork PR, sed deve essere installato e presente nel PATH di sistema.
Manteniamo un ramo di sviluppo che contiene funzionalità più recenti di Gato non ancora aggiunte al ramo principale. C'è una maggiore probabilità di incontrare bug; tuttavia, eseguiamo comunque la nostra suite di test di integrazione sul ramo dev, quindi non dovrebbero esserci bug palesi.
Se vuoi usare il ramo dev, basta passare ad esso prima di eseguire pip install - tutto qui!
Se incontri bug per il tuo caso d'uso specifico, sentiti libero di aprire un issue!
Dopo aver installato lo strumento, può essere lanciato eseguendo gato o praetorian-gato.
Raccomandiamo di visualizzare i parametri per lo strumento base usando gato -h, e i parametri per ciascun modulo dello strumento eseguendo quanto segue:
gato search -hgato enum -hgato attack -hLo strumento richiede un token di accesso personale classico di GitHub o un token di installazione dell'app per funzionare. Per crearne uno, accedi a GitHub e vai su GitHub Developer Settings e seleziona Generate New Token e poi Generate new token (classic).
Dopo aver creato questo token, imposta la variabile d'ambiente GH_TOKEN nella tua shell eseguendo export GH_TOKEN=<IL_TUO_TOKEN_CREATO>. In alternativa, conserva il token in un gestore di password sicuro e inseriscilo quando l'applicazione te lo richiede.
Se stai creando un token di installazione dell'app GitHub, l'app deve avere almeno i permessi Actions:read e Contents:read per eseguire i moduli di enumerazione.
Per la risoluzione dei problemi e ulteriori dettagli, come l'installazione in modalità sviluppatore o l'esecuzione di test unitari, consulta il wiki.
Consulta il wiki per la documentazione dettagliata, nonché le considerazioni su OpSec per i vari moduli dello strumento!
Se ritieni di aver identificato un bug nel software, apri un issue contenente l'output dello strumento, insieme alle azioni che stavi cercando di eseguire.
Se non sei sicuro che il comportamento sia un bug, usa invece la sezione delle discussioni!
I contributi sono benvenuti! Per favore, rivedi la nostra metodologia di progettazione e gli standard di codifica prima di lavorare su una nuova funzionalità!
Inoltre, se proponi modifiche significative allo strumento, apri un issue per avviare una conversazione sulla motivazione delle modifiche.
Gato è concesso in licenza secondo Apache License, Version 2.0.
Copyright 2023 Praetorian Security, Inc
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.