GCPBucketBrute
Un script pour énumérer les buckets Google Storage, déterminer les accès que vous y possédez, et déterminer s'ils peuvent faire l'objet d'une escalade de privilèges.
- Ce script accepte (optionnellement) les identifiants d'un compte utilisateur ou de service GCP ainsi qu'un mot-clé.
- Ensuite, une liste de permutations sera générée à partir de ce mot-clé, qui sera utilisée pour rechercher l'existence de buckets Google Storage portant ces noms.
- Si des identifiants sont fournis, la majorité de l'énumération sera toujours effectuée sans authentification, mais pour tout bucket découvert via l'énumération non authentifiée, il tentera d'énumérer les permissions du bucket en utilisant l'API TestIamPermissions avec les identifiants fournis. Cela permet de trouver les buckets accessibles en étant authentifié, mais pas sans authentification.
- Que des identifiants soient fournis ou non, le script tentera ensuite d'énumérer les permissions du bucket en utilisant l'API TestIamPermissions sans authentification. Cela signifie que si vous ne saisissez pas d'identifiants, seuls les privilèges d'un utilisateur non authentifié vous seront affichés, mais si vous saisissez des identifiants, vous verrez les accès des utilisateurs authentifiés par rapport à ceux des utilisateurs non authentifiés.
- ATTENTION : Si des identifiants sont fournis, votre nom d'utilisateur peut être divulgué dans les journaux d'accès de tous les buckets que vous découvrez.
Résumé TL;DR
- À partir d'un mot-clé, ce script énumère les buckets Google Storage sur la base d'un certain nombre de permutations générées à partir du mot-clé.
- Ensuite, tout bucket découvert sera affiché.
- Ensuite, toutes les permissions qui vous sont accordées (le cas échéant) pour tout bucket découvert seront affichées.
- Ensuite, le script vérifiera ces privilèges pour détecter une escalade de privilèges (storage.buckets.setIamPolicy) et affichera tout élément intéressant (tel que listable publiquement, accessible en écriture publiquement, listable authentifié, escalade de privilèges, etc.).
Prérequis
- Linux/OS X
- Windows fonctionne uniquement pour les scans non authentifiés. Il y a un problème avec la manière dont le script utilise le module subprocess, qui échoue lors de l'utilisation d'un client Google authentifié.
- Python3
- Pip3
Installation
git clone https://github.com/RhinoSecurityLabs/GCPBucketBrute.git
cd GCPBucketBrute/
pip3 install -r requirements.txt ou python3 -m pip install -r requirements.txt
Utilisation
Tout d'abord, déterminez le type d'authentification que vous souhaitez utiliser pour l'énumération : compte utilisateur, compte de service ou sans authentification. Si vous utilisez un compte de service, fournissez le chemin d'accès à la clé privée via l'argument -f/--service-account-credential-file-path. Si vous utilisez un compte utilisateur, ne fournissez pas d'argument d'authentification. Il vous sera alors demandé de saisir le jeton d'accès de votre compte utilisateur pour accéder aux API GCP. Si vous souhaitez effectuer un scan complètement non authentifié, passez l'argument -u/--unauthenticated pour masquer les invites d'authentification.
- Rechercher des buckets en utilisant le mot-clé "test" de manière complètement non authentifiée :
python3 gcpbucketbrute.py -k test -u
- Rechercher des buckets en utilisant le mot-clé "test" tout en s'authentifiant avec un compte de service (clé privée stockée dans ../sa-priv-key.pem), en écrivant les résultats dans out.txt dans le répertoire courant :
python3 gcpbucketbrute.py -k test -f ../sa-priv-key.pem -o ./out.txt
- Rechercher des buckets en utilisant le mot-clé "test", avec un jeton d'accès de compte utilisateur, en exécutant avec 10 sous-processus au lieu de 5 :
python3 gcpbucketbrute.py -k test -s 10
Arguments disponibles
-k/--keyword
- Cet argument est utilisé pour spécifier le mot-clé qui servira à générer des permutations. Ces permutations sont ce qui sera recherché dans Google Storage.
--check
- Cet argument est mutuellement exclusif avec
-k/--keyword et accepte une seule chaîne de caractères. Il vous permet de vérifier vos permissions sur un bucket particulier, plutôt que de générer une liste de permutations basée sur un mot-clé. Il peut être répété pour vérifier plusieurs buckets. Crédit : @BBerastegui
--check-list
- Cet argument est mutuellement exclusif avec
-k/--keyword et --check. Il vous permet de vérifier les permissions d'une liste de buckets contenue dans un fichier. Ils doivent être listés un par ligne dans un fichier texte. Pour lire depuis l'entrée standard, passez - comme nom de fichier.
-s/