GCP - Storage Privesc
Storage
Informations de base :
GCP - Storage Enumstorage.objects.get
storage.objects.get
Cette permission vous permet de télécharger des fichiers stockés dans Cloud Storage. Cela vous permettra potentiellement d'escalader les privilèges car dans certaines occasions des informations sensibles y sont enregistrées. De plus, certains services GCP stockent leurs informations dans des buckets :
GCP Composer : Lorsque vous créez un environnement Composer, le code de tous les DAGs sera enregistré dans un bucket. Ces tâches peuvent contenir des informations intéressantes dans leur code.
GCR (Container Registry) : L'image des conteneurs est stockée dans des buckets, ce qui signifie que si vous pouvez lire les buckets, vous pourrez télécharger les images et rechercher des fuites et/ou du code source.
storage.objects.setIamPolicy
storage.objects.setIamPolicy
Vous pouvez vous donner la permission de profiter de l'un des scénarios précédents de cette section.
storage.buckets.setIamPolicy
storage.buckets.setIamPolicy
Pour un exemple sur la façon de modifier les permissions avec cette permission, consultez cette page :
GCP - Public Buckets Privilege Escalationstorage.hmacKeys.create
storage.hmacKeys.create
La fonctionnalité "interopérabilité" de Cloud Storage, conçue pour des interactions inter-cloud comme avec AWS S3, implique la création de clés HMAC pour les comptes de service et les utilisateurs. Un attaquant peut exploiter cela en générant une clé HMAC pour un compte de service avec des privilèges élevés, permettant ainsi d'escalader les privilèges au sein de Cloud Storage. Bien que les clés HMAC associées aux utilisateurs ne soient récupérables que via la console web, les clés d'accès et secrètes restent perpétuellement accessibles, permettant un accès de sauvegarde potentiel. En revanche, les clés HMAC liées aux comptes de service sont accessibles via l'API, mais leurs clés d'accès et secrètes ne sont pas récupérables après leur création, ajoutant une couche de complexité pour un accès continu.
Un autre script d'exploitation pour cette méthode peut être trouvé ici.
storage.objects.create
, storage.objects.delete
= Permissions d'écriture dans le stockage
storage.objects.create
, storage.objects.delete
= Permissions d'écriture dans le stockagePour créer un nouvel objet à l'intérieur d'un bucket, vous avez besoin de storage.objects.create
et, selon la documentation, vous avez également besoin de storage.objects.delete
pour modifier un objet existant.
Une exploitation très courante des buckets où vous pouvez écrire dans le cloud est le cas où le bucket sauvegarde des fichiers de serveur web, vous pourriez être en mesure de stocker un nouveau code qui sera utilisé par l'application web.
Composer
Composer est Apache Airflow géré à l'intérieur de GCP. Il a plusieurs fonctionnalités intéressantes :
Il fonctionne à l'intérieur d'un cluster GKE, donc le SA utilisé par le cluster est accessible par le code s'exécutant à l'intérieur de Composer
Il stocke le code dans un bucket, donc quiconque a un accès en écriture sur ce bucket pourra changer/ajouter un code DGA (le code qu'Apache Airflow exécutera) Ensuite, si vous avez un accès en écriture sur le bucket que Composer utilise pour stocker le code, vous pouvez privesc au SA s'exécutant dans le cluster GKE.
Cloud Functions
Le code des Cloud Functions est stocké dans Storage, donc en le remplaçant, il est possible d'exécuter du code arbitraire.
App Engine
Le code source d'App Engine est stocké dans des buckets, en remplaçant le code, il pourrait être possible d'exécuter du code arbitraire. CE N'EST PAS POSSIBLE
Il semble que les couches de conteneurs soient stockées dans le bucket, peut-être en changeant cela ?
GCR
Google Container Registry stocke les images à l'intérieur des buckets, si vous pouvez écrire dans ces buckets, vous pourriez être en mesure de vous déplacer latéralement vers l'endroit où ces buckets sont exécutés.
Le bucket utilisé par GCR aura une URL similaire à
gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com
(Les sous-domaines de niveau supérieur sont spécifiés ici).
Références
Last updated