GCP - Cloudfunctions Privesc
cloudfunctions
Więcej informacji o Cloud Functions:
GCP - Cloud Functions Enumcloudfunctions.functions.create
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
cloudfunctions.functions.create
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Atakujący z tymi uprawnieniami może utworzyć nową Cloud Function z dowolnym (złośliwym) kodem i przypisać jej konto usługi. Następnie, wyciek tokena konta usługi z metadanych pozwala na eskalację uprawnień do niego. Możliwe, że będą wymagane pewne uprawnienia do wywołania funkcji.
Skrypty exploitacyjne dla tej metody można znaleźć tutaj i tutaj, a gotowy plik .zip można znaleźć tutaj.
cloudfunctions.functions.update
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
cloudfunctions.functions.update
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Atakujący z tymi uprawnieniami może zmodyfikować kod funkcji, a nawet zmienić przypisane konto usługi w celu wyeksfiltrowania tokena.
Aby wdrożyć funkcje chmurowe, będziesz również potrzebować uprawnień actAs dla domyślnego konta usługi obliczeniowej lub dla konta usługi używanego do budowy obrazu.
Niektóre dodatkowe uprawnienia, takie jak uprawnienie .call
dla wersji 1 cloudfunctions lub rola role/run.invoker
do wywołania funkcji mogą być wymagane.
Jeśli otrzymasz błąd Permission 'run.services.setIamPolicy' denied on resource...
, to dlatego, że używasz parametru --allow-unauthenticated
i nie masz wystarczających uprawnień do tego.
Skrypt exploitujący dla tej metody można znaleźć tutaj.
cloudfunctions.functions.sourceCodeSet
cloudfunctions.functions.sourceCodeSet
Dzięki temu uprawnieniu możesz uzyskać podpisany URL, aby móc przesłać plik do koszyka funkcji (ale kod funkcji nie zostanie zmieniony, nadal musisz go zaktualizować)
Nie jestem pewien, jak przydatne jest tylko to uprawnienie z perspektywy atakującego, ale dobrze wiedzieć.
cloudfunctions.functions.setIamPolicy
, iam.serviceAccounts.actAs
cloudfunctions.functions.setIamPolicy
, iam.serviceAccounts.actAs
Daj sobie dowolne z wcześniejszych .update
lub .create
uprawnień, aby eskalować.
cloudfunctions.functions.update
cloudfunctions.functions.update
Mając tylko uprawnienia cloudfunctions
, bez iam.serviceAccounts.actAs
, nie będziesz w stanie zaktualizować funkcji, WIĘC TO NIE JEST WAŻNA ESCALACJA.
Uprawnienia do zapisu w koszyku
Możesz pomyśleć, że atakujący z uprawnieniami do zapisu w koszyku, w którym przechowywany jest kod Cloud Functions, będzie mógł zmodyfikować kod, nadpisując function_code.zip
, a następnie sprawić, że funkcja wykona dowolny kod.
Jednak to nieprawda, po prostu nadpisanie kodu w koszyku nie zmodyfikuje kodu, który jest wykonywany.
Referencje
Last updated