
Herramienta de enumeración y ataque de pipelines de GitHub Actions
[!WARNING]
Este repositorio está obsoleto y archivado
Gato ha sido sustituido por Trajan, la herramienta multiplataforma de detección de vulnerabilidades y automatización de ataques en CI/CD de Praetorian. Trajan consolida las capacidades de ataque CI/CD de GitHub Actions (Gato) y GitLab (Glato) en un único proyecto mantenido activamente.
Por favor, migre a Trajan: https://github.com/praetorian-inc/trajan
No se realizarán más actualizaciones, correcciones de errores ni parches de seguridad en este repositorio.
Gato, o GitHub Attack Toolkit, es una herramienta de enumeración y ataque que permite tanto a los equipos azules como a los profesionales de seguridad ofensiva identificar y explotar vulnerabilidades en los pipelines dentro de los repositorios públicos y privados de una organización de GitHub.
La herramienta cuenta con funciones de post-explotación para aprovechar un token de acceso personal comprometido, además de funciones de enumeración para identificar vulnerabilidades de ejecución de pipelines envenenados y secretos en artefactos de acciones contra repositorios públicos.
GitHub recomienda que los runners autoalojados solo se utilicen para repositorios privados; sin embargo, hay miles de organizaciones que utilizan runners autoalojados. Las configuraciones predeterminadas son a menudo vulnerables, y Gato utiliza una combinación de análisis de archivos de flujo de trabajo (workflow) y análisis de registros de ejecución para identificar repositorios potencialmente vulnerables a escala.
Gato versión 1.7 introduce el Escáner de Secretos en Artefactos de Acciones (Actions Artifacts Secrets Scanner).
El Escáner de Secretos en Artefactos de Acciones enumera artefactos de flujos de trabajo de GitHub Actions en busca de secretos. Los investigadores de Praetorian han utilizado el escáner para identificar vulnerabilidades críticas en varios proyectos destacados de código abierto. Los detalles de estas vulnerabilidades se publicarán una vez que se completen los procesos de divulgación. Este trabajo se inspiró inicialmente en la investigación de Palo Alto Networks.
El Escáner de Secretos en Artefactos de Acciones realiza las siguientes acciones:
NoseyParker debe estar instalado en el $PATH del sistema que ejecuta el Escáner de Secretos en Artefactos de Acciones.
Los secretos en artefactos públicos de flujos de trabajo pueden contener muchos falsos positivos. De forma predeterminada, el Escáner de Secretos en Artefactos de Acciones excluye reglas y resultados asociados con falsos positivos comunes. Para incluir todos los resultados del escaneo de secretos, puede usar la bandera --include_all_artifact_secrets.
Aquí hay un comando de ejemplo que ejecuta el Escáner de Secretos en Artefactos de Acciones en una lista de organizaciones de GitHub, deshabilita la enumeración de runners autoalojados, incluye todos los resultados de secretos de artefactos y genera un archivo JSON.
gato e --enum_wf_artifacts --include_all_artifact_secrets --skip_sh_runner_enum -O testorgs.txt -oJ testorgoutput.json
De forma predeterminada, el Escáner de Secretos en Artefactos de Acciones impone las siguientes limitaciones para reducir el tiempo dedicado a un solo repositorio:
Estas restricciones se optimizaron para que el Escáner de Secretos en Artefactos de Acciones pueda escanear las 200 organizaciones principales de GitHub en 48 horas. Si desea modificar estas restricciones, puede actualizarlas en la función scan_wf_artifacts() de gato/enumerate/repository.py.
Gato es compatible con OS X y Linux con al menos Python 3.7.
Para instalar la herramienta, simplemente clone el repositorio y use pip install. Recomendamos hacerlo dentro de un entorno virtual.
git clone https://github.com/praetorian-inc/gato
cd gato
python3 -m venv venv
source venv/bin/activate
pip install .
Gato también requiere que git versión 2.27 o superior esté instalado y en el PATH del sistema. Para ejecutar el módulo de ataque de PR de bifurcación, sed también debe estar instalado y presente en el PATH del sistema.
Mantenemos una rama de desarrollo que contiene características más nuevas de Gato que aún no se han agregado a la rama principal. Existe una mayor probabilidad de encontrar errores; sin embargo, aún ejecutamos nuestra suite de pruebas de integración en la rama dev, por lo que no debería haber errores evidentes.
Si desea usar la rama dev, simplemente pase a ella antes de ejecutar pip install, ¡eso es todo!
Si encuentra algún error para su caso de uso específico, no dude en abrir un issue.
Después de instalar la herramienta, se puede iniciar ejecutando gato o praetorian-gato.
Recomendamos ver los parámetros de la herramienta base usando gato -h, y los parámetros de cada uno de los módulos de la herramienta ejecutando lo siguiente:
gato search -hgato enum -hgato attack -hLa herramienta requiere un token de GitHub clásico o de instalación de aplicación para funcionar. Para crear uno, inicie sesión en GitHub y vaya a GitHub Developer Settings y seleccione Generate New Token y luego Generate new token (classic).
Después de crear este token, configure la variable de entorno GH_TOKEN en su shell ejecutando export GH_TOKEN=<SU_TOKEN_CREADO>. Alternativamente, guarde el token en un gestor de contraseñas seguro e introdúzcalo cuando la aplicación se lo solicite.
Si crea un token de instalación de GitHub App, la aplicación debe tener al menos Actions:read y Contents:read para ejecutar los módulos de enumeración.
Para la resolución de problemas y detalles adicionales, como la instalación en modo desarrollador o la ejecución de pruebas unitarias, consulte la wiki.
Consulte la wiki para obtener documentación detallada, así como las consideraciones de OpSec para los distintos módulos de la herramienta.
Si cree que ha identificado un error en el software, abra un issue que contenga la salida de la herramienta, junto con las acciones que estaba intentando realizar.
Si no está seguro de si el comportamiento es un error, utilice la sección de discusiones.
¡Las contribuciones son bienvenidas! Revise nuestra metodología de diseño y estándares de codificación antes de trabajar en una nueva característica.
Además, si propone cambios significativos en la herramienta, abra un issue para iniciar una conversación sobre la motivación de los cambios.
Gato está licenciado bajo la 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.