Cognito User Pools
Basic Information
Pula użytkowników to katalog użytkowników w Amazon Cognito. Dzięki puli użytkowników, Twoi użytkownicy mogą zalogować się do Twojej aplikacji internetowej lub mobilnej za pośrednictwem Amazon Cognito, lub federować przez dostawcę tożsamości (IdP) zewnętrznego. Niezależnie od tego, czy Twoi użytkownicy logują się bezpośrednio, czy przez stronę trzecią, wszyscy członkowie puli użytkowników mają profil katalogu, do którego możesz uzyskać dostęp za pośrednictwem SDK.
Pule użytkowników oferują:
Usługi rejestracji i logowania.
Wbudowany, dostosowywalny interfejs użytkownika do logowania użytkowników.
Logowanie społecznościowe za pomocą Facebooka, Google, Logowanie z Amazon i Logowanie z Apple, oraz przez dostawców tożsamości SAML i OIDC z Twojej puli użytkowników.
Zarządzanie katalogiem użytkowników i profilami użytkowników.
Funkcje bezpieczeństwa, takie jak uwierzytelnianie wieloskładnikowe (MFA), kontrole dotyczące skompromitowanych poświadczeń, ochrona przed przejęciem konta oraz weryfikacja telefonu i e-maila.
Dostosowane przepływy pracy i migracja użytkowników za pomocą wyzwalaczy AWS Lambda.
Kod źródłowy aplikacji zazwyczaj zawiera również ID puli użytkowników oraz ID aplikacji klienckiej, (a czasami sekret aplikacji?), które są potrzebne do logowania użytkownika do puli użytkowników Cognito.
Potential attacks
Rejestracja: Domyślnie użytkownik może zarejestrować się samodzielnie, więc może stworzyć konto dla siebie.
Enumaracja użytkowników: Funkcjonalność rejestracji może być używana do znajdowania nazw użytkowników, które już istnieją. Ta informacja może być przydatna do ataku brute-force.
Brute-force logowania: W sekcji Uwierzytelnianie masz wszystkie metody, które użytkownik ma do logowania, możesz spróbować przeprowadzić atak brute-force, aby znaleźć ważne poświadczenia.
Tools for pentesting
Pacu, teraz zawiera moduły
cognito__enum
icognito__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) oraz eskalację uprawnień na podstawie modyfikowalnych atrybutów niestandardowych, używalnych poświadczeń z 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.
Cognito Scanner to narzędzie CLI w pythonie, które implementuje różne ataki na Cognito, w tym niechciane tworzenie kont i oracle kont. Sprawdź ten link po więcej informacji.
CognitoAttributeEnum: Ten skrypt umożliwia enumerację ważnych atrybutów dla użytkowników.
Rejestracja
User Pools pozwala domyślnie na rejestrowanie nowych użytkowników.
Jeśli ktokolwiek może się zarejestrować
Możesz napotkać błąd wskazujący, że musisz podać więcej szczegółów dotyczących użytkownika:
Możesz dostarczyć potrzebne szczegóły w formacie JSON, takim jak:
Możesz również użyć tej funkcjonalności do enumeracji istniejących użytkowników. Oto komunikat o błędzie, gdy użytkownik o tej nazwie już istnieje:
Zauważ w poprzedniej komendzie, jak niestandardowe atrybuty zaczynają się od "custom:". Wiedz również, że podczas rejestracji nie możesz tworzyć nowych niestandardowych atrybutów dla użytkownika. Możesz tylko przypisać wartość do domyślnych atrybutów (nawet jeśli nie są wymagane) oraz określonych niestandardowych atrybutów.
Lub po prostu, aby sprawdzić, czy identyfikator klienta istnieje. Oto błąd, jeśli identyfikator klienta nie istnieje:
Jeśli tylko administrator może rejestrować użytkowników
Zauważysz ten błąd i nie będziesz w stanie zarejestrować ani wyenumerować użytkowników:
Verifying Registration
Cognito pozwala na weryfikację nowego użytkownika poprzez potwierdzenie jego adresu e-mail lub numeru telefonu. Dlatego podczas tworzenia użytkownika zazwyczaj będziesz musiał podać przynajmniej nazwę użytkownika i hasło oraz adres e-mail i/lub numer telefonu. Po prostu ustaw jeden który kontrolujesz, aby otrzymać kod do potwierdzenia nowo utworzonego konta użytkownika w ten sposób:
Nawet jeśli wygląda na to, że możesz użyć tego samego adresu e-mail i numeru telefonu, gdy musisz zweryfikować utworzonego użytkownika, Cognito będzie narzekać na użycie tych samych informacji i nie pozwoli ci zweryfikować konta.
Eskalacja uprawnień / Aktualizacja atrybutów
Domyślnie użytkownik może zmieniać wartość swoich atrybutów za pomocą czegoś takiego:
Privesc atrybutów niestandardowych
Możesz znaleźć atrybuty niestandardowe (takie jak isAdmin
), ponieważ domyślnie możesz zmieniać wartości swoich własnych atrybutów, co może pozwolić ci na eskalację uprawnień poprzez zmianę wartości samodzielnie!
Privesc modyfikacji e-maila/nazwy użytkownika
Możesz użyć tego do modyfikacji e-maila i numeru telefonu użytkownika, ale nawet jeśli konto pozostaje zweryfikowane, te atrybuty są ustawione w statusie nieweryfikowanym (musisz je zweryfikować ponownie).
Nie będziesz mógł zalogować się za pomocą e-maila lub numeru telefonu dopóki ich nie zweryfikujesz, ale będziesz mógł zalogować się za pomocą nazwy użytkownika.
Zauważ, że nawet jeśli e-mail został zmodyfikowany i niezweryfikowany, pojawi się w tokenie ID w polu email
, a pole email_verified
będzie fałszywe, ale jeśli aplikacja nie sprawdza tego, możesz podszyć się pod innych użytkowników.
Ponadto, zauważ, że możesz wpisać cokolwiek w pole name
, po prostu modyfikując atrybut nazwy. Jeśli aplikacja sprawdza to pole z jakiegoś powodu zamiast email
(lub jakiegokolwiek innego atrybutu), możesz być w stanie podszyć się pod innych użytkowników.
W każdym razie, jeśli z jakiegoś powodu zmieniłeś swój e-mail na nowy, do którego masz dostęp, możesz potwierdzić e-mail za pomocą kodu, który otrzymałeś na ten adres e-mail:
Użyj phone_number
zamiast email
, aby zmienić/weryfikować nowy numer telefonu.
Administrator może również włączyć opcję logowania za pomocą preferowanej nazwy użytkownika. Należy pamiętać, że nie będziesz mógł zmienić tej wartości na dowolną nazwę użytkownika lub preferred_username, która już jest używana do podszywania się pod innego użytkownika.
Przywracanie/Zmiana Hasła
Możliwe jest przywrócenie hasła, znając nazwę użytkownika (lub akceptowany jest email lub telefon), a dostęp do niego jest konieczny, ponieważ kod zostanie tam wysłany:
Odpowiedź serwera zawsze będzie pozytywna, jakby nazwa użytkownika istniała. Nie możesz użyć tej metody do enumeracji użytkowników.
Za pomocą kodu możesz zmienić hasło na:
Aby zmienić hasło, musisz znać poprzednie hasło:
Autoryzacja
Pula użytkowników obsługuje różne sposoby autoryzacji. Jeśli masz nazwa użytkownika i hasło, obsługiwane są również różne metody logowania. Ponadto, gdy użytkownik jest uwierzytelniony w Puli, przyznawane są 3 typy tokenów: Token ID, Token dostępu i Token odświeżania.
Token ID: Zawiera informacje o tożsamości uwierzytelnionego użytkownika, takie jak
name
,email
iphone_number
. Token ID może być również używany do uwierzytelniania użytkowników w serwerach zasobów lub aplikacjach serwerowych. Musisz zweryfikować podpis tokena ID, zanim będziesz mógł zaufać jakimkolwiek informacjom wewnątrz tokena ID, jeśli używasz go w aplikacjach zewnętrznych.Token ID to token, który zawiera wartości atrybutów użytkownika, nawet tych niestandardowych.
Token dostępu: Zawiera informacje o uwierzytelnionym użytkowniku, listę grup użytkownika oraz listę zakresów. Celem tokena dostępu jest autoryzacja operacji API w kontekście użytkownika w puli użytkowników. Na przykład, możesz użyć tokena dostępu, aby przyznać użytkownikowi dostęp do dodawania, zmieniania lub usuwania atrybutów użytkownika.
Token odświeżania: Dzięki tokenom odświeżania możesz uzyskać nowe tokeny ID i tokeny dostępu dla użytkownika, dopóki token odświeżania jest ważny. Domyślnie token odświeżania wygasa 30 dni po zalogowaniu się użytkownika do puli użytkowników. Gdy tworzysz aplikację dla swojej puli użytkowników, możesz ustawić czas wygaśnięcia tokena odświeżania aplikacji na dowolną wartość między 60 minutami a 10 latami.
ADMIN_NO_SRP_AUTH & ADMIN_USER_PASSWORD_AUTH
To jest przepływ autoryzacji po stronie serwera:
Aplikacja po stronie serwera wywołuje operację API
AdminInitiateAuth
(zamiastInitiateAuth
). Ta operacja wymaga poświadczeń AWS z uprawnieniami, które obejmującognito-idp:AdminInitiateAuth
icognito-idp:AdminRespondToAuthChallenge
. Operacja zwraca wymagane parametry autoryzacji.Po uzyskaniu parametrów autoryzacji przez aplikację po stronie serwera, wywołuje operację API
AdminRespondToAuthChallenge
. Operacja APIAdminRespondToAuthChallenge
kończy się sukcesem tylko wtedy, gdy dostarczysz poświadczenia AWS.
Ta metoda NIE jest włączona domyślnie.
Aby zalogować się, musisz znać:
identyfikator puli użytkowników
identyfikator klienta
nazwę użytkownika
hasło
sekret klienta (tylko jeśli aplikacja jest skonfigurowana do używania sekretu)
Aby móc zalogować się tą metodą, ta aplikacja musi zezwalać na logowanie z ALLOW_ADMIN_USER_PASSWORD_AUTH
.
Ponadto, aby wykonać tę akcję, potrzebujesz poświadczeń z uprawnieniami cognito-idp:AdminInitiateAuth
i cognito-idp:AdminRespondToAuthChallenge
.
Last updated