GCP - Storage Enum

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

Stockage

Google Cloud Platform (GCP) Storage est une solution de stockage basĂ©e sur le cloud qui fournit un stockage d’objets hautement durable et disponible pour des donnĂ©es non structurĂ©es. Il offre diffĂ©rentes classes de stockage basĂ©es sur la performance, la disponibilitĂ© et le coĂ»t, y compris Standard, Nearline, Coldline et Archive. GCP Storage fournit Ă©galement des fonctionnalitĂ©s avancĂ©es telles que les politiques de cycle de vie, la gestion des versions et le contrĂŽle d’accĂšs pour gĂ©rer et sĂ©curiser les donnĂ©es efficacement.

Le bucket peut ĂȘtre stockĂ© dans une rĂ©gion, dans 2 rĂ©gions ou multi-rĂ©gion (par dĂ©faut).

Types de stockage

  • Stockage standard : C’est l’option de stockage par dĂ©faut qui offre un accĂšs Ă  haute performance et faible latence aux donnĂ©es frĂ©quemment consultĂ©es. Il convient Ă  un large Ă©ventail de cas d’utilisation, y compris la diffusion de contenu de site Web, le streaming multimĂ©dia et l’hĂ©bergement de pipelines d’analyse de donnĂ©es.
  • Stockage Nearline : Cette classe de stockage offre des coĂ»ts de stockage infĂ©rieurs et des coĂ»ts d’accĂšs lĂ©gĂšrement plus Ă©levĂ©s que le stockage standard. Il est optimisĂ© pour les donnĂ©es rarement consultĂ©es, avec une durĂ©e de stockage minimale de 30 jours. Il est idĂ©al pour les sauvegardes et les archives.
  • Stockage Coldline : Cette classe de stockage est optimisĂ©e pour le stockage Ă  long terme de donnĂ©es rarement consultĂ©es, avec une durĂ©e de stockage minimale de 90 jours. Il offre des coĂ»ts de stockage infĂ©rieurs Ă  ceux du stockage Nearline, mais avec des coĂ»ts d’accĂšs plus Ă©levĂ©s.
  • Stockage Archive : Cette classe de stockage est conçue pour les donnĂ©es froides qui sont consultĂ©es trĂšs rarement, avec une durĂ©e de stockage minimale de 365 jours. Elle offre les coĂ»ts de stockage les plus bas de toutes les options de stockage GCP, mais avec les coĂ»ts d’accĂšs les plus Ă©levĂ©s. Elle convient Ă  la conservation Ă  long terme des donnĂ©es qui doivent ĂȘtre stockĂ©es pour des raisons de conformitĂ© ou rĂ©glementaires.
  • Autoclass : Si vous ne savez pas combien de fois vous allez accĂ©der aux donnĂ©es, vous pouvez sĂ©lectionner Autoclass et GCP changera automatiquement le type de stockage pour vous afin de minimiser les coĂ»ts.

Contrîle d’accùs

Par dĂ©faut, il est recommandĂ© de contrĂŽler l’accĂšs via IAM, mais il est Ă©galement possible d’activer l’utilisation des ACL.
Si vous choisissez d’utiliser uniquement IAM (par dĂ©faut) et que 90 jours passent, vous ne pourrez pas activer les ACL pour le bucket.

Gestion des versions

Il est possible d’activer la gestion des versions, cela sauvera les anciennes versions du fichier Ă  l’intĂ©rieur du bucket. Il est possible de configurer le nombre de versions que vous souhaitez conserver et mĂȘme combien de temps vous souhaitez que les versions non courantes (anciennes versions) vivent. Il est recommandĂ© de 7 jours pour le type Standard.

Les mĂ©tadonnĂ©es d’une version non courante sont conservĂ©es. De plus, les ACL des versions non courantes sont Ă©galement conservĂ©es, donc les anciennes versions peuvent avoir des ACL diffĂ©rentes de la version actuelle.

En savoir plus dans les docs.

Politique de conservation

Indiquez combien de temps vous souhaitez interdire la suppression des objets Ă  l’intĂ©rieur du bucket (trĂšs utile pour la conformitĂ© au moins).
Une seule de la gestion des versions ou de la politique de conservation peut ĂȘtre activĂ©e Ă  la fois.

Chiffrement

Par dĂ©faut, les objets sont chiffrĂ©s Ă  l’aide de clĂ©s gĂ©rĂ©es par Google, mais vous pouvez Ă©galement utiliser une clĂ© de KMS.

AccĂšs public

Il est possible de donner un accÚs aux utilisateurs externes (connectés à GCP ou non) au contenu des buckets.
Par dĂ©faut, lorsqu’un bucket est créé, il aura dĂ©sactivĂ© l’option d’exposition publique du bucket, mais avec suffisamment de permissions, cela peut ĂȘtre changĂ©.

Le format d’une URL pour accĂ©der Ă  un bucket est https://storage.googleapis.com/<bucket-name> ou https://<bucket_name>.storage.googleapis.com (les deux sont valides).

