Cognito Identity Pools
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)
Pule tożsamości odgrywają kluczową rolę, umożliwiając użytkownikom uzyskanie tymczasowych poświadczeń. Poświadczenia te są niezbędne do uzyskania dostępu do różnych usług AWS, w tym między innymi Amazon S3 i DynamoDB. Cechą wyróżniającą pule tożsamości jest ich wsparcie zarówno dla anonimowych użytkowników gości, jak i dla różnych dostawców tożsamości w celu uwierzytelnienia użytkowników. Obsługiwani dostawcy tożsamości obejmują:
pule użytkowników Amazon Cognito
opcje logowania społecznościowego, takie jak Facebook, Google, Logowanie z Amazon i Logowanie z Apple
dostawcy zgodni z OpenID Connect (OIDC)
dostawcy tożsamości SAML (Security Assertion Markup Language)
tożsamości uwierzytelniane przez dewelopera
Aby wygenerować sesje Identity Pool, najpierw musisz wygenerować Identity ID. Ten Identity ID jest identyfikacją sesji tego użytkownika. Te identyfikacje mogą mieć do 20 zestawów danych, które mogą przechowywać do 1MB par klucz-wartość.
To jest przydatne do przechowywania informacji o użytkowniku (który zawsze będzie używał tego samego Identity ID).
Ponadto, usługa cognito-sync to usługa, która pozwala na zarządzanie i synchronizowanie tych informacji (w zestawach danych, wysyłanie informacji w strumieniach i wiadomościach SNS...).
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żytkowników i wszystkich wektorów privesc przeciwko danej puli tożsamości i kliencie puli użytkowników:
Przykład użycia cognito__enum do zbierania 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 niechciane tworzenie kont i eskalację puli tożsamości.
For more information check https://github.com/padok-team/cognito-scanner
Jedyną rzeczą, którą atakujący musi wiedzieć, aby uzyskać dane uwierzytelniające AWS w aplikacji Cognito jako użytkownik nieautoryzowany, jest ID puli tożsamości, a to ID musi być zakodowane na stałe w aplikacji webowej/mobilnej, aby mogła z niego korzystać. ID wygląda tak: eu-west-1:098e5341-8364-038d-16de-1865e435da3b
(nie można go złamać metodą brute force).
Domyślnie nieautoryzowana rola IAM Cognito utworzona przez nazywa się Cognito_<Nazwa puli tożsamości>Unauth_Role
Jeśli znajdziesz ID puli tożsamości zakodowane na stałe i pozwala ono na dostęp użytkownikom nieautoryzowanym, możesz uzyskać dane uwierzytelniające AWS za pomocą:
Lub możesz użyć następujących aws cli commands:
Zauważ, że domyślnie nieautoryzowany użytkownik cognito NIE MOŻE mieć żadnych uprawnień, nawet jeśli zostały przypisane za pomocą polityki. Sprawdź następną sekcję.
Poprzednia sekcja dotyczyła domyślnego ulepszonego przepływu uwierzytelniania. Ten przepływ ustawia ograniczającą politykę sesji dla wygenerowanej sesji roli IAM. Ta polityka pozwoli tylko na korzystanie z usług z tej listy (nawet jeśli rola miała dostęp do innych usług).
Jednak istnieje sposób, aby to obejść, jeśli pula tożsamości ma włączony "Podstawowy (Klasyczny) Przepływ", użytkownik będzie mógł uzyskać sesję korzystając z tego przepływu, która nie będzie miała tej ograniczającej polityki sesji.
Jeśli otrzymasz ten błąd, to dlatego, że podstawowy przepływ nie jest włączony (domyślnie)
Wystąpił błąd (InvalidParameterException) podczas wywoływania operacji GetOpenIdToken: Podstawowy (klasyczny) przepływ nie jest włączony, proszę użyć rozszerzonego przepływu.
Mając zestaw poświadczeń IAM, powinieneś sprawdzić jakie masz uprawnienia i spróbować podnieść uprawnienia.
Pamiętaj, że uwierzytelnieni użytkownicy mogą mieć inne uprawnienia, więc jeśli możesz zarejestrować się w aplikacji, spróbuj to zrobić i uzyskaj nowe poświadczenia.
Mogą być również dostępne role dla uwierzytelnionych użytkowników uzyskujących dostęp do Identity Pool.
W tym celu możesz potrzebować dostępu do dostawcy tożsamości. Jeśli jest to Cognito User Pool, być może możesz wykorzystać domyślne zachowanie i samodzielnie utworzyć nowego użytkownika.
IAM Cognito uwierzytelniona rola utworzona przez domyślnie nazywa się Cognito_<Nazwa Identity Pool>Auth_Role
W każdym razie, następny przykład zakłada, że już zalogowałeś się w Cognito User Pool używanym do uzyskania dostępu do Identity Pool (nie zapomnij, że inne typy dostawców tożsamości mogą być również skonfigurowane).
Możliwe jest konfigurowanie różnych ról IAM w zależności od dostawcy tożsamości, z którego użytkownik się loguje, lub nawet w zależności od użytkownika (używając roszczeń). Dlatego, jeśli masz dostęp do różnych użytkowników przez tego samego lub różnych dostawców, może być warto zalogować się i uzyskać dostęp do ról IAM wszystkich z nich.
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)