diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-misc-perms-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-misc-perms-privesc.md index f574a3ff4..525efd977 100644 --- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-misc-perms-privesc.md +++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-misc-perms-privesc.md @@ -1,4 +1,4 @@ -# GCP - Privilégios Genéricos Privesc +# GCP - Privesc de Permissões Genéricas {{#include ../../../banners/hacktricks-training.md}} @@ -6,20 +6,27 @@ ### \*.setIamPolicy -Se você possui um usuário que tem a permissão **`setIamPolicy`** em um recurso, você pode **escalar privilégios nesse recurso** porque poderá alterar a política IAM desse recurso e lhe dar mais privilégios sobre ele.\ -Essa permissão também pode permitir **escalar para outros principais** se o recurso permitir a execução de código e o iam.ServiceAccounts.actAs não for necessário. +Se você possui um usuário que tem a **`setIamPolicy`** permission em um recurso você pode **escalar privilégios nesse recurso** porque você poderá alterar a política IAM desse recurso e conceder a si mesmo mais privilégios sobre ele.\ +Essa permissão também pode permitir **escalar para outros principals** se o recurso permitir executar código e o `iam.ServiceAccounts.actAs` não for necessário. - _cloudfunctions.functions.setIamPolicy_ -- Modifique a política de uma Cloud Function para permitir que você a invoque. +- Modify the policy of a Cloud Function to allow yourself to invoke it. -Existem dezenas de tipos de recursos com esse tipo de permissão, você pode encontrar todos eles em [https://cloud.google.com/iam/docs/permissions-reference](https://cloud.google.com/iam/docs/permissions-reference) pesquisando por setIamPolicy. +Existem dezenas de tipos de recursos com esse tipo de permissão; você pode encontrá-los todos em [https://cloud.google.com/iam/docs/permissions-reference](https://cloud.google.com/iam/docs/permissions-reference) procurando por setIamPolicy. ### \*.create, \*.update -Essas permissões podem ser muito úteis para tentar escalar privilégios em recursos **criando um novo ou atualizando um novo**. Esse tipo de permissão é especialmente útil se você também tiver a permissão **iam.serviceAccounts.actAs** sobre uma Conta de Serviço e o recurso que você tem .create/.update pode anexar uma conta de serviço. +Essas permissões podem ser muito úteis para tentar escalar privilégios em recursos ao **criar um novo** ou **atualizar um existente**. Esse tipo de permissão é especialmente útil se você também tiver a permissão **iam.serviceAccounts.actAs** sobre um Service Account e o recurso sobre o qual você tem .create/.update puder anexar um Service Account. ### \*ServiceAccount\* -Essa permissão geralmente permitirá que você **acesse ou modifique uma Conta de Serviço em algum recurso** (por exemplo: compute.instances.setServiceAccount). Isso **pode levar a um vetor de escalonamento de privilégios**, mas dependerá de cada caso. +Essa permissão geralmente permitirá que você **acesse ou modifique um Service Account em algum recurso** (e.g.: compute.instances.setServiceAccount). Isso **poderia levar a um vetor de escalada de privilégios**, mas dependerá de cada caso. + +### iam.ServiceAccounts.actAs + +Essa permissão permite que você anexe um Service Account a um recurso que o suporte (e.g.: Compute Engine VM, Cloud Function, Cloud Run, etc).\ +Se você conseguir anexar um Service Account que tenha mais privilégios do que seu usuário a um recurso que possa executar código, você poderá escalar seus privilégios executando código com esse Service Account. + +Procure no Cloud Hacktricks por `iam.ServiceAccounts.actAs` para encontrar vários exemplos de como escalar privilégios com essa permissão. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-orgpolicy-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-orgpolicy-privesc.md index 76db434ec..c8a62b1d4 100644 --- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-orgpolicy-privesc.md +++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-orgpolicy-privesc.md @@ -6,7 +6,7 @@ ### `orgpolicy.policy.set` -Um atacante aproveitando **orgpolicy.policy.set** pode manipular políticas organizacionais, o que lhe permitirá remover certas restrições que impedem operações específicas. Por exemplo, a restrição **appengine.disableCodeDownload** geralmente bloqueia o download do código-fonte do App Engine. No entanto, ao usar **orgpolicy.policy.set**, um atacante pode desativar essa restrição, obtendo assim acesso para baixar o código-fonte, apesar de inicialmente estar protegido. +Um atacante que explora **orgpolicy.policy.set** pode manipular políticas organizacionais, o que lhe permitirá remover certas restrições que impedem operações específicas. Por exemplo, a restrição **appengine.disableCodeDownload** normalmente bloqueia o download do código-fonte do App Engine. No entanto, usando **orgpolicy.policy.set**, um atacante pode desativar essa restrição, obtendo assim acesso para baixar o código-fonte, apesar de ele inicialmente estar protegido. ```bash # Get info gcloud resource-manager org-policies describe [--folder | --organization | --project ] @@ -14,8 +14,31 @@ gcloud resource-manager org-policies describe [--folder | --or # Disable gcloud resource-manager org-policies disable-enforce [--folder | --organization | --project ] ``` -Um script em python para este método pode ser encontrado [aqui](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/orgpolicy.policy.set.py). +Um script Python para este método pode ser encontrado [aqui](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/blob/master/ExploitScripts/orgpolicy.policy.set.py). +### `orgpolicy.policy.set`, `iam.serviceAccounts.actAs` + +Normalmente não é possível anexar um service account de um projeto diferente a um recurso porque existe uma restrição de policy aplicada chamada **`iam.disableCrossProjectServiceAccountUsage`** que impede essa ação. + +É possível verificar se essa restrição está aplicada executando o seguinte comando: +```bash +gcloud resource-manager org-policies describe \ +constraints/iam.disableCrossProjectServiceAccountUsage \ +--project= \ +--effective + +booleanPolicy: +enforced: true +constraint: constraints/iam.disableCrossProjectServiceAccountUsage +``` +Isso impede que um atacante abuse da permissão **`iam.serviceAccounts.actAs`** para se passar por uma conta de serviço de outro projeto sem as permissões adicionais de infra necessárias para iniciar uma nova VM, por exemplo, o que poderia levar à escalada de privilégios. + +No entanto, um atacante com a permissão **`orgpolicy.policy.set`** pode contornar essa restrição desativando a restrição **`iam.disableServiceAccountProjectWideAccess`**. Isso permite que o atacante anexe uma conta de serviço de outro projeto a um recurso em seu próprio projeto, efetivamente elevando seus privilégios. +```bash +gcloud resource-manager org-policies disable-enforce \ +iam.disableCrossProjectServiceAccountUsage \ +--project= +``` ## Referências - [https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/](https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/)