AWS - Cognito Privesc
Cognito
Aby uzyskać więcej informacji na temat Cognito, sprawdź:
pageAWS - Cognito EnumZbieranie poświadczeń z Identity Pool
Ponieważ Cognito może przyznawać poświadczenia uprawnień IAM zarówno uwierzytelnionym, jak i nieuwierzytelnionym użytkownikom, jeśli zlokalizujesz Identity Pool ID aplikacji (powinno być na stałe w niej zakodowane), możesz uzyskać nowe poświadczenia i tym samym eskalować uprawnienia (w ramach konta AWS, w którym prawdopodobnie wcześniej nie miałeś żadnych poświadczeń).
Aby uzyskać więcej informacji, sprawdź tę stronę.
Potencjalne skutki: Bezpośrednia eskalacja uprawnień do roli usług przypisanej do nieuwierzytelnionych użytkowników (i prawdopodobnie do roli przypisanej do uwierzytelnionych użytkowników).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Z tym uprawnieniem możesz przyznać dowolną rolę Cognito uwierzytelnionym/nieuwierzytelnionym użytkownikom aplikacji Cognito.
Jeśli aplikacja Cognito nie ma włączonej obsługi nieuwierzytelnionych użytkowników, może być konieczne również posiadanie uprawnienia cognito-identity:UpdateIdentityPool
, aby je włączyć.
Potencjalne skutki: Bezpośrednie podniesienie uprawnień do dowolnej roli Cognito.
cognito-identity:update-identity-pool
cognito-identity:update-identity-pool
Atakujący posiadający to uprawnienie mógłby na przykład ustawić pulę użytkowników Cognito pod swoją kontrolą lub dowolny inny dostawca tożsamości, gdzie może się zalogować jako sposób dostępu do tej puli tożsamości Cognito. Następnie, po prostu zalogowanie się na tym dostawcy użytkowników pozwoli mu uzyskać dostęp do skonfigurowanej roli uwierzytelnionej w puli tożsamości.
Możliwe jest również wykorzystanie tego uprawnienia do umożliwienia uwierzytelniania podstawowego:
Potencjalne skutki: Naruszenie skonfigurowanej uwierzytelnionej roli IAM w puli tożsamości.
cognito-idp:AdminAddUserToGroup
cognito-idp:AdminAddUserToGroup
To uprawnienie umożliwia dodanie użytkownika Cognito do grupy Cognito, dlatego atakujący może wykorzystać to uprawnienie, aby dodać użytkownika pod swoją kontrolą do innych grup z lepszymi uprawnieniami lub różnymi rolami IAM:
Potencjalne skutki: Podniesienie uprawnień do innych grup Cognito oraz ról IAM przypisanych do grup puli użytkowników.
(cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
Atakujący posiadający te uprawnienia mógłby tworzyć/aktualizować grupy z każdą rolą IAM, która może być wykorzystana przez skompromitowanego dostawcę tożsamości Cognito oraz umieścić skompromitowanego użytkownika w grupie, uzyskując dostęp do wszystkich tych ról:
Potencjalne skutki: Podniesienie uprawnień do innych ról IAM Cognito.
cognito-idp:AdminConfirmSignUp
cognito-idp:AdminConfirmSignUp
To uprawnienie umożliwia potwierdzenie rejestracji. Domyślnie każdy może zarejestrować się w aplikacjach Cognito, jeśli zostanie to włączone, użytkownik może utworzyć konto z dowolnymi danymi i potwierdzić je przy użyciu tego uprawnienia.
Potencjalne skutki: Pośrednie podniesienie uprawnień do roli IAM puli tożsamości dla uwierzytelnionych użytkowników, jeśli można zarejestrować nowego użytkownika. Pośrednie podniesienie uprawnień do innych funkcjonalności aplikacji, umożliwiające potwierdzenie dowolnego konta.
cognito-idp:AdminCreateUser
cognito-idp:AdminCreateUser
To uprawnienie umożliwia atakującemu utworzenie nowego użytkownika w puli użytkowników. Nowy użytkownik jest tworzony jako włączony, ale będzie musiał zmienić swoje hasło.
Potencjalne skutki: Bezpośrednie podniesienie uprawnień do roli IAM puli tożsamości dla uwierzytelnionych użytkowników. Pośrednie podniesienie uprawnień do innych funkcji aplikacji, umożliwiające tworzenie dowolnego użytkownika.
cognito-idp:AdminEnableUser
cognito-idp:AdminEnableUser
Te uprawnienia mogą pomóc w bardzo szczególnym przypadku, gdy atakujący znajdzie poświadczenia wyłączonego użytkownika i musi go ponownie włączyć.
Potencjalne skutki: Pośrednie podniesienie uprawnień do roli IAM puli tożsamości dla uwierzytelnionych użytkowników oraz uprawnień użytkownika, jeśli atakujący posiadał poświadczenia dla wyłączonego użytkownika.
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
To uprawnienie umożliwia logowanie za pomocą metody ADMIN_USER_PASSWORD_AUTH. Aby uzyskać więcej informacji, przejdź do linku.
cognito-idp:AdminSetUserPassword
cognito-idp:AdminSetUserPassword
To uprawnienie umożliwiłoby atakującemu zmianę hasła dowolnego użytkownika, umożliwiając mu podszywanie się pod dowolnego użytkownika (który nie ma włączonej MFA).
Potencjalne skutki: Bezpośrednie podniesienie uprawnień do potencjalnie dowolnego użytkownika, co umożliwia dostęp do wszystkich grup, do których należy dany użytkownik, oraz dostęp do roli IAM uwierzytelnionej w puli tożsamości.
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: Atakujący może potencjalnie wykorzystać te uprawnienia, aby ustawić swój własny telefon komórkowy jako SMS MFA dla użytkownika.
SetUserMFAPreference: Podobnie jak poprzednie uprawnienie, to uprawnienie można wykorzystać do ustawienia preferencji MFA użytkownika w celu obejścia ochrony MFA.
SetUserPoolMfaConfig: Podobnie jak poprzednie uprawnienie, to uprawnienie można użyć do ustawienia preferencji MFA dla puli użytkowników w celu obejścia ochrony MFA.
UpdateUserPool: Możliwe jest również zaktualizowanie puli użytkowników w celu zmiany polityki MFA. Sprawdź tutaj cli.
Potencjalne skutki: Pośrednie podniesienie uprawnień, które może dotyczyć dowolnego użytkownika, który zna dane uwierzytelniające atakującego. Może to umożliwić obejście ochrony MFA.
cognito-idp:AdminUpdateUserAttributes
cognito-idp:AdminUpdateUserAttributes
Atakujący posiadający te uprawnienia może zmienić adres e-mail, numer telefonu lub inne atrybuty użytkownika znajdującego się pod jego kontrolą, aby uzyskać większe uprawnienia w aplikacji. To pozwala na zmianę adresu e-mail lub numeru telefonu i ustawienie go jako zweryfikowany.
Potencjalne skutki: Potencjalne pośrednie podniesienie uprawnień w aplikacji wykorzystującej Cognito User Pool, które przyznaje uprawnienia na podstawie atrybutów użytkownika.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
Atakujący posiadający te uprawnienia mógłby utworzyć nowego klienta User Pool o mniejszych ograniczeniach niż istniejący już klienci puli. Na przykład, nowy klient mógłby umożliwiać dowolny rodzaj uwierzytelniania, nie posiadać żadnego sekretu, wyłączać unieważnianie tokenów, umożliwiać ważność tokenów przez dłuższy okres...
To samo można zrobić, jeśli zmodyfikowany zostanie istniejący klient zamiast tworzenia nowego.
W wierszu poleceń (lub aktualizacji) można zobaczyć wszystkie opcje, sprawdź to!.
Potencjalne skutki: Potencjalne pośrednie podniesienie uprawnień do użytkownika uwierzytelnionego w puli tożsamości, używanego przez pulę użytkowników, 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
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
Atakujący mógłby wykorzystać te uprawnienia do tworzenia użytkowników poprzez przesyłanie pliku CSV z nowymi użytkownikami.
(W przypadku tworzenia nowego zadania importu może być również wymagane uprawnienie iam passrole, nie testowałem tego jeszcze).
Potencjalne skutki: Bezpośrednie podniesienie uprawnień do roli IAM puli tożsamości dla uwierzytelnionych użytkowników. Pośrednie podniesienie uprawnień do innych funkcji aplikacji, umożliwiające tworzenie dowolnego użytkownika.
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
Atakujący mógłby utworzyć nowego dostawcę tożsamości, aby następnie móc zalogować się za pomocą tego dostawcy.
Potencjalne skutki: Bezpośrednie podniesienie uprawnień do roli IAM puli tożsamości dla uwierzytelnionych użytkowników. Pośrednie podniesienie uprawnień do innych funkcji aplikacji, umożliwiające tworzenie dowolnych użytkowników.
Analiza cognito-sync:*
To jest bardzo częste uprawnienie domyślnie przypisywane rolom puli tożsamości Cognito. Nawet jeśli użycie symbolu wieloznacznego w uprawnieniach zawsze wygląda podejrzanie (szczególnie w przypadku AWS), udzielone uprawnienia nie są zbyt przydatne z perspektywy atakującego.
To uprawnienie umożliwia odczyt informacji o użytkownikach pul tożsamości oraz identyfikatorach tożsamości wewnątrz pul tożsamości (co nie jest poufnymi informacjami). Identyfikatory tożsamości mogą mieć przypisane Zbiory danych, które są informacjami o sesjach (AWS definiuje to jako zapisaną grę). Możliwe, że mogą zawierać one pewne poufne informacje (ale prawdopodobieństwo jest dość niskie). W stronie wyliczania można znaleźć informacje, jak uzyskać dostęp do tych informacji.
Atakujący może również użyć tych uprawnień do zapisania się do strumienia Cognito, który publikuje zmiany w tych zbiorach danych lub wywołania funkcji lambda w przypadku zdarzeń Cognito. Nie widziałem, żeby to było wykorzystywane, i nie oczekiwałbym tutaj poufnych informacji, ale nie jest to niemożliwe.
Automatyczne narzędzia
Pacu, framework eksploatacji AWS, teraz zawiera moduły "cognito__enum" i "cognito__attack", które automatyzują wyliczanie wszystkich zasobów Cognito w koncie, wykrywanie słabych konfiguracji, atrybutów użytkowników używanych do kontroli dostępu itp., a także automatyzują tworzenie użytkowników (w tym obsługę MFA) i podnoszenie uprawnień na podstawie modyfikowalnych niestandardowych atrybutów, użytecznych poświadczeń puli tożsamości, ról do przyjęcia w tokenach identyfikacyjnych itp.
Opis funkcji modułów znajduje się w części 2 wpisu na blogu. Instrukcje instalacji znajdują się na głównej stronie Pacu.
Użycie
Przykładowe użycie cognito__attack w celu próby tworzenia użytkownika i wszystkich wektorów podniesienia uprawnień dla określonej puli tożsamości i klienta 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:
Ten polecenie wyświetli wszystkie dostępne informacje o pulach użytkowników, klientach pul użytkowników, pulach tożsamości, użytkownikach itp. w bieżącym koncie AWS.
Cognito Scanner to narzędzie wiersza poleceń napisane w języku Python, które implementuje różne ataki na Cognito, w tym eskalację uprawnień.
Instalacja
Użycie
Aby uzyskać więcej informacji, sprawdź https://github.com/padok-team/cognito-scanner
Last updated