GCP - Persistência de Token
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Tokens de Usuários Autenticados
Para obter o current token de um usuário, você pode executar:
Obter access token do banco de dados SQLite
```bash sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='Veja nesta página como usar diretamente este token com gcloud:
Para obter os detalhes para gerar um novo access token, execute:
Obter refresh token do banco de dados SQLite
```bash sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='Também é possível encontrar refresh tokens em $HOME/.config/gcloud/application_default_credentials.json e em $HOME/.config/gcloud/legacy_credentials/*/adc.json.
Para obter um novo access token renovado com o refresh token, client ID e client secret, execute:
Obter novo access token usando refresh token
```bash curl -s --data client_id=A validade dos refresh tokens pode ser gerenciada em Admin > Security > Google Cloud session control, e por padrão está definida para 16h embora possa ser definida para nunca expirar:
.png)
Fluxo de autenticação
O fluxo de autenticação ao usar algo como gcloud auth login abrirá um prompt no navegador e, após aceitar todos os scopes, o navegador enviará uma requisição como esta para a porta http aberta pela ferramenta:
/?state=EN5AK1GxwrEKgKog9ANBm0qDwWByYO&code=4/0AeaYSHCllDzZCAt2IlNWjMHqr4XKOuNuhOL-TM541gv-F6WOUsbwXiUgMYvo4Fg0NGzV9A&scope=email%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/cloud-platform%20https://www.googleapis.com/auth/appengine.admin%20https://www.googleapis.com/auth/sqlservice.login%20https://www.googleapis.com/auth/compute%20https://www.googleapis.com/auth/accounts.reauth&authuser=0&prompt=consent HTTP/1.1
Then, gcloud will use the state and code with a some hardcoded client_id (32555940559.apps.googleusercontent.com) and client_secret (ZmssLNjJy2998hD4CTg2ejr2) to get the final refresh token data.
Caution
Observe que a comunicação com localhost é em HTTP, então é possível interceptar os dados para obter um refresh token; no entanto, esses dados são válidos apenas uma vez, portanto isso seria inútil — é mais fácil simplesmente ler o refresh token do arquivo.
Escopos OAuth
Você pode encontrar todos os escopos do Google em https://developers.google.com/identity/protocols/oauth2/scopes ou obtê-los executando:
Obter todos os escopos OAuth do Google
```bash curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u ```É possível ver quais escopos a aplicação que gcloud usa para autenticar pode suportar com este script:
Testar escopos suportados para gcloud
```bash curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-Z/\._\-]*' | sort -u | while read -r scope; do echo -ne "Testing $scope \r" if ! curl -v "https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=32555940559.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+$scope+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=AjvFqBW5XNIw3VADagy5pvUSPraLQu&access_type=offline&code_challenge=IOk5F08WLn5xYPGRAHP9CTGHbLFDUElsP551ni2leN4&code_challenge_method=S256" 2>&1 | grep -q "error"; then echo "" echo $scope fi done ```Após executá-lo, foi verificado que este app suporta estes scopes:
https://www.googleapis.com/auth/appengine.admin
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/compute
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/userinfo.email
É interessante ver como esta aplicação suporta o escopo drive, o que poderia permitir a um usuário escalar de GCP para Workspace se um atacante conseguir forçar o usuário a gerar um token com esse escopo.
Veja como abusar disso aqui.
Contas de Serviço
Assim como com usuários autenticados, se você conseguir comprometer o arquivo de chave privada de uma conta de serviço você poderá acessá-la normalmente pelo tempo que quiser.
No entanto, se você roubar o OAuth token de uma conta de serviço isso pode ser ainda mais interessante, porque, mesmo que por padrão esses tokens sejam úteis apenas por uma hora, se a vítima apagar a chave de API privada, o OAuth token ainda permanecerá válido até expirar.
Metadados
Obviamente, enquanto você estiver dentro de uma máquina rodando no ambiente GCP você poderá acessar a conta de serviço vinculada a essa máquina consultando o endpoint de metadata (observe que os tokens OAuth que você pode acessar neste endpoint geralmente estão restritos por escopos).
Mitigações
Algumas mitigações para essas técnicas são explicadas em https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2
Referências
- https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-1
- https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
HackTricks Cloud