Clés HMAC

Une clĂ© HMAC est un type de credential et peut ĂȘtre associĂ©e Ă  un compte de service ou Ă  un compte utilisateur dans Cloud Storage. Vous utilisez une clĂ© HMAC pour crĂ©er des signatures qui sont ensuite incluses dans les requĂȘtes Ă  Cloud Storage. Les signatures montrent qu’une demande donnĂ©e est autorisĂ©e par l’utilisateur ou le compte de service.

Les clĂ©s HMAC ont deux Ă©lĂ©ments principaux, un ID d’accĂšs et un secret.

  • ID d’accĂšs : Une chaĂźne alphanumĂ©rique liĂ©e Ă  un compte de service ou utilisateur spĂ©cifique. Lorsqu’elle est liĂ©e Ă  un compte de service, la chaĂźne fait 61 caractĂšres de long, et lorsqu’elle est liĂ©e Ă  un compte utilisateur, la chaĂźne fait 24 caractĂšres de long. Voici un exemple d’un ID d’accĂšs :

GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA

  • Secret : Une chaĂźne codĂ©e en Base-64 de 40 caractĂšres qui est liĂ©e Ă  un ID d’accĂšs spĂ©cifique. Un secret est une clĂ© prĂ©partagĂ©e que vous et Cloud Storage connaissez uniquement. Vous utilisez votre secret pour crĂ©er des signatures dans le cadre du processus d’authentification. Voici un exemple d’un secret :

bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ

À la fois l’ID d’accĂšs et le secret identifient de maniĂšre unique une clĂ© HMAC, mais le secret est une information beaucoup plus sensible, car il est utilisĂ© pour crĂ©er des signatures.

ÉnumĂ©ration

# List all storage buckets in project
gsutil ls

# Get each bucket configuration (protections, CLs, times, configs...)
gsutil ls -L

# List contents of a specific bucket
gsutil ls gs://bucket-name/
gsutil ls -r gs://bucket-name/ # Recursive
gsutil ls -a gs://bucket-name/ # Get ALL versions of objects

# Cat the context of a file without copying it locally
gsutil cat 'gs://bucket-name/folder/object'
gsutil cat 'gs://bucket-name/folder/object#<num>' # cat specific version

# Copy an object from the bucket to your local storage for review
gsutil cp gs://bucket-name/folder/object ~/

# List using a raw OAuth token
## Useful because "CLOUDSDK_AUTH_ACCESS_TOKEN" and "gcloud config set auth/access_token_file" doesn't work with gsutil
curl -H "Authorization: Bearer $TOKEN" "https://storage.googleapis.com/storage/v1/b/<storage-name>/o"
# Download file content from bucket
curl -H "Authorization: Bearer $TOKEN" "https://storage.googleapis.com/storage/v1/b/supportstorage-58249/o/flag.txt?alt=media" --output -

# Enumerate HMAC keys
gsutil hmac list

# Get permissions
gcloud storage buckets get-iam-policy gs://bucket-name/
gcloud storage objects get-iam-policy gs://bucket-name/folder/object

Si vous obtenez une erreur de permission refusĂ©e en listant les buckets, vous pouvez toujours avoir accĂšs au contenu. Donc, maintenant que vous connaissez la convention de nommage des buckets, vous pouvez gĂ©nĂ©rer une liste de noms possibles et essayer d’y accĂ©der :

for i in $(cat wordlist.txt); do gsutil ls -r gs://"$i"; done

Avec les permissions storage.objects.list et storage.objects.get, vous devriez ĂȘtre en mesure d’énumĂ©rer tous les dossiers et fichiers du bucket afin de les tĂ©lĂ©charger. Vous pouvez y parvenir avec ce script Python :

import requests
import xml.etree.ElementTree as ET

def list_bucket_objects(bucket_name, prefix='', marker=None):
url = f"https://storage.googleapis.com/{bucket_name}?prefix={prefix}"
if marker:
url += f"&marker={marker}"
response = requests.get(url)
xml_data = response.content
root = ET.fromstring(xml_data)
ns = {'ns': 'http://doc.s3.amazonaws.com/2006-03-01'}
for contents in root.findall('.//ns:Contents', namespaces=ns):
key = contents.find('ns:Key', namespaces=ns).text
print(key)
next_marker = root.find('ns:NextMarker', namespaces=ns)
if next_marker is not None:
next_marker_value = next_marker.text
list_bucket_objects(bucket_name, prefix, next_marker_value)

list_bucket_objects('<storage-name>')

Escalade de privilĂšges

Dans la page suivante, vous pouvez vérifier comment abuser des permissions de stockage pour escalader les privilÚges :

GCP - Storage Privesc

Enumération non authentifiée

GCP - Storage Unauthenticated Enum

Post-exploitation

GCP - Storage Post Exploitation

Persistance

GCP - Storage Persistence

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks