
GitHub Actions Pipeline-Enumeration und Angriffstool
[!WARNING]
Dieses Repository ist veraltet und archiviert
Gato wurde durch Trajan ersetzt, das Multi-Plattform-CI/CD-Schwachstellenerkennungs- und Angriffsautomatisierungstool von Praetorian. Trajan vereint die GitHub Actions (Gato) und GitLab (Glato) CI/CD-Angriffsfunktionen in einem einzigen, aktiv gewarteten Projekt.
Bitte migrieren Sie zu Trajan: https://github.com/praetorian-inc/trajan
Für dieses Repository werden keine weiteren Updates, Fehlerbehebungen oder Sicherheitspatches bereitgestellt.
Gato, auch bekannt als GitHub Attack Toolkit, ist ein Enumeration- und Angriffstool, das sowohl Blue Teams als auch Sicherheitspraktiker im Offensivbereich dabei unterstützt, Pipeline-Schwachstellen in öffentlichen und privaten Repositories einer GitHub-Organisation zu identifizieren und auszunutzen.
Das Tool bietet Post-Exploitation-Funktionen zur Nutzung eines kompromittierten persönlichen Zugriffstokens sowie Enumeration-Funktionen zur Identifizierung von vergifteten Pipeline-Ausführungs-Schwachstellen und Geheimnissen in Actions-Artefakten in öffentlichen Repositories.
GitHub empfiehlt, dass selbstgehostete Runner nur für private Repositories verwendet werden sollten, dennoch gibt es Tausende von Organisationen, die selbstgehostete Runner einsetzen. Standardkonfigurationen sind oft anfällig, und Gato nutzt eine Mischung aus Workflow-Datei-Analyse und Run-Log-Analyse, um potenziell angreifbare Repositories im großen Maßstab zu identifizieren.
Gato Version 1.7 führt den Actions Artifacts Secrets Scanner ein.
Der Actions Artifacts Secrets Scanner durchsucht GitHub Actions Workflow-Artefakte nach Geheimnissen. Forscher von Praetorian haben den Scanner genutzt, um kritische Schwachstellen in mehreren bekannten Open-Source-Projekten zu identifizieren. Details zu diesen Schwachstellen werden veröffentlicht, sobald die Offenlegungsprozesse abgeschlossen sind. Diese Arbeit wurde ursprünglich durch Forschung von Palo Alto Networks inspiriert.
Der Actions Artifacts Secrets Scanner führt die folgenden Aktionen aus:
NoseyParker muss im $PATH des Systems installiert sein, auf dem der Actions Artifacts Secrets Scanner ausgeführt wird.
Geheimnisse in öffentlichen Workflow-Artefakten können viele Fehlalarme enthalten. Standardmäßig schließt der Actions Artifacts Secrets Scanner Regeln und Ergebnisse aus, die mit häufigen Fehlalarmen verbunden sind. Um alle Ergebnisse der Geheimnisscans einzuschließen, können Sie das Flag --include_all_artifact_secrets verwenden.
Hier ist ein Beispielbefehl, der den Actions Artifacts Secrets Scanner auf einer Liste von GitHub-Organisationen ausführt, die Selbsthost-Runner-Enumeration deaktiviert, alle Artefakt-Geheimnis-Ergebnisse einschließt und in eine JSON-Datei ausgibt.
gato e --enum_wf_artifacts --include_all_artifact_secrets --skip_sh_runner_enum -O testorgs.txt -oJ testorgoutput.json
Standardmäßig legt der Actions Artifacts Secrets Scanner die folgenden Einschränkungen fest, um die Zeit für ein einzelnes Repository zu reduzieren:
Diese Einschränkungen wurden so optimiert, dass der Actions Artifacts Secrets Scanner die Top-200-GitHub-Organisationen innerhalb von 48 Stunden scannen kann. Wenn Sie diese Einschränkungen ändern möchten, können Sie sie in der Funktion scan_wf_artifacts() von gato/enumerate/repository.py aktualisieren.
Gato unterstützt OS X und Linux mit mindestens Python 3.7.
Um das Tool zu installieren, klonen Sie einfach das Repository und verwenden Sie pip install. Wir empfehlen, dies in einer virtuellen Umgebung durchzuführen.
git clone https://github.com/praetorian-inc/gato
cd gato
python3 -m venv venv
source venv/bin/activate
pip install .
Gato erfordert außerdem, dass git in Version 2.27 oder höher installiert und im PATH des Systems vorhanden ist. Um das Fork-PR-Angriffsmodul auszuführen, muss sed ebenfalls installiert und im System-Pfad vorhanden sein.
Wir pflegen einen Entwicklungszweig, der neuere Gato-Funktionen enthält, die noch nicht zum Hauptzweig hinzugefügt wurden. Es besteht eine erhöhte Wahrscheinlichkeit, auf Fehler zu stoßen; dennoch führen wir unsere Integrationstestsuite auf dem dev-Zweig aus, sodass es keine offensichtlichen Fehler geben sollte.
Wenn Sie den dev-Zweig verwenden möchten, checken Sie ihn einfach vor der Ausführung von pip install aus – das war's!
Sollten Sie auf Fehler für Ihren spezifischen Anwendungsfall stoßen, eröffnen Sie bitte ein Issue!
Nach der Installation des Tools kann es durch Ausführen von gato oder praetorian-gato gestartet werden.
Wir empfehlen, die Parameter für das Basistool mit gato -h anzuzeigen und die Parameter für jedes der Module des Tools durch Ausführen der folgenden Befehle anzusehen:
gato search -hgato enum -hgato attack -hDas Tool benötigt ein klassisches GitHub- oder App-Installationstoken, um zu funktionieren. Um eines zu erstellen, melden Sie sich bei GitHub an, gehen Sie zu GitHub Developer Settings und wählen Sie Generate New Token und dann Generate new token (classic).
Setzen Sie nach der Erstellung dieses Tokens die Umgebungsvariable GH_TOKEN in Ihrer Shell, indem Sie export GH_TOKEN=<IHR_ERSTELLTES_TOKEN> ausführen. Alternativ speichern Sie das Token in einem sicheren Passwort-Manager und geben Sie es ein, wenn die Anwendung Sie dazu auffordert.
Wenn Sie ein GitHub App Installation Token erstellen, benötigt die App mindestens Actions:read und Contents:read, um die Enumeration-Module auszuführen.
Informationen zur Fehlerbehebung und weitere Details, wie die Installation im Entwicklermodus oder das Ausführen von Komponententests, finden Sie im Wiki.
Weitere Informationen finden Sie im Wiki sowie OpSec-Überlegungen für die verschiedenen Module des Tools!
Wenn Sie glauben, einen Fehler in der Software gefunden zu haben, eröffnen Sie bitte ein Issue, das die Ausgabe des Tools sowie die Aktionen enthält, die Sie ausführen wollten.
Wenn Sie sich nicht sicher sind, ob das Verhalten ein Fehler ist, nutzen Sie stattdessen den Diskussionsbereich!
Beiträge sind willkommen! Bitte lesen Sie unsere Designmethodik und Codierungsstandards durch, bevor Sie an einer neuen Funktion arbeiten!
Wenn Sie wesentliche Änderungen am Tool vorschlagen, eröffnen Sie bitte ein Issue, um ein Gespräch über die Beweggründe für die Änderungen zu beginnen.
Gato ist unter der Apache License, Version 2.0 lizenziert.
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.