GCP - IAM Privesc

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

IAM

Więcej informacji o IAM znajdziesz w:

GCP - IAM, Principals & Org Policies Enum

iam.roles.update (iam.roles.get)

Atakujący z wymienionymi uprawnieniami będzie mógł zaktualizować rolę przypisaną tobie i nadać ci dodatkowe uprawnienia do innych zasobów, takich jak:

gcloud iam roles update <rol name> --project <project> --add-permissions <permission>

Możesz znaleźć skrypt automatyzujący tworzenie, exploit i sprzątanie środowiska vuln tutaj oraz skrypt Pythona do nadużycia tego uprawnienia here. Więcej informacji znajdziesz w original research.

gcloud iam roles update <Rol_NAME> --project <PROJECT_ID> --add-permissions <Permission>

iam.roles.create & iam.serviceAccounts.setIamPolicy

Uprawnienie iam.roles.create pozwala na tworzenie niestandardowych ról w projekcie/organizacji. W rękach atakującego jest to niebezpieczne, ponieważ umożliwia zdefiniowanie nowych zestawów uprawnień, które później mogą zostać przypisane podmiotom (na przykład przy użyciu uprawnienia iam.serviceAccounts.setIamPolicy) w celu eskalacji uprawnień.

gcloud iam roles create <ROLE_ID> \
--project=<PROJECT_ID> \
--title="<Title>" \
--description="<Description>" \
--permissions="permission1,permission2,permission3"

iam.serviceAccounts.getAccessToken (iam.serviceAccounts.get)

Atakujący posiadający wymienione uprawnienia będzie mógł zażądać access tokenu należącego do Service Account, więc możliwe jest uzyskanie access tokenu Service Account z większymi uprawnieniami niż nasze.

Dla wariantu opartego na zasobach, w którym kod kontrolowany przez atakującego kradnie managed Vertex AI Agent Engine runtime token z metadata service i ponownie używa go jako Vertex AI service agent, sprawdź:

GCP - Vertex AI Post Exploitation

gcloud --impersonate-service-account="${victim}@${PROJECT_ID}.iam.gserviceaccount.com" \
auth print-access-token

Znajdziesz skrypt automatyzujący tworzenie, exploit i czyszczenie vuln environment oraz skrypt w pythonie do nadużycia tego uprawnienia tutaj. Po więcej informacji sprawdź original research.

iam.serviceAccountKeys.create

Atakujący z wymienionymi uprawnieniami będzie w stanie utworzyć user-managed key dla Service Account, co pozwoli nam uzyskać dostęp do GCP jako ten Service Account.

gcloud iam service-accounts keys create --iam-account <name> /tmp/key.json

gcloud auth activate-service-account --key-file=sa_cred.json

Możesz znaleźć skrypt automatyzujący utworzenie, exploit i sprzątanie środowiska z luką tutaj oraz skrypt w Pythonie do nadużycia tego uprawnienia tutaj. Dla większej ilości informacji sprawdź oryginalne badanie.

Zwróć uwagę, że iam.serviceAccountKeys.update nie zadziała, aby zmodyfikować klucz SA, ponieważ do tego potrzebne jest także uprawnienie iam.serviceAccountKeys.create.

iam.serviceAccounts.implicitDelegation

Jeśli masz uprawnienie iam.serviceAccounts.implicitDelegation na Service Account, który ma uprawnienie iam.serviceAccounts.getAccessToken względem trzeciego Service Account, możesz użyć implicitDelegation, aby utworzyć token dla tego trzeciego Service Account. Poniżej diagram, który to wyjaśnia.

Zwróć uwagę, że zgodnie z dokumentacją, delegacja gcloud działa tylko do wygenerowania tokena przy użyciu metody generateAccessToken(). Poniżej sposób na uzyskanie tokena bezpośrednio za pomocą API:

curl -X POST \
'https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/'"${TARGET_SERVICE_ACCOUNT}"':generateAccessToken' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer '"$(gcloud auth print-access-token)" \
-d '{
"delegates": ["projects/-/serviceAccounts/'"${DELEGATED_SERVICE_ACCOUNT}"'"],
"scope": ["https://www.googleapis.com/auth/cloud-platform"]
}'

