GCP - Containers, GKE & Composer Enum

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Kontenery

W kontenerach GCP znajdziesz większość usług opartych na kontenerach, które oferuje GCP. Tutaj możesz zobaczyć, jak wyliczyć najczęściej spotykane:

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 następnej stronie możesz sprawdzić, jak wykorzystać uprawnienia kontenera do eskalacji uprawnień:

Grupy węzłów

To są grupy maszyn (węzłów), które tworzą klastry Kubernetes.

# 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>

Composer

To jest zarządzana wersja Airflow w GCP.

gcloud composer environments list --locations <loc>
gcloud composer environments describe --location <loc> <environment>s

Privesc

Na następnej stronie możesz sprawdzić, jak wykorzystać uprawnienia kompozytora do eskalacji uprawnień:

Kubernetes

Aby uzyskać informacje na temat tego, czym jest Kubernetes, sprawdź tę stronę:

Najpierw możesz sprawdzić, czy istnieją jakiekolwiek klastry Kubernetes w Twoim projekcie.

gcloud container clusters list

Jeśli masz klastra, możesz skonfigurować plik ~/.kube/config automatycznie za pomocą gcloud. Ten plik służy do uwierzytelniania podczas korzystania z kubectl, natywnego interfejsu wiersza poleceń do interakcji z klastrami K8s. Wypróbuj to polecenie.

gcloud container clusters get-credentials [CLUSTER NAME] --region [REGION]

Następnie, sprawdź plik ~/.kube/config, aby zobaczyć wygenerowane poświadczenia. Ten plik będzie używany do automatycznego odświeżania tokenów dostępu na podstawie tego samego tożsamości, którą używa aktywna sesja gcloud. Oczywiście wymaga to odpowiednich uprawnień.

Po skonfigurowaniu tego, możesz spróbować następującej komendy, aby uzyskać konfigurację klastra.

kubectl cluster-info

Możesz przeczytać więcej o gcloud dla kontenerów tutaj.

Oto prosty skrypt do wyliczania klastrów Kubernetes w GCP: https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_k8s_enum

Eskalacja uprawnień TLS Boostrap

Początkowo ta technika eskalacji uprawnień pozwalała na privesc wewnątrz klastra GKE, umożliwiając atakującemu pełne skompromitowanie go.

Dzieje się tak, ponieważ GKE udostępnia poświadczenia TLS Bootstrap w metadanych, które są dostępne dla każdego, kto skompromituje pod.

Technika używana jest wyjaśniona w następujących wpisach:

Aby zautomatyzować ten proces, zostało stworzone narzędzie: https://github.com/4ARMED/kubeletmein

Jednak technika ta polegała na wykorzystaniu faktu, że z poświadczeniami metadanych można było wygenerować CSR (Certificate Signing Request) dla nowego węzła, który był automatycznie zatwierdzany. W moim teście sprawdziłem, że te żądania nie są już automatycznie zatwierdzane, więc nie jestem pewien, czy ta technika jest nadal ważna.

Sekrety w interfejsie API Kubelet

W tym wpisie odkryto, że istnieje adres interfejsu API Kubelet dostępny z poziomu poda w GKE, który udostępnia szczegóły działających podów:

curl -v -k http://10.124.200.1:10255/pods

Nawet jeśli API nie pozwala na modyfikację zasobów, istnieje możliwość znalezienia wrażliwych informacji w odpowiedzi. Punktem końcowym /pods został znaleziony za pomocą Kiterunner.

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated