# 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/) su dizajnirane da hostuju vaš kod, koji **se izvršava kao odgovor na događaje**, bez potrebe za upravljanjem host operativnim sistemom. Pored toga, ove funkcije podržavaju skladištenje promenljivih okruženja, koje kod može koristiti.

### Storage

Kod Cloud Functions **se skladišti u GCP Storage**. Stoga, svako ko ima **pristup za čitanje nad bucket-ima** u GCP će moći da **pročita kod Cloud Functions**.\
Kod se skladišti u bucket-u kao jedan od sledećih:

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

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

> [!WARNING]
> Svaki korisnik sa **privilgijama za čitanje nad bucket-om** koji skladišti Cloud Function može **pročitati izvršeni kod**.

### Artifact Registry

Ako je cloud funkcija konfigurisana tako da se izvršeni Docker kontejner skladišti unutar Artifact Registry repozitorijuma unutar projekta, svako ko ima pristup za čitanje nad repozitorijumom će moći da preuzme sliku i proveri izvorni kod. Za više informacija pogledajte:

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

### SA

Ako nije navedeno, podrazumevano će biti povezan **App Engine Default Service Account** sa **Editor privilegijama** nad projektom na Cloud Function.

### Triggers, URL & Authentication

Kada se kreira Cloud Function, potrebno je odrediti **okidač**. Jedan uobičajen je **HTTPS**, koji će **kreirati URL gde se funkcija** može aktivirati putem web pretraživača.\
Ostali okidači su pub/sub, Storage, Filestore...

Format URL-a je **`https://<region>-<project-gcp-name>.cloudfunctions.net/<func_name>`**

Kada se koristi HTTPS okidač, takođe se naznačuje da li **pozivalac treba da ima IAM autorizaciju** da pozove funkciju ili ako **svako** može jednostavno da je pozove:

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

### Inside the Cloud Function

Kod se **preuzima unutar** foldera **`/workspace`** sa istim nazivima datoteka kao što su datoteke u Cloud Function i izvršava se sa korisnikom `www-data`.\
Disk **nije montiran kao samo za čitanje.**

### Enumeration
```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 '{}'
```
### Eskalacija privilegija

Na sledećoj stranici možete proveriti kako da **zloupotrebite dozvole cloud funkcija za eskalaciju privilegija**:

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

### Neautentifikovani pristup

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

### Post Eksploatacija

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

### Postojanost

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

## Reference

- [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}}
