AWS - Cognito 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)
Aby uzyskać więcej informacji o Cognito, sprawdź:
Ponieważ Cognito może przyznać poświadczenia roli IAM zarówno uwierzytelnionym, jak i nieuwierzytelnionym użytkownikom, jeśli znajdziesz ID Identity Pool aplikacji (powinno być zakodowane w niej), możesz uzyskać nowe poświadczenia, a tym samym privesc (w ramach konta AWS, na którym prawdopodobnie nie miałeś wcześniej żadnych poświadczeń).
Aby uzyskać więcej informacji, sprawdź tę stronę.
Potencjalny wpływ: Bezpośredni privesc do roli usługowej przypisanej do użytkowników nieautoryzowanych (a prawdopodobnie także do tej przypisanej do użytkowników autoryzowanych).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Dzięki temu uprawnieniu możesz przyznać dowolną rolę cognito uwierzytelnionym/nieuwierzytelnionym użytkownikom aplikacji cognito.
Jeśli aplikacja cognito nie ma włączonych użytkowników nieautoryzowanych, możesz również potrzebować uprawnienia cognito-identity:UpdateIdentityPool
, aby je włączyć.
Potencjalny wpływ: Bezpośrednie privesc do dowolnej roli cognito.
cognito-identity:update-identity-pool
Napastnik z tym uprawnieniem mógłby ustawić na przykład Cognito User Pool pod swoją kontrolą lub innego dostawcę tożsamości, gdzie może się zalogować jako sposób na uzyskanie dostępu do tego Cognito Identity Pool. Następnie, po prostu logując się na tym dostawcy użytkowników, pozwoli mu to uzyskać dostęp do skonfigurowanej roli uwierzytelnionej w Identity Pool.
Możliwe jest również nadużycie tego uprawnienia, aby zezwolić na podstawową autoryzację:
Potencjalny wpływ: Kompromitacja skonfigurowanej uwierzytelnionej roli IAM w obrębie puli tożsamości.
cognito-idp:AdminAddUserToGroup
To uprawnienie pozwala na dodanie użytkownika Cognito do grupy Cognito, w związku z tym atakujący mógłby nadużyć tego uprawnienia, aby dodać użytkownika pod swoją kontrolą do innych grup z lepszymi uprawnieniami lub innymi rolami IAM:
Potencjalny wpływ: Privesc do innych grup Cognito i ról IAM przypisanych do grup User Pool.
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
Napastnik z tymi uprawnieniami mógłby tworzyć/aktualizować grupy z każdą rolą IAM, która może być używana przez skompromitowanego dostawcę tożsamości Cognito i uczynić skompromitowanego użytkownika częścią grupy, uzyskując dostęp do wszystkich tych ról:
Potencjalny wpływ: Privesc do innych ról IAM Cognito.
cognito-idp:AdminConfirmSignUp
To uprawnienie pozwala na potwierdzenie rejestracji. Domyślnie każdy może zalogować się do aplikacji Cognito, jeśli to zostanie pozostawione, użytkownik mógłby utworzyć konto z dowolnymi danymi i potwierdzić je za pomocą tego uprawnienia.
Potencjalny wpływ: Pośrednie privesc do roli IAM puli tożsamości dla uwierzytelnionych użytkowników, jeśli możesz zarejestrować nowego użytkownika. Pośrednie privesc do innych funkcji aplikacji, mogąc potwierdzić dowolne konto.
cognito-idp:AdminCreateUser
To uprawnienie pozwoliłoby atakującemu na utworzenie nowego użytkownika w obrębie puli użytkowników. Nowy użytkownik jest tworzony jako aktywny, ale będzie musiał zmienić swoje hasło.
Potencjalny wpływ: Bezpośredni privesc do roli IAM puli tożsamości dla uwierzytelnionych użytkowników. Pośredni privesc do innych funkcji aplikacji, mogąc stworzyć dowolnego użytkownika.
cognito-idp:AdminEnableUser
Te uprawnienia mogą pomóc w bardzo skrajnym przypadku, w którym atakujący znalazł dane uwierzytelniające wyłączonego użytkownika i musi ponownie je włączyć.
Potencjalny wpływ: Pośrednie privesc do roli IAM puli tożsamości dla uwierzytelnionych użytkowników i uprawnień użytkownika, jeśli atakujący miałby poświadczenia dla wyłączonego użytkownika.
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
To uprawnienie pozwala na logowanie się za pomocą metody ADMIN_USER_PASSWORD_AUTH. Aby uzyskać więcej informacji, kliknij w link.
cognito-idp:AdminSetUserPassword
To uprawnienie pozwoliłoby atakującemu na zmianę hasła dowolnego użytkownika, co umożliwiłoby mu podszywanie się pod dowolnego użytkownika (który nie ma włączonego MFA).
Potencjalny wpływ: Bezpośredni privesc do potencjalnie dowolnego użytkownika, co daje dostęp do wszystkich grup, do których należy każdy użytkownik, oraz dostęp do roli IAM uwierzytelnionej w Identity Pool.
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: Napastnik mógłby potencjalnie nadużyć tej uprawnienia, aby ustawić telefon komórkowy pod swoją kontrolą jako SMS MFA użytkownika.
SetUserMFAPreference: Podobnie jak w poprzednim przypadku, to uprawnienie może być używane do ustawiania preferencji MFA użytkownika w celu ominięcia ochrony MFA.
SetUserPoolMfaConfig: Podobnie jak w poprzednim przypadku, to uprawnienie może być używane do ustawiania preferencji MFA puli użytkowników w celu ominięcia ochrony MFA.
UpdateUserPool: Możliwe jest również zaktualizowanie puli użytkowników, aby zmienić politykę MFA. Sprawdź cli tutaj.
Potential Impact: Pośrednie privesc do potencjalnie dowolnego użytkownika, którego atakujący zna dane uwierzytelniające, co może pozwolić na ominięcie ochrony MFA.
cognito-idp:AdminUpdateUserAttributes
Atakujący z tym uprawnieniem mógłby zmienić adres e-mail lub numer telefonu lub jakikolwiek inny atrybut użytkownika pod jego kontrolą, aby spróbować uzyskać więcej uprawnień w podstawowej aplikacji. To pozwala na zmianę adresu e-mail lub numeru telefonu i ustawienie go jako zweryfikowanego.
Potencjalny wpływ: Potencjalne pośrednie privesc w podstawowej aplikacji korzystającej z Cognito User Pool, która przyznaje uprawnienia na podstawie atrybutów użytkownika.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
Napastnik z tym uprawnieniem mógłby utworzyć nowego Klienta User Pool o mniejszych ograniczeniach niż już istniejące klienty pool. Na przykład, nowy klient mógłby pozwalać na wszelkiego rodzaju metody uwierzytelniania, nie mieć żadnego sekretu, mieć wyłączoną revokację tokenów, pozwalać na dłuższy okres ważności tokenów...
To samo można zrobić, jeśli zamiast tworzenia nowego klienta, zmodyfikowany zostanie istniejący.
W wierszu poleceń (lub aktualizacji) możesz zobaczyć wszystkie opcje, sprawdź to!
Potencjalny wpływ: Potencjalne pośrednie privesc do użytkownika autoryzowanego w Identity Pool używanego przez User Pool poprzez utworzenie nowego klienta, który łagodzi środki bezpieczeństwa i umożliwia atakującemu zalogowanie się jako użytkownik, którego był w stanie utworzyć.
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
Atakujący mógłby nadużyć tego uprawnienia, aby tworzyć użytkowników, przesyłając plik csv z nowymi użytkownikami.
(W przypadku, gdy tworzysz nowe zadanie importu, możesz również potrzebować uprawnienia iam passrole, jeszcze tego nie testowałem).
Potencjalny wpływ: Bezpośrednie privesc do roli IAM puli tożsamości dla uwierzytelnionych użytkowników. Pośrednie privesc do innych funkcji aplikacji, mogąc tworzyć dowolnego użytkownika.
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
Napastnik mógłby stworzyć nowego dostawcę tożsamości, aby móc zalogować się przez tego dostawcę.
Potencjalny wpływ: Bezpośrednie privesc do roli IAM puli tożsamości dla uwierzytelnionych użytkowników. Pośrednie privesc do innych funkcji aplikacji, mogąc tworzyć dowolnego użytkownika.
To bardzo powszechne uprawnienie domyślnie w rolach Cognito Identity Pools. Nawet jeśli użycie znaku wieloznacznego w uprawnieniach zawsze wygląda źle (szczególnie w przypadku AWS), przyznane uprawnienia nie są super przydatne z perspektywy atakującego.
To uprawnienie pozwala na odczyt informacji o użytkownikach z Puli Tożsamości i identyfikatorów tożsamości w Puli Tożsamości (co nie jest informacją wrażliwą). Identyfikatory tożsamości mogą mieć przypisane Zbiory Danych, które są informacjami o sesjach (AWS definiuje to jako zapisana gra). Może się zdarzyć, że zawierają one jakiś rodzaj wrażliwych informacji (ale prawdopodobieństwo jest dość niskie). Możesz znaleźć na stronie enumeracji jak uzyskać dostęp do tych informacji.
Atakujący mógłby również wykorzystać te uprawnienia do zapisania się do strumienia Cognito, który publikuje zmiany w tych zbiorach danych lub lambdy, która wyzwala się na zdarzenia Cognito. Nie widziałem, aby to było używane, i nie spodziewałbym się tutaj wrażliwych informacji, ale nie jest to niemożliwe.
Pacu, framework do eksploatacji AWS, teraz zawiera moduły "cognito__enum" i "cognito__attack", które automatyzują enumerację wszystkich zasobów Cognito w koncie i oznaczają słabe konfiguracje, atrybuty użytkowników używane do kontroli dostępu itp., a także automatyzują tworzenie użytkowników (w tym wsparcie MFA) i eskalację uprawnień na podstawie modyfikowalnych atrybutów niestandardowych, używalnych poświadczeń puli tożsamości, ról, które można przyjąć w tokenach id itp.
Aby uzyskać opis funkcji modułów, zobacz część 2 postu na blogu. Aby uzyskać instrukcje instalacji, zobacz główną stronę Pacu.
Przykład użycia cognito__attack do próby tworzenia użytkownika i wszystkich wektorów privesc przeciwko danej puli tożsamości i klientowi puli użytkowników:
Przykład użycia cognito__enum do zebrania wszystkich pul użytkowników, klientów pul użytkowników, pul tożsamości, użytkowników itp. widocznych w bieżącym koncie AWS:
Cognito Scanner to narzędzie CLI w pythonie, które implementuje różne ataki na Cognito, w tym eskalację uprawnień.
Aby uzyskać więcej informacji, sprawdź https://github.com/padok-team/cognito-scanner
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)