# GCP - Cloud Functions Enum

{{#include ../../../banners/hacktricks-training.md}}

## Cloud Functions <a href="#reviewing-cloud-functions" id="reviewing-cloud-functions"></a>

[Google Cloud Functions](https://cloud.google.com/functions/) is ontwerp om jou kode te huisves, wat **uitgevoer word in reaksie op gebeurtenisse**, sonder die bestuur van 'n gasheerbedryfstelsel. Boonop ondersteun hierdie funksies die berging van omgewingsveranderlikes, wat die kode kan gebruik.

### Berging

Die Cloud Functions **kode word in GCP Storage gestoor**. Daarom sal enigeen met **lees toegang oor emmers** in GCP in staat wees om die **Cloud Functions kode te lees**.\
Die kode word in 'n emmer gestoor soos een van die volgende:

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

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

> [!WARNING]
> Enige gebruiker met **lees regte oor die emmer** wat die Cloud Function stoor, kan die **uitgevoerde kode lees**.

### Artefak Registrasie

As die wolk funksie geconfigureer is sodat die uitgevoerde Docker houer binne 'n Artefak Registrasie repo binne die projek gestoor word, sal enigeen met lees toegang oor die repo in staat wees om die beeld af te laai en die bronkode te kontroleer. Vir meer inligting, kyk:

{{#ref}}
gcp-artifact-registry-enum.md
{{#endref}}

### SA

As nie gespesifiseer nie, sal die **App Engine Default Service Account** met **Editor regte** oor die projek aan die Cloud Function geheg word.

### Trigger, URL & Verifikasie

Wanneer 'n Cloud Function geskep word, moet die **trigger** gespesifiseer word. Een algemene is **HTTPS**, dit sal **'n URL skep waar die funksie** via webblaai geaktiveer kan word.\
Ander triggers is pub/sub, Storage, Filestore...

Die URL-formaat is **`https://<region>-<project-gcp-name>.cloudfunctions.net/<func_name>`**

Wanneer die HTTPS-trigger gebruik word, word dit ook aangedui of die **oproeper IAM-outeindiging moet hê** om die Funksie aan te roep of of **enigeen** dit net kan aanroep:

<figure><img src="../../../images/image (19).png" alt=""><figcaption></figcaption></figure>

### Binne die Cloud Function

Die kode word **afgelaai binne** die gids **`/workspace`** met dieselfde filenamme as die een wat die lêers in die Cloud Function het en word uitgevoer met die gebruiker `www-data`.\
Die skyf **is nie as lees-slegs gemonteer nie.**

### Enumerasie
```bash
# 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 '{}'
```
### Privilege Escalation

In die volgende bladsy kan jy kyk hoe om **cloud-funksie toestemmings te misbruik om voorregte te verhoog**:

{{#ref}}
../gcp-privilege-escalation/gcp-cloudfunctions-privesc.md
{{#endref}}

### Unauthenticated Access

{{#ref}}
../gcp-unauthenticated-enum-and-access/gcp-cloud-functions-unauthenticated-enum.md
{{#endref}}

### Post Exploitation

{{#ref}}
../gcp-post-exploitation/gcp-cloud-functions-post-exploitation.md
{{#endref}}

### Persistence

{{#ref}}
../gcp-persistence/gcp-cloud-functions-persistence.md
{{#endref}}

## References

- [https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/#reviewing-stackdriver-logging](https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/#reviewing-stackdriver-logging)

{{#include ../../../banners/hacktricks-training.md}}