You can find a script to automate the creation, exploit and cleaning of a vuln environment here and a python script to abuse this privilege here. For more information check the original research.

iam.serviceAccounts.signBlob

Atakujący z wymienionymi uprawnieniami będzie mógł sign of arbitrary payloads in GCP. Dlatego będzie możliwe create an unsigned JWT of the SA and then send it as a blob to get the JWT signed przez SA, które jest celem ataku. For more information read this.

You can find a script to automate the creation, exploit and cleaning of a vuln environment here and a python script to abuse this privilege here and here. For more information check the original research.

iam.serviceAccounts.signJwt

Atakujący z wymienionymi uprawnieniami będzie mógł sign well-formed JSON web tokens (JWTs). Różnica w stosunku do poprzedniej metody polega na tym, że zamiast zmuszać google do podpisania bloba zawierającego JWT, używamy metody signJWT, która oczekuje już JWT. To ułatwia użycie, ale można podpisywać tylko JWT zamiast dowolnych bytes.

You can find a script to automate the creation, exploit and cleaning of a vuln environment here and a python script to abuse this privilege here. For more information check the original research.

iam.serviceAccounts.setIamPolicy

Atakujący z wymienionymi uprawnieniami będzie mógł add IAM policies to service accounts. Można to nadużyć, aby grant yourself uprawnienia potrzebne do impersonate the service account. W poniższym przykładzie przyznajemy sobie rolę roles/iam.serviceAccountTokenCreator nad interesującym SA:

gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \
--member="user:username@domain.com" \
--role="roles/iam.serviceAccountTokenCreator"

# If you still have prblem grant yourself also this permission
gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \ \
--member="user:username@domain.com" \
--role="roles/iam.serviceAccountUser"

You can find a script to automate the creation, exploit and cleaning of a vuln environment here.

iam.serviceAccounts.actAs

Uprawnienie iam.serviceAccounts.actAs jest podobne do uprawnienia iam:PassRole z AWS. Jest niezbędne do wykonywania zadań, takich jak uruchamianie instancji Compute Engine, ponieważ daje możliwość “actAs” Service Account, zapewniając bezpieczne zarządzanie uprawnieniami. Bez tego użytkownicy mogliby uzyskać nadmierny dostęp. Dodatkowo, wykorzystanie iam.serviceAccounts.actAs obejmuje różne metody, z których każda wymaga zestawu uprawnień, w przeciwieństwie do innych metod, które potrzebują tylko jednego.

Service account impersonation

Podszywanie się pod Service Account może być bardzo przydatne do uzyskania nowych i lepszych uprawnień. Istnieją trzy sposoby, w jakie możesz impersonate another service account:

  • Uwierzytelnianie za pomocą RSA private keys (omówione powyżej)
  • Autoryzacja za pomocą Cloud IAM policies (omówione tutaj)
  • Uruchamianie zadań na usługach GCP (bardziej istotne przy kompromitacji konta użytkownika)

iam.serviceAccounts.getOpenIdToken

Atakujący z wymienionymi uprawnieniami będzie mógł wygenerować OpenID JWT. Służą one do potwierdzania tożsamości i niekoniecznie zawierają domyślne uprawnienia do zasobu.

Zgodnie z tym interesting post, trzeba wskazać audience (serwis, w którym chcesz użyć tokenu do uwierzytelnienia), a otrzymasz JWT podpisany przez google, wskazujący service account i audience JWT.

Możesz wygenerować OpenIDToken (jeśli masz dostęp) za pomocą:

# First activate the SA with iam.serviceAccounts.getOpenIdToken over the other SA
gcloud auth activate-service-account --key-file=/path/to/svc_account.json
# Then, generate token
gcloud auth print-identity-token "${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com" --audiences=https://example.com

Następnie możesz go po prostu użyć, aby uzyskać dostęp do usługi za pomocą:

curl -v -H "Authorization: Bearer id_token" https://some-cloud-run-uc.a.run.app

Niektóre usługi, które obsługują uwierzytelnianie za pomocą tego rodzaju tokenów, to:

Przykład, jak utworzyć token OpenID w imieniu konta usługi, znajdziesz tutaj.

Referencje

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks