mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-29 06:03:26 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-services/aws-cognito-
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Informazioni di Base
|
||||
## Informazioni di base
|
||||
|
||||
Le identity pools svolgono un ruolo cruciale consentendo ai tuoi utenti di **acquisire credenziali temporanee**. Queste credenziali sono essenziali per accedere a vari servizi AWS, inclusi, ma non limitati a, Amazon S3 e DynamoDB. Una caratteristica notevole delle identity pools è il loro supporto sia per utenti ospiti anonimi che per una gamma di provider di identità per l'autenticazione degli utenti. I provider di identità supportati includono:
|
||||
|
||||
@@ -43,7 +43,7 @@ Inoltre, il servizio **cognito-sync** è il servizio che consente di **gestire e
|
||||
|
||||
### Tools for pentesting
|
||||
|
||||
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), il framework di sfruttamento AWS, ora include i moduli "cognito\_\_enum" e "cognito\_\_attack" che automatizzano l'enumerazione di tutte le risorse Cognito in un account e segnalano configurazioni deboli, attributi utente utilizzati per il controllo degli accessi, ecc., e automatizzano anche la creazione di utenti (incluso il supporto MFA) e l'escalation dei privilegi basata su attributi personalizzati modificabili, credenziali di pool di identità utilizzabili, ruoli assunti nei token id, ecc.
|
||||
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), il framework di sfruttamento AWS, ora include i moduli "cognito\_\_enum" e "cognito\_\_attack" che automatizzano l'enumerazione di tutte le risorse Cognito in un account e segnalano configurazioni deboli, attributi utente utilizzati per il controllo degli accessi, ecc., e automatizzano anche la creazione di utenti (incluso il supporto MFA) e l'escalation dei privilegi basata su attributi personalizzati modificabili, credenziali di pool di identità utilizzabili, ruoli assunibili nei token id, ecc.
|
||||
|
||||
Per una descrizione delle funzioni dei moduli vedere la parte 2 del [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Per le istruzioni di installazione vedere la pagina principale di [Pacu](https://github.com/RhinoSecurityLabs/pacu).
|
||||
|
||||
@@ -71,16 +71,16 @@ $ cognito-scanner --help
|
||||
```
|
||||
Per ulteriori informazioni controlla https://github.com/padok-team/cognito-scanner
|
||||
|
||||
## Accesso ai ruoli IAM
|
||||
## Accesso ai Ruoli IAM
|
||||
|
||||
### Non autenticato
|
||||
### Non Autenticato
|
||||
|
||||
L'unica cosa che un attaccante deve sapere per **ottenere credenziali AWS** in un'app Cognito come utente non autenticato è il **ID del pool di identità**, e questo **ID deve essere hardcoded** nell'**applicazione** web/mobile per poterlo utilizzare. Un ID appare così: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (non è bruteforceabile).
|
||||
L'unica cosa che un attaccante deve sapere per **ottenere credenziali AWS** in un'app Cognito come utente non autenticato è il **ID del Pool di Identità**, e questo **ID deve essere hardcoded** nell'**applicazione** web/mobile per poterlo utilizzare. Un ID appare così: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (non è bruteforceabile).
|
||||
|
||||
> [!TIP]
|
||||
> Il **ruolo IAM Cognito non autenticato creato tramite è chiamato** per impostazione predefinita `Cognito_<Nome del pool di identità>Unauth_Role`
|
||||
> Il **ruolo IAM Cognito non autenticato creato tramite è chiamato** per impostazione predefinita `Cognito_<Nome del Pool di Identità>Unauth_Role`
|
||||
|
||||
Se trovi un ID del pool di identità hardcoded e consente utenti non autenticati, puoi ottenere credenziali AWS con:
|
||||
Se trovi un ID di Pool di Identità hardcoded e consente utenti non autenticati, puoi ottenere credenziali AWS con:
|
||||
```python
|
||||
import requests
|
||||
|
||||
@@ -112,11 +112,11 @@ 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]
|
||||
> Nota che per impostazione predefinita un cognito **utente non autenticato NON PUÒ avere alcun permesso, anche se assegnato tramite una policy**. Controlla la sezione seguente.
|
||||
> Nota che per impostazione predefinita un cognito **utente NON PUÒ avere alcun permesso, anche se assegnato tramite una policy**. Controlla la sezione seguente.
|
||||
|
||||
### Flusso di autenticazione avanzato vs di base
|
||||
|
||||
La sezione precedente ha seguito il **flusso di autenticazione avanzato predefinito**. Questo flusso imposta una **policy di sessione** [**ristrettiva**](../../aws-basic-information/index.html#session-policies) per la sessione del ruolo IAM generato. Questa policy permetterà solo alla sessione di [**utilizzare i servizi di questo elenco**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (anche se il ruolo aveva accesso ad altri servizi).
|
||||
La sezione precedente ha seguito il **flusso di autenticazione avanzato predefinito**. Questo flusso imposta una **policy di sessione** [**restrittiva**](../../aws-basic-information/index.html#session-policies) per la sessione del ruolo IAM generato. Questa policy permetterà solo alla sessione di [**utilizzare i servizi di questo elenco**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (anche se il ruolo aveva accesso ad altri servizi).
|
||||
|
||||
Tuttavia, c'è un modo per bypassare questo, se il **pool di identità ha abilitato il "Flusso di base (classico)"**, l'utente sarà in grado di ottenere una sessione utilizzando quel flusso che **non avrà quella policy di sessione restrittiva**.
|
||||
```bash
|
||||
@@ -133,43 +133,57 @@ aws sts assume-role-with-web-identity --role-arn "arn:aws:iam::<acc_id>:role/<ro
|
||||
> [!WARNING]
|
||||
> Se ricevi questo **errore**, è perché il **flusso di base non è abilitato (predefinito)**
|
||||
|
||||
> `An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.`
|
||||
> `Si è verificato un errore (InvalidParameterException) durante la chiamata all'operazione GetOpenIdToken: Il flusso di base (classico) non è abilitato, si prega di utilizzare il flusso avanzato.`
|
||||
|
||||
Avendo un insieme di credenziali IAM, dovresti controllare [quali accessi hai](../../index.html#whoami) e provare a [escalare i privilegi](../../aws-privilege-escalation/index.html).
|
||||
|
||||
### Autenticato
|
||||
|
||||
> [!NOTE]
|
||||
> Ricorda che gli **utenti autenticati** probabilmente avranno **permessi diversi**, quindi se puoi **registrarti all'interno dell'app**, prova a farlo e ottieni le nuove credenziali.
|
||||
> Ricorda che gli **utenti autenticati** potrebbero avere **permessi diversi**, quindi se puoi **registrarti all'interno dell'app**, prova a farlo e ottieni le nuove credenziali.
|
||||
|
||||
Potrebbero esserci anche **ruoli** disponibili per gli **utenti autenticati che accedono al Pool di Identità**.
|
||||
|
||||
Per questo potresti aver bisogno di avere accesso al **fornitore di identità**. Se si tratta di un **Cognito User Pool**, forse puoi sfruttare il comportamento predefinito e **creare un nuovo utente tu stesso**.
|
||||
|
||||
> [!TIP]
|
||||
> Il **ruolo IAM Cognito autenticato creato tramite** si chiama per impostazione predefinita `Cognito_<Nome del Pool di Identità>Auth_Role`
|
||||
> Il **ruolo autenticato IAM Cognito creato tramite** si chiama per impostazione predefinita `Cognito_<Nome del Pool di Identità>Auth_Role`
|
||||
|
||||
Comunque, il **seguente esempio** presuppone che tu sia già loggato all'interno di un **Cognito User Pool** utilizzato per accedere al Pool di Identità (non dimenticare che potrebbero essere configurati anche altri tipi di fornitori di identità).
|
||||
|
||||
<pre class="language-bash"><code class="lang-bash">aws cognito-identity get-id \
|
||||
<pre class="language-bash"><code class="lang-bash">
|
||||
# Formato aggiornato
|
||||
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>"}'
|
||||
|
||||
# Ottieni l'identity_id dalla risposta del comando precedente
|
||||
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>"}'
|
||||
|
||||
|
||||
# Nell'IdToken puoi trovare i ruoli a cui un utente ha accesso grazie ai Gruppi del User Pool
|
||||
# Usa il --custom-role-arn per ottenere credenziali per un ruolo specifico
|
||||
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>
|
||||
|
||||
> **Formato deprecato** — questi potrebbero non funzionare più con l'attuale 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]
|
||||
> È possibile **configurare ruoli IAM diversi a seconda del fornitore di identità** con cui l'utente è loggato o anche semplicemente a seconda **dell'utente** (utilizzando le affermazioni). Pertanto, se hai accesso a diversi utenti tramite lo stesso o diversi fornitori, potrebbe **valere la pena effettuare il login e accedere ai ruoli IAM di tutti loro**.
|
||||
> È possibile **configurare ruoli IAM diversi a seconda del fornitore di identità** con cui l'utente è loggato o anche semplicemente a seconda **dell'utente** (utilizzando le dichiarazioni). Pertanto, se hai accesso a diversi utenti tramite lo stesso o diversi fornitori, potrebbe essere **utile accedere e accedere ai ruoli IAM di tutti loro**.
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user