mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-01 15:35:51 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-services/aws-cognito-
This commit is contained in:
@@ -4,10 +4,10 @@
|
||||
|
||||
## Información Básica
|
||||
|
||||
Los grupos de identidades desempeñan un papel crucial al permitir que tus usuarios **adquieran credenciales temporales**. Estas credenciales son esenciales para acceder a varios servicios de AWS, incluyendo, entre otros, Amazon S3 y DynamoDB. Una característica notable de los grupos de identidades es su soporte tanto para usuarios anónimos como para una variedad de proveedores de identidad para la autenticación de usuarios. Los proveedores de identidad compatibles incluyen:
|
||||
Los grupos de identidades desempeñan un papel crucial al permitir que sus usuarios **adquieran credenciales temporales**. Estas credenciales son esenciales para acceder a varios servicios de AWS, incluyendo, pero no limitado a, Amazon S3 y DynamoDB. Una característica notable de los grupos de identidades es su soporte tanto para usuarios anónimos como para una variedad de proveedores de identidad para la autenticación de usuarios. Los proveedores de identidad compatibles incluyen:
|
||||
|
||||
- Grupos de usuarios de Amazon Cognito
|
||||
- Opciones de inicio de sesión social como Facebook, Google, Login with Amazon y Sign in with Apple
|
||||
- Opciones de inicio de sesión social como Facebook, Google, Login con Amazon y Sign in with Apple
|
||||
- Proveedores compatibles con OpenID Connect (OIDC)
|
||||
- Proveedores de identidad SAML (Security Assertion Markup Language)
|
||||
- Identidades autenticadas por desarrolladores
|
||||
@@ -59,7 +59,7 @@ Ejemplo de uso de cognito\_\_enum para recopilar todos los grupos de usuarios, c
|
||||
```bash
|
||||
Pacu (new:test) > run cognito__enum
|
||||
```
|
||||
- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) es una herramienta CLI en python que implementa diferentes ataques en Cognito, incluyendo la creación no deseada de cuentas y la escalación de grupos de identidades.
|
||||
- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) es una herramienta CLI en python que implementa diferentes ataques a Cognito, incluyendo la creación no deseada de cuentas y la escalación de grupos de identidades.
|
||||
|
||||
#### Instalación
|
||||
```bash
|
||||
@@ -71,16 +71,16 @@ $ cognito-scanner --help
|
||||
```
|
||||
Para más información, consulta https://github.com/padok-team/cognito-scanner
|
||||
|
||||
## Accediendo a Roles de IAM
|
||||
## Acceso a Roles de IAM
|
||||
|
||||
### No autenticado
|
||||
|
||||
Lo único que un atacante necesita saber para **obtener credenciales de AWS** en una aplicación de Cognito como usuario no autenticado es el **ID del Pool de Identidad**, y este **ID debe estar codificado** en la **aplicación** web/móvil para que se use. Un ID se ve así: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (no se puede forzar por fuerza bruta).
|
||||
|
||||
> [!TIP]
|
||||
> El **rol no autenticado de IAM Cognito creado a través de** se llama por defecto `Cognito_<Nombre del Pool de Identidad>Unauth_Role`
|
||||
> El **rol de Cognito no autenticado creado a través de** se llama por defecto `Cognito_<Nombre del Pool de Identidad>Unauth_Role`
|
||||
|
||||
Si encuentras un ID de Pool de Identidad codificado y permite usuarios no autenticados, puedes obtener credenciales de AWS con:
|
||||
Si encuentras un ID de Pools de Identidad codificado y permite usuarios no autenticados, puedes obtener credenciales de AWS con:
|
||||
```python
|
||||
import requests
|
||||
|
||||
@@ -106,17 +106,17 @@ r = requests.post(url, json=params, headers=headers)
|
||||
|
||||
print(r.json())
|
||||
```
|
||||
O podrías usar los siguientes **aws cli commands**:
|
||||
O también podrías usar los siguientes **aws cli commands**:
|
||||
```bash
|
||||
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]
|
||||
> Tenga en cuenta que, por defecto, un **usuario no autenticado de cognito NO PUEDE tener ningún permiso, incluso si se le asignó a través de una política**. Consulte la siguiente sección.
|
||||
> Tenga en cuenta que, por defecto, un usuario cognito **no autenticado NO PUEDE tener ningún permiso, incluso si se le asignó a través de una política**. Consulte la siguiente sección.
|
||||
|
||||
### Flujo de autenticación mejorado vs básico
|
||||
|
||||
La sección anterior siguió el **flujo de autenticación mejorado por defecto**. Este flujo establece una **política de sesión** [**restrictiva**](../../aws-basic-information/#session-policies) para la sesión del rol IAM generada. Esta política solo permitirá que la sesión [**utilice los servicios de esta lista**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (incluso si el rol tenía acceso a otros servicios).
|
||||
La sección anterior siguió el **flujo de autenticación mejorado por defecto**. Este flujo establece una **política de sesión** [**restrictiva**](../../aws-basic-information/index.html#session-policies) para la sesión del rol IAM generada. Esta política solo permitirá que la sesión [**utilice los servicios de esta lista**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (incluso si el rol tenía acceso a otros servicios).
|
||||
|
||||
Sin embargo, hay una manera de eludir esto; si el **grupo de identidades tiene habilitado el "Flujo Básico (Clásico)"**, el usuario podrá obtener una sesión utilizando ese flujo que **no tendrá esa política de sesión restrictiva**.
|
||||
```bash
|
||||
@@ -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.`
|
||||
|
||||
Teniendo un conjunto de credenciales de IAM, deberías verificar [qué acceso tienes](../../#whoami) y tratar de [escalar privilegios](../../aws-privilege-escalation/).
|
||||
Teniendo un conjunto de credenciales de IAM, deberías verificar [qué acceso tienes](../../index.html#whoami) y tratar de [escalar privilegios](../../aws-privilege-escalation/index.html).
|
||||
|
||||
### Autenticado
|
||||
|
||||
@@ -144,7 +144,7 @@ Teniendo un conjunto de credenciales de IAM, deberías verificar [qué acceso ti
|
||||
|
||||
También podría haber **roles** disponibles para **usuarios autenticados que acceden al Identity Pool**.
|
||||
|
||||
Para esto, podrías necesitar acceso al **proveedor de identidad**. Si ese es un **Cognito User Pool**, tal vez puedas abusar del comportamiento predeterminado y **crear un nuevo usuario tú mismo**.
|
||||
Para esto, podrías necesitar tener acceso al **proveedor de identidad**. Si ese es un **Cognito User Pool**, tal vez puedas abusar del comportamiento predeterminado y **crear un nuevo usuario tú mismo**.
|
||||
|
||||
> [!TIP]
|
||||
> El **rol autenticado de IAM Cognito creado a través de** se llama por defecto `Cognito_<Identity Pool name>Auth_Role`
|
||||
@@ -152,21 +152,21 @@ Para esto, podrías necesitar acceso al **proveedor de identidad**. Si ese es un
|
||||
De todos modos, el **siguiente ejemplo** espera que ya hayas iniciado sesión dentro de un **Cognito User Pool** utilizado para acceder al Identity Pool (no olvides que otros tipos de proveedores de identidad también podrían estar configurados).
|
||||
|
||||
<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/<YOUR_USER_POOL_ID>=<ID_TOKEN>
|
||||
--identity-pool-id <identity_pool_id> \
|
||||
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
|
||||
|
||||
# Obtén el identity_id de la respuesta del comando anterior
|
||||
aws cognito-identity get-credentials-for-identity \
|
||||
--identity-id <identity_id> \
|
||||
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
|
||||
--identity-id <identity_id> \
|
||||
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
|
||||
|
||||
|
||||
# En el IdToken puedes encontrar roles a los que un usuario tiene acceso debido a los Grupos del User Pool
|
||||
# Usa el --custom-role-arn para obtener credenciales para un rol específico
|
||||
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>
|
||||
--identity-id <identity_id> \
|
||||
<strong> --custom-role-arn <role_arn> \
|
||||
</strong> --logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
|
||||
</code></pre>
|
||||
|
||||
> [!WARNING]
|
||||
|
||||
Reference in New Issue
Block a user