mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-29 07:00:29 -07:00
Translated ['src/pentesting-cloud/aws-security/aws-services/aws-cognito-
This commit is contained in:
+35
-21
@@ -4,7 +4,7 @@
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
Identity pools 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ą identity pools 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ą:
|
||||
Identity pools 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. Ciekawą cechą identity pools jest ich wsparcie zarówno dla anonimowych użytkowników gości, jak i dla różnych dostawców tożsamości do uwierzytelniania użytkowników. Obsługiwane dostawcy tożsamości to:
|
||||
|
||||
- Amazon Cognito user pools
|
||||
- Opcje logowania społecznościowego, takie jak Facebook, Google, Login with Amazon i Sign in with Apple
|
||||
@@ -35,15 +35,15 @@ print(response)
|
||||
```
|
||||
### Cognito Sync
|
||||
|
||||
Aby wygenerować sesje Identity Pool, najpierw musisz **wygenerować Identity ID**. Ten Identity ID to **identyfikacja sesji tego użytkownika**. Te identyfikacje mogą mieć do 20 zbiorów danych, które mogą przechowywać do 1MB par klucz-wartość.
|
||||
Aby wygenerować sesje Identity Pool, najpierw musisz **wygenerować Identity ID**. To Identity ID jest **identyfikacją sesji tego użytkownika**. Te identyfikacje mogą mieć do 20 zestawów danych, które mogą przechowywać do 1 MB 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 zbiorach danych, wysyłając informacje w strumieniach i wiadomościach SNS...).
|
||||
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...).
|
||||
|
||||
### Tools for pentesting
|
||||
|
||||
- [Pacu](https://github.com/RhinoSecurityLabs/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) 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.
|
||||
- [Pacu](https://github.com/RhinoSecurityLabs/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) oraz 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](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Aby uzyskać instrukcje instalacji, zobacz główną stronę [Pacu](https://github.com/RhinoSecurityLabs/pacu).
|
||||
|
||||
@@ -80,7 +80,7 @@ Jedyną rzeczą, którą atakujący musi wiedzieć, aby **uzyskać dane uwierzyt
|
||||
> [!TIP]
|
||||
> **Nieautoryzowana rola IAM Cognito utworzona przez** jest domyślnie nazywana `Cognito_<Nazwa puli tożsamości>Unauth_Role`
|
||||
|
||||
Jeśli znajdziesz ID puli tożsamości zakodowane na sztywno i pozwala ono na dostęp dla nieautoryzowanych użytkowników, możesz uzyskać dane uwierzytelniające AWS za pomocą:
|
||||
Jeśli znajdziesz ID puli tożsamości zakodowane na sztywno i pozwala na dostęp dla nieautoryzowanych użytkowników, możesz uzyskać dane uwierzytelniające AWS za pomocą:
|
||||
```python
|
||||
import requests
|
||||
|
||||
@@ -112,9 +112,9 @@ aws cognito-identity get-id --identity-pool-id <identity_pool_id> --no-sign
|
||||
aws cognito-identity get-credentials-for-identity --identity-id <identity_id> --no-sign
|
||||
```
|
||||
> [!WARNING]
|
||||
> Zauważ, że domyślnie nieautoryzowany użytkownik cognito **NIE MOŻE mieć żadnych uprawnień, nawet jeśli zostały one przypisane za pomocą polityki**. Sprawdź następną sekcję.
|
||||
> Zauważ, że domyślnie nieautoryzowany użytkownik cognito **NIE MOŻE mieć żadnych uprawnień, nawet jeśli zostały one przypisane za pomocą polityki**. Sprawdź następującą sekcję.
|
||||
|
||||
### Ulepszony vs Podstawowy przepływ uwierzytelniania
|
||||
### Enhanced vs Basic Authentication flow
|
||||
|
||||
Poprzednia sekcja dotyczyła **domyślnego ulepszonego przepływu uwierzytelniania**. Ten przepływ ustawia **ograniczającą** [**politykę sesji**](../../aws-basic-information/index.html#session-policies) dla wygenerowanej sesji roli IAM. Ta polityka pozwoli tylko na [**korzystanie z usług z tej listy**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (nawet jeśli rola miała dostęp do innych usług).
|
||||
|
||||
@@ -133,7 +133,7 @@ aws sts assume-role-with-web-identity --role-arn "arn:aws:iam::<acc_id>:role/<ro
|
||||
> [!WARNING]
|
||||
> Jeśli otrzymasz ten **błąd**, to dlatego, że **podstawowy przepływ nie jest włączony (domyślnie)**
|
||||
|
||||
> `An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.`
|
||||
> `Wystąpił błąd (InvalidParameterException) podczas wywoływania operacji GetOpenIdToken: Podstawowy (klasyczny) przepływ nie jest włączony, proszę użyć ulepszonego przepływu.`
|
||||
|
||||
Mając zestaw poświadczeń IAM, powinieneś sprawdzić [jakie masz uprawnienia](../../index.html#whoami) i spróbować [eskalować uprawnienia](../../aws-privilege-escalation/index.html).
|
||||
|
||||
@@ -142,31 +142,45 @@ Mając zestaw poświadczeń IAM, powinieneś sprawdzić [jakie masz uprawnienia]
|
||||
> [!NOTE]
|
||||
> 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**.
|
||||
Mogą być również dostępne **role** dla **uwierzytelnionych użytkowników uzyskujących dostęp do puli tożsamości**.
|
||||
|
||||
W tym celu możesz potrzebować dostępu do **dostawcy tożsamości**. Jeśli to jest **Cognito User Pool**, być może możesz wykorzystać domyślne zachowanie i **samodzielnie utworzyć nowego użytkownika**.
|
||||
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**.
|
||||
|
||||
> [!TIP]
|
||||
> **IAM Cognito uwierzytelniona rola utworzona przez** jest domyślnie nazywana `Cognito_<Nazwa Identity Pool>Auth_Role`
|
||||
> **Rola uwierzytelniona IAM Cognito utworzona przez** jest domyślnie nazywana `Cognito_<Nazwa Puli Tożsamości>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).
|
||||
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 Puli Tożsamości (nie zapomnij, że inne typy dostawców tożsamości mogą być również skonfigurowane).
|
||||
|
||||
<pre class="language-bash"><code class="lang-bash">aws cognito-identity get-id \
|
||||
<pre class="language-bash"><code class="lang-bash">
|
||||
# Zaktualizowany format
|
||||
aws cognito-identity get-id \
|
||||
--identity-pool-id <identity_pool_id> \
|
||||
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
|
||||
--logins '{"cognito-idp.<region>.amazonaws.com/<user_pool_id>": "<ID_TOKEN>"}'
|
||||
|
||||
# Uzyskaj identity_id z odpowiedzi poprzedniego polecenia
|
||||
aws cognito-identity get-credentials-for-identity \
|
||||
--identity-id <identity_id> \
|
||||
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
|
||||
--logins '{"cognito-idp.<region>.amazonaws.com/<user_pool_id>": "<ID_TOKEN>"}'
|
||||
|
||||
|
||||
# W IdToken możesz znaleźć role, do których użytkownik ma dostęp dzięki grupom User Pool
|
||||
# Użyj --custom-role-arn, aby uzyskać poświadczenia do konkretnej roli
|
||||
aws cognito-identity get-credentials-for-identity \
|
||||
--identity-id <identity_id> \
|
||||
<strong> --custom-role-arn <role_arn> \
|
||||
</strong> --logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
|
||||
--custom-role-arn <role_arn> \
|
||||
--logins '{"cognito-idp.<region>.amazonaws.com/<user_pool_id>": "<ID_TOKEN>"}'
|
||||
</code></pre>
|
||||
|
||||
> **Przestarzały format** — te mogą już nie działać z aktualnym AWS CLI:
|
||||
<pre class="language-bash"><code class="lang-bash">
|
||||
aws cognito-identity get-id \
|
||||
--identity-pool-id <identity_pool_id> \
|
||||
--logins cognito-idp.<region>.amazonaws.com/<user_pool_id>=<ID_TOKEN>
|
||||
|
||||
aws cognito-identity get-credentials-for-identity \
|
||||
--identity-id <identity_id> \
|
||||
--logins cognito-idp.<region>.amazonaws.com/<user_pool_id>=<ID_TOKEN>
|
||||
|
||||
aws cognito-identity get-credentials-for-identity \
|
||||
--identity-id <identity_id> \
|
||||
--custom-role-arn <role_arn> \
|
||||
--logins cognito-idp.<region>.amazonaws.com/<user_pool_id>=<ID_TOKEN>
|
||||
</code></pre>
|
||||
|
||||
> [!WARNING]
|
||||
|
||||
Reference in New Issue
Block a user