GCP - Storage Privesc
Speicher
Grundlegende Informationen:
pageGCP - Storage Enumstorage.objects.get
storage.objects.get
Diese Berechtigung ermöglicht es Ihnen, Dateien herunterzuladen, die im Cloud-Speicher gespeichert sind. Dies kann potenziell dazu führen, dass Sie Privilegien eskalieren, da in einigen Fällen sensible Informationen dort gespeichert sind. Darüber hinaus speichern einige GCP-Dienste ihre Informationen in Buckets:
GCP Composer: Wenn Sie eine Composer-Umgebung erstellen, wird der Code aller DAGs in einem Bucket gespeichert. Diese Aufgaben können interessante Informationen in ihrem Code enthalten.
GCR (Container Registry): Das Image der Container wird in Buckets gespeichert, was bedeutet, dass Sie, wenn Sie die Buckets lesen können, die Bilder herunterladen und nach Lecks und/oder Quellcode suchen können.
storage.objects.setIamPolicy
storage.objects.setIamPolicy
Mit dieser Berechtigung können Sie sich die Erlaubnis geben, eine der vorherigen Szenarien dieses Abschnitts zu missbrauchen.
storage.buckets.setIamPolicy
storage.buckets.setIamPolicy
Für ein Beispiel, wie Berechtigungen mit dieser Berechtigung geändert werden können, überprüfen Sie diese Seite:
pageGCP - Public Buckets Privilege Escalationstorage.hmacKeys.create
storage.hmacKeys.create
Die Funktion "Interoperabilität" des Cloud-Speichers, die für Cross-Cloud-Interaktionen wie mit AWS S3 konzipiert ist, beinhaltet die Erstellung von HMAC-Schlüsseln für Service-Konten und Benutzer. Ein Angreifer kann dies ausnutzen, indem er einen HMAC-Schlüssel für ein Service-Konto mit erhöhten Berechtigungen generiert und somit Berechtigungen im Cloud-Speicher eskaliert. Während benutzerbezogene HMAC-Schlüssel nur über die Weboberfläche abrufbar sind, bleiben sowohl der Zugriffs- als auch der geheime Schlüssel dauerhaft zugänglich, was potenziellen Backup-Zugriff ermöglicht. Im Gegensatz dazu sind Service-Konto-verknüpfte HMAC-Schlüssel über die API abrufbar, aber ihre Zugriffs- und geheimen Schlüssel sind nach der Erstellung nicht abrufbar, was eine zusätzliche Komplexität für den kontinuierlichen Zugriff darstellt.
Ein weiteres Exploit-Skript für diese Methode finden Sie hier.
storage.objects.create
, storage.objects.delete
= Schreibberechtigungen für Speicher
storage.objects.create
, storage.objects.delete
= Schreibberechtigungen für SpeicherUm ein neues Objekt in einem Eimer zu erstellen, benötigen Sie storage.objects.create
und laut der Dokumentation benötigen Sie auch storage.objects.delete
, um ein vorhandenes Objekt zu ändern.
Eine sehr häufige Ausnutzung von Eimern, in denen Sie in der Cloud schreiben können, besteht darin, dass der Eimer Webserverdateien speichert. Möglicherweise können Sie neuen Code speichern, der von der Webanwendung verwendet wird.
Composer
Composer ist Apache Airflow, der in GCP verwaltet wird. Es hat mehrere interessante Funktionen:
Es läuft in einem GKE-Cluster, sodass der SA, den der Cluster verwendet, vom im Composer ausgeführten Code zugänglich ist.
Es speichert den Code in einem Eimer, daher wird jeder mit Schreibzugriff auf diesen Eimer in der Lage sein, einen DGA-Code zu ändern/hinzuzufügen (den Code, den Apache Airflow ausführen wird). Dann, wenn Sie Schreibzugriff auf den Eimer haben, den Composer verwendet, um den Code zu speichern, können Sie zu dem SA eskalieren, der im GKE-Cluster ausgeführt wird.
Cloud Functions
Der Code von Cloud Functions wird im Speicher gespeichert, daher ist es möglich, durch Überschreiben davon beliebigen Code auszuführen.
App Engine
Der Quellcode von App Engine wird in Eimern gespeichert, durch Überschreiben des Codes könnte es möglich sein, beliebigen Code auszuführen. DAS IST NICHT MÖGLICH
Es scheint, dass Container-Schichten im Eimer gespeichert sind, vielleicht diese ändern?
GCR
Google Container Registry speichert die Images in Eimern, wenn Sie diese Eimer beschreiben können, könnten Sie möglicherweise seitlich zu dem Ort wechseln, an dem diese Eimer ausgeführt werden.
Der von GCR verwendete Eimer hat eine URL ähnlich wie
gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com
(Die Top-Level-Subdomains sind hier angegeben).
Referenzen
Last updated