mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-31 23:15:48 -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]
|
||||
|
||||
@@ -19,7 +19,7 @@ Las Máquinas Virtuales (VMs) de Azure son servidores **basados en la nube flexi
|
||||
- **Zonas de Disponibilidad**: Las zonas de disponibilidad son grupos distintos de centros de datos dentro de una región específica de Azure que están físicamente separados para minimizar el riesgo de que múltiples zonas se vean afectadas por cortes locales o desastres.
|
||||
- **Tipo de Seguridad**:
|
||||
- **Seguridad Estándar**: Este es el tipo de seguridad predeterminado que no requiere ninguna configuración específica.
|
||||
- **Lanzamiento Confiable**: Este tipo de seguridad mejora la protección contra kits de arranque y malware a nivel de kernel utilizando Secure Boot y Módulo de Plataforma Confiable Virtual (vTPM).
|
||||
- **Lanzamiento Confiable**: Este tipo de seguridad mejora la protección contra kits de arranque y malware a nivel de kernel utilizando Secure Boot y Módulo de Plataforma de Confianza Virtual (vTPM).
|
||||
- **VMs Confidenciales**: Además de un lanzamiento confiable, ofrece aislamiento basado en hardware entre la VM, el hipervisor y la gestión del host, mejora la encriptación del disco y [**más**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**.**
|
||||
- **Autenticación**: Por defecto, se genera una nueva **clave SSH**, aunque es posible usar una clave pública o usar una clave anterior y el nombre de usuario por defecto es **azureuser**. También es posible configurar el uso de una **contraseña.**
|
||||
- **Encriptación de disco de VM:** El disco está encriptado en reposo por defecto utilizando una clave gestionada por la plataforma.
|
||||
@@ -142,17 +142,17 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
## Azure Site Recovery
|
||||
## Recuperación de Sitios de Azure
|
||||
|
||||
De los [**docs**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview): Site Recovery ayuda a garantizar la continuidad del negocio al mantener las aplicaciones y cargas de trabajo en funcionamiento durante las interrupciones. Site Recovery **replica cargas de trabajo** que se ejecutan en máquinas físicas y virtuales (VMs) desde un sitio principal a una ubicación secundaria. Cuando ocurre una interrupción en su sitio principal, se cambia a una ubicación secundaria y se accede a las aplicaciones desde allí. Después de que la ubicación principal vuelva a funcionar, puede regresar a ella.
|
||||
De los [**docs**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview): La Recuperación de Sitios ayuda a garantizar la continuidad del negocio manteniendo las aplicaciones y cargas de trabajo en funcionamiento durante las interrupciones. La Recuperación de Sitios **replica cargas de trabajo** que se ejecutan en máquinas físicas y virtuales (VMs) desde un sitio principal a una ubicación secundaria. Cuando ocurre una interrupción en su sitio principal, se cambia a una ubicación secundaria y se accede a las aplicaciones desde allí. Después de que la ubicación principal vuelva a funcionar, puede regresar a ella.
|
||||
|
||||
## Azure Bastion
|
||||
## Bastión de Azure
|
||||
|
||||
Azure Bastion permite el acceso seguro y sin problemas al **Remote Desktop Protocol (RDP)** y **Secure Shell (SSH)** a sus máquinas virtuales (VMs) directamente a través del Portal de Azure o mediante un jump box. Al **eliminar la necesidad de direcciones IP públicas** en sus VMs.
|
||||
El Bastión de Azure permite el acceso seguro y sin problemas al **Protocolo de Escritorio Remoto (RDP)** y **Shell Seguro (SSH)** a sus máquinas virtuales (VMs) directamente a través del Portal de Azure o mediante un jump box. Al **eliminar la necesidad de direcciones IP públicas** en sus VMs.
|
||||
|
||||
El Bastion despliega una subred llamada **`AzureBastionSubnet`** con una máscara de red `/26` en la VNet en la que necesita trabajar. Luego, permite **conectarse a VMs internas a través del navegador** utilizando `RDP` y `SSH`, evitando exponer puertos de las VMs a Internet. También puede funcionar como un **jump host**.
|
||||
El Bastión despliega una subred llamada **`AzureBastionSubnet`** con una máscara de red `/26` en la VNet en la que necesita trabajar. Luego, permite **conectarse a VMs internas a través del navegador** utilizando `RDP` y `SSH`, evitando exponer puertos de las VMs a Internet. También puede funcionar como un **host de salto**.
|
||||
|
||||
Para listar todos los Hosts de Azure Bastion en su suscripción y conectarse a las VMs a través de ellos, puede usar los siguientes comandos:
|
||||
Para listar todos los Hosts de Bastión de Azure en su suscripción y conectarse a las VMs a través de ellos, puede usar los siguientes comandos:
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="az cli"}}
|
||||
@@ -793,7 +793,7 @@ Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt
|
||||
## Acceso No Autenticado
|
||||
|
||||
{{#ref}}
|
||||
../../az-unauthenticated-enum-and-initial-entry/az-vms-unath.md
|
||||
../../az-unauthenticated-enum-and-initial-entry/az-vms-unauth.md
|
||||
{{#endref}}
|
||||
|
||||
## Post Explotación
|
||||
|
||||
Reference in New Issue
Block a user