GCP - Storage Privesc
Storage
Grundinformationen:
GCP - Storage Enumstorage.objects.get
storage.objects.get
Diese Berechtigung erlaubt es Ihnen, Dateien, die in Cloud Storage gespeichert sind, herunterzuladen. Dies kann Ihnen potenziell ermöglichen, Privilegien zu 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önnten interessante Informationen in ihrem Code enthalten.
GCR (Container Registry): Das Bild der Container wird in Buckets gespeichert, was bedeutet, dass Sie, wenn Sie die Buckets lesen können, die Bilder herunterladen und nach Leaks und/oder Quellcode suchen können.
storage.objects.setIamPolicy
storage.objects.setIamPolicy
Sie können sich die Berechtigung geben, eine der vorherigen Szenarien in diesem Abschnitt auszunutzen.
storage.buckets.setIamPolicy
storage.buckets.setIamPolicy
Für ein Beispiel, wie man Berechtigungen mit dieser Berechtigung ändert, überprüfen Sie diese Seite:
GCP - Public Buckets Privilege Escalationstorage.hmacKeys.create
storage.hmacKeys.create
Die "Interoperabilitäts"-Funktion von Cloud Storage, die für Cross-Cloud-Interaktionen wie mit AWS S3 konzipiert ist, umfasst die Erstellung von HMAC-Schlüsseln für Dienstkonten und Benutzer. Ein Angreifer kann dies ausnutzen, indem er einen HMAC-Schlüssel für ein Dienstkonto mit erhöhten Berechtigungen generiert, wodurch er die Privilegien innerhalb von Cloud Storage eskaliert. Während HMAC-Schlüssel, die mit Benutzern verbunden sind, nur über die Webkonsole abgerufen werden können, bleiben sowohl die Zugriffs- als auch die geheimen Schlüssel dauerhaft zugänglich, was potenziellen Backup-Zugriffsspeicher ermöglicht. Im Gegensatz dazu sind HMAC-Schlüssel, die mit Dienstkonten verknüpft sind, über die API zugänglich, aber ihre Zugriffs- und geheimen Schlüssel sind nach der Erstellung nicht abrufbar, was eine zusätzliche Komplexität für den kontinuierlichen Zugriff hinzufügt.
Ein weiteres Exploit-Skript für diese Methode finden Sie hier.
storage.objects.create
, storage.objects.delete
= Speicher Schreibberechtigungen
storage.objects.create
, storage.objects.delete
= Speicher SchreibberechtigungenUm ein neues Objekt in einem Bucket zu erstellen, benötigen Sie storage.objects.create
und, gemäß den Dokumenten, benötigen Sie auch storage.objects.delete
, um ein bestehendes Objekt zu ändern.
Eine sehr häufige Ausnutzung von Buckets, in die Sie in der Cloud schreiben können, ist der Fall, dass der Bucket Webserver-Dateien speichert. Sie könnten in der Lage sein, neuen Code zu speichern, der von der Webanwendung verwendet wird.
Composer
Composer ist Apache Airflow, das innerhalb von GCP verwaltet wird. Es hat mehrere interessante Funktionen:
Es läuft innerhalb eines GKE-Clusters, sodass die SA, die der Cluster verwendet, von dem Code, der innerhalb von Composer läuft, zugänglich ist.
Es speichert den Code in einem Bucket, daher kann jeder mit Schreibzugriff auf diesen Bucket einen DGA-Code (den Code, den Apache Airflow ausführen wird) ändern/hinzufügen. Dann, wenn Sie Schreibzugriff auf den Bucket haben, den Composer verwendet, um den Code zu speichern, können Sie privesc zur SA, die im GKE-Cluster läuft, erhalten.
Cloud Functions
Der Code von Cloud Functions wird in Storage gespeichert, sodass es möglich ist, durch Überschreiben beliebigen Code auszuführen.
App Engine
Der Quellcode von App Engine wird in Buckets 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 Bucket gespeichert sind, vielleicht diese ändern?
GCR
Google Container Registry speichert die Images in Buckets. Wenn Sie diese Buckets beschreiben können, könnten Sie in der Lage sein, seitlich zu dem Ort zu wechseln, an dem diese Buckets ausgeführt werden.
Der von GCR verwendete Bucket hat eine URL, die ähnlich aussieht wie
gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com
(Die obersten Subdomains sind hier angegeben).
Referenzen
Last updated