GCP - Cloud Functions Enum

Support HackTricks

Cloud Functions

Google Cloud Functions sind dafür konzipiert, deinen Code zu hosten, der als Reaktion auf Ereignisse ausgeführt wird, ohne dass die Verwaltung eines Host-Betriebssystems erforderlich ist. Darüber hinaus unterstützen diese Funktionen die Speicherung von Umgebungsvariablen, die der Code nutzen kann.

Speicherung

Der Cloud Functions Code wird in GCP Storage gespeichert. Daher kann jeder mit Lesezugriff auf Buckets in GCP den Cloud Functions Code lesen. Der Code wird in einem Bucket wie einem der folgenden gespeichert:

  • gcf-sources-<number>-<region>/<function-name>-<uuid>/version-<n>/function-source.zip

  • gcf-v2-sources-<number>-<region>/<function-name>function-source.zip

Zum Beispiel: gcf-sources-645468741258-us-central1/function-1-003dcbdf-32e1-430f-a5ff-785a6e238c76/version-4/function-source.zip

Jeder Benutzer mit Leseprivilegien über den Bucket, der die Cloud Function speichert, könnte den ausgeführten Code lesen.

Artifact Registry

Wenn die Cloud-Funktion so konfiguriert ist, dass der ausgeführte Docker-Container in einem Artifact Registry-Repo innerhalb des Projekts gespeichert wird, kann jeder mit Lesezugriff auf das Repo das Image herunterladen und den Quellcode überprüfen. Für weitere Informationen siehe:

GCP - Artifact Registry Enum

SA

Wenn nicht angegeben, wird standardmäßig das App Engine Standarddienstkonto mit Editor-Berechtigungen über das Projekt an die Cloud Function angehängt.

Trigger, URL & Authentifizierung

Wenn eine Cloud Function erstellt wird, muss der Trigger angegeben werden. Ein häufiger ist HTTPS, dies wird eine URL erstellen, über die die Funktion über das Web aufgerufen werden kann. Andere Trigger sind pub/sub, Storage, Filestore...

Das URL-Format ist https://<region>-<project-gcp-name>.cloudfunctions.net/<func_name>

Wenn der HTTPS-Trigger verwendet wird, wird auch angegeben, ob der Aufrufer IAM-Berechtigungen benötigt, um die Funktion aufzurufen, oder ob jeder sie einfach aufrufen kann:

Innerhalb der Cloud Function

Der Code wird im Ordner /workspace mit denselben Dateinamen wie die Dateien in der Cloud Function heruntergeladen und wird mit dem Benutzer www-data ausgeführt. Die Festplatte ist nicht schreibgeschützt gemountet.

Enumeration

# List functions
gcloud functions list
gcloud functions describe <func_name> # Check triggers to see how is this function invoked
gcloud functions get-iam-policy <func_name>

# Get logs of previous runs. By default, limits to 10 lines
gcloud functions logs read <func_name> --limit [NUMBER]

# Call a function
curl https://<region>-<project>.cloudfunctions.net/<func_name>
gcloud functions call <func_name> --data='{"message": "Hello World!"}'

# If you know the name of projects you could try to BF cloud functions names

# Get events that could be used to trigger a cloud function
gcloud functions event-types list

# Access function with authentication
curl -X POST https://<region>-<project>.cloudfunctions.net/<func_name> \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{}'

Privilegieneskalation

In der folgenden Seite können Sie überprüfen, wie man Cloud-Funktionsberechtigungen missbraucht, um Privilegien zu eskalieren:

GCP - Cloudfunctions Privesc

Unauthentifizierter Zugriff

GCP - Cloud Functions Unauthenticated Enum

Nach der Ausnutzung

GCP - Cloud Functions Post Exploitation

Persistenz

GCP - Cloud Functions Persistence

Referenzen

Unterstützen Sie HackTricks

Last updated