# GCP - Kontejneri i GKE Enum

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

## Kontejneri

U GCP kontejnerima možete pronaći većinu usluga zasnovanih na kontejnerima koje GCP nudi, ovde možete videti kako da enumerišete najčešće:
```bash
gcloud container images list
gcloud container images list --repository us.gcr.io/<project-name> #Search in other subdomains repositories
gcloud container images describe <name>
gcloud container subnets list-usable
gcloud container clusters list
gcloud container clusters describe <name>
gcloud container clusters get-credentials [NAME]

# Run a container locally
docker run --rm -ti gcr.io/<project-name>/secret:v1 sh

# Login & Download
sudo docker login -u oauth2accesstoken -p $(gcloud auth print-access-token) https://HOSTNAME
## where HOSTNAME is gcr.io, us.gcr.io, eu.gcr.io, or asia.gcr.io.
sudo docker pull HOSTNAME/<project-name>/<image-name>
```
### Privesc

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

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

## Node Pools

Ovo su bazeni mašina (čvorova) koji čine kubernetes klastere.
```bash
# Pool of machines used by the cluster
gcloud container node-pools list --zone <zone> --cluster <cluster>
gcloud container node-pools describe --cluster <cluster> --zone <zone> <node-pool>
```
## Kubernetes

Za informacije o tome šta je Kubernetes, proverite ovu stranicu:

{{#ref}}
../../kubernetes-security/
{{#endref}}

Prvo, možete proveriti da li postoje neki Kubernetes klasteri u vašem projektu.
```
gcloud container clusters list
```
Ako imate klaster, možete da omogućite `gcloud` da automatski konfiguriše vaš `~/.kube/config` fajl. Ovaj fajl se koristi za autentifikaciju kada koristite [kubectl](https://kubernetes.io/docs/reference/kubectl/overview/), nativni CLI za interakciju sa K8s klasterima. Pokušajte ovu komandu.
```
gcloud container clusters get-credentials [CLUSTER NAME] --region [REGION]
```
Zatim, pogledajte `~/.kube/config` datoteku da vidite generisane akreditive. Ova datoteka će se koristiti za automatsko osvežavanje pristupnih tokena na osnovu iste identitete koju vaša aktivna `gcloud` sesija koristi. To naravno zahteva odgovarajuće dozvole.

Kada je ovo postavljeno, možete pokušati sledeću komandu da dobijete konfiguraciju klastera.
```
kubectl cluster-info
```
Možete pročitati više o `gcloud` za kontejnere [ovde](https://cloud.google.com/sdk/gcloud/reference/container/).

Ovo je jednostavan skript za enumeraciju kubernetes-a u GCP: [https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_k8s_enum](https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_k8s_enum)

### TLS Boostrap Privilege Escalation

U početku je ova tehnika eskalacije privilegija omogućila **privesc unutar GKE klastera**, što je efikasno omogućilo napadaču da **potpuno kompromituje**.

To je zato što GKE pruža [TLS Bootstrap kredencijale](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/) u metapodacima, koji su **dostupni svima samo kompromitovanjem poda**.

Tehnika koja se koristi objašnjena je u sledećim postovima:

- [https://www.4armed.com/blog/hacking-kubelet-on-gke/](https://www.4armed.com/blog/hacking-kubelet-on-gke/)
- [https://www.4armed.com/blog/kubeletmein-kubelet-hacking-tool/](https://www.4armed.com/blog/kubeletmein-kubelet-hacking-tool/)
- [https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/](https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/)

I ovaj alat je kreiran da automatizuje proces: [https://github.com/4ARMED/kubeletmein](https://github.com/4ARMED/kubeletmein)

Međutim, tehnika je zloupotrebljavala činjenicu da je **sa metapodacima** bilo moguće **generisati CSR** (Zahtev za potpisivanje sertifikata) za **novi čvor**, koji je bio **automatski odobren**.\
U mom testu sam proverio da **ti zahtevi više nisu automatski odobreni**, tako da nisam siguran da li je ova tehnika još uvek validna.

### Tajne u Kubelet API <a href="#the-kubelet-api-git-secrets-redux" id="the-kubelet-api-git-secrets-redux"></a>

U [**ovom postu**](https://blog.assetnote.io/2022/05/06/cloudflare-pages-pt3/) otkrivena je Kubelet API adresa dostupna iznutra poda u GKE koja daje detalje o pokrenutim podovima:
```
curl -v -k http://10.124.200.1:10255/pods
```
Čak i ako API **ne dozvoljava modifikaciju resursa**, može biti moguće pronaći **osetljive informacije** u odgovoru. Endpoint /pods je pronađen korišćenjem [**Kiterunner**](https://github.com/assetnote/kiterunner).

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