# GCP - Houers & GKE Enum

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

## Houers

In GCP houers kan jy die meeste van die houer-gebaseerde dienste wat GCP bied, vind, hier kan jy sien hoe om die mees algemene eenhede te enumereer:
```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

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

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

## Node Pools

Dit is die poel van masjiene (nodes) wat die kubernetes klusters vorm.
```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

Vir inligting oor wat Kubernetes is, kyk na hierdie bladsy:

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

Eerstens kan jy kyk of daar enige Kubernetes-klusters in jou projek bestaan.
```
gcloud container clusters list
```
As jy 'n kluster het, kan jy `gcloud` outomaties jou `~/.kube/config` lêer konfigureer. Hierdie lêer word gebruik om jou te verifieer wanneer jy [kubectl](https://kubernetes.io/docs/reference/kubectl/overview/) gebruik, die inheemse CLI om met K8s-klusters te kommunikeer. Probeer hierdie opdrag.
```
gcloud container clusters get-credentials [CLUSTER NAME] --region [REGION]
```
Kyk dan na die `~/.kube/config` lêer om die gegenereerde geloofsbriewe te sien. Hierdie lêer sal gebruik word om toegangstokens outomaties te verfris op grond van dieselfde identiteit wat jou aktiewe `gcloud` sessie gebruik. Dit vereis natuurlik die korrekte toestemmings.

Sodra dit opgestel is, kan jy die volgende opdrag probeer om die klusterkonfigurasie te verkry.
```
kubectl cluster-info
```
U kan meer lees oor `gcloud` vir houers [hier](https://cloud.google.com/sdk/gcloud/reference/container/).

Dit is 'n eenvoudige skrip om kubernetes in GCP te enumereer: [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

Aanvanklik het hierdie voorregverhogingstegniek toegelaat om **privesc binne die GKE-kluster** wat 'n aanvaller in staat gestel het om dit **ten volle te kompromitteer**.

Dit is omdat GKE [TLS Bootstrap akrediteer](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/) in die metadata verskaf, wat **toeganklik is vir enigeen deur net 'n pod te kompromitteer**.

Die tegniek wat gebruik is, word in die volgende plasings verduidelik:

- [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/)

En hierdie hulpmiddel is geskep om die proses te outomatiseer: [https://github.com/4ARMED/kubeletmein](https://github.com/4ARMED/kubeletmein)

Egter, die tegniek het die feit misbruik dat **met die metadata akrediteer** dit moontlik was om **'n CSR** (Certificate Signing Request) vir 'n **nuwe node** te **genereer**, wat **outomaties goedgekeur** was.\
In my toets het ek gekontroleer dat **daardie versoeke nie meer outomaties goedgekeur word nie**, so ek is nie seker of hierdie tegniek steeds geldig is nie.

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

In [**hierdie pos**](https://blog.assetnote.io/2022/05/06/cloudflare-pages-pt3/) is daar ontdek dat daar 'n Kubelet API adres is wat vanaf binne 'n pod in GKE toeganklik is wat die besonderhede van die lopende pods gee:
```
curl -v -k http://10.124.200.1:10255/pods
```
Selfs al die API **nie toelaat om hulpbronne te wysig nie**, kan dit moontlik wees om **sensitiewe inligting** in die antwoord te vind. Die eindpunt /pods is gevind met behulp van [**Kiterunner**](https://github.com/assetnote/kiterunner).

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