GCP - Cloudfunctions Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Więcej informacji o Cloud Functions:
GCP - Cloud Functions Enumcloudfunctions.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
Atakujący z tymi uprawnieniami może zmodyfikować kod funkcji, a nawet zmienić przypisane konto usługi w celu wyeksportowania 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
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
Nadaj sobie dowolne z wcześniejszych uprawnień .update
lub .create
, aby eskalować.
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.
Jeśli masz dostęp do odczytu i zapisu w koszyku, możesz monitorować zmiany w kodzie, a gdy tylko nastąpi aktualizacja w koszyku, możesz zaktualizować nowy kod swoim własnym kodem, z którym nowa wersja Cloud Function będzie uruchamiana z przesłanym złośliwym kodem.
Możesz sprawdzić więcej na temat ataku w:
GCP - Storage PrivescJednak nie możesz użyć tego do wstępnego kompromitowania funkcji Cloud innych firm, ponieważ jeśli stworzysz koszyk na swoim koncie i nadasz mu publiczne uprawnienia, aby zewnętrzny projekt mógł na nim pisać, otrzymasz następujący błąd:
Jednak to może być użyte do ataków DoS.
Gdy tworzona jest funkcja Cloud, nowy obraz docker jest przesyłany do rejestru artefaktów projektu. Próbowałem zmodyfikować obraz na nowy, a nawet usunąć bieżący obraz (i obraz cache
), ale nic się nie zmieniło, funkcja chmurowa nadal działa. Dlatego może możliwe jest nadużycie ataku Race Condition jak w przypadku koszyka, aby zmienić kontener docker, który będzie uruchamiany, ale po prostu modyfikacja przechowywanego obrazu nie jest możliwa do kompromitacji funkcji Cloud.
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)