GCPBucketBrute
Un script para enumerar buckets de Google Storage, determinar qué acceso tienes a ellos y determinar si se pueden escalar privilegios.
- Este script acepta (opcionalmente) credenciales de cuenta de usuario/servicio de GCP y una palabra clave.
- Luego, se generará una lista de permutaciones a partir de esa palabra clave que se utilizará para escanear la existencia de buckets de Google Storage con esos nombres.
- Si se proporcionan credenciales, la mayor parte de la enumeración aún se realizará sin autenticación, pero para cualquier bucket descubierto mediante enumeración no autenticada, intentará enumerar los permisos del bucket utilizando la API TestIamPermissions con las credenciales proporcionadas. Esto ayudará a encontrar buckets que son accesibles con autenticación, pero no sin autenticación.
- Independientemente de si se proporcionan credenciales o no, el script intentará enumerar los permisos del bucket utilizando la API TestIamPermissions sin autenticación. Esto significa que si no ingresas credenciales, solo se te mostrarán los privilegios que tiene un usuario no autenticado, pero si ingresas credenciales, verás qué acceso tienen los usuarios autenticados en comparación con los no autenticados.
- ADVERTENCIA: Si se proporcionan credenciales, tu nombre de usuario puede ser revelado en los registros de acceso de cualquier bucket que descubras.
TL;DR Resumen
- Dada una palabra clave, este script enumera los buckets de Google Storage basándose en un número de permutaciones generadas a partir de la palabra clave.
- Luego, se mostrará cualquier bucket descubierto.
- Luego, se mostrarán los permisos que se te hayan otorgado (si los hay) a cualquier bucket descubierto.
- Luego, el script verificará esos privilegios en busca de escalada de privilegios (storage.buckets.setIamPolicy) y mostrará cualquier cosa interesante (como listable públicamente, escribible públicamente, listable con autenticación, escalada de privilegios, etc.).
Requisitos
- Linux/OS X
- Windows solo funciona para escaneos no autenticados. Algo está mal en cómo el script utiliza el módulo subprocess, ya que falla al usar un cliente autenticado de Google.
- Python3
- Pip3
Instalación
git clone https://github.com/RhinoSecurityLabs/GCPBucketBrute.git
cd GCPBucketBrute/
pip3 install -r requirements.txt or python3 -m pip install -r requirements.txt
Uso
Primero, determina el tipo de autenticación que deseas usar para la enumeración entre una cuenta de usuario, una cuenta de servicio o sin autenticación. Si estás usando una cuenta de servicio, proporciona la ruta al archivo de clave privada mediante el argumento -f/--service-account-credential-file-path. Si estás usando una cuenta de usuario, no proporciones un argumento de autenticación. Luego se te pedirá que ingreses el token de acceso de tu cuenta de usuario para acceder a las API de GCP. Si deseas escanear completamente sin autenticación, pasa el argumento -u/--unauthenticated para ocultar las indicaciones de autenticación.
- Escanea buckets usando la palabra clave "test" completamente sin autenticación:
python3 gcpbucketbrute.py -k test -u
- Escanea buckets usando la palabra clave "test" autenticándose con una cuenta de servicio (clave privada almacenada en ../sa-priv-key.pem), enviando los resultados a out.txt en el directorio actual:
python3 gcpbucketbrute.py -k test -f ../sa-priv-key.pem -o ./out.txt
- Escanea buckets usando la palabra clave "test", usando un token de acceso de cuenta de usuario, ejecutándose con 10 subprocesos en lugar de 5:
python3 gcpbucketbrute.py -k test -s 10
Argumentos Disponibles
-k/--keyword
- Este argumento se utiliza para especificar qué palabra clave se usará para generar permutaciones. Esas permutaciones son las que se buscarán en Google Storage.
--check
- Este argumento es mutuamente excluyente con
-k/--keyword y acepta una sola cadena. Te permite verificar tus permisos en un bucket en particular, en lugar de generar una lista de permutaciones basada en una palabra clave. Esto se puede repetir para verificar varios buckets. Crédito: @BBerastegui
--check-list
- Este argumento es mutuamente excluyente con
-k/--keyword y --check. Te permite verificar los permisos de una lista de buckets en un archivo. Deben estar listados uno por línea en un archivo de texto. Para leer desde la entrada estándar, pasa - como nombre de archivo.
-s/--subprocesses