Cognito User Pools
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Informations de base
Un pool dâutilisateurs est un annuaire dâutilisateurs dans Amazon Cognito. Avec un pool dâutilisateurs, vos utilisateurs peuvent se connecter Ă votre application web ou mobile via Amazon Cognito, ou se fĂ©dĂ©rer via un fournisseur dâidentitĂ© tiers (IdP). Que vos utilisateurs se connectent directement ou via un tiers, tous les membres du pool dâutilisateurs ont un profil dans lâannuaire auquel vous pouvez accĂ©der via un SDK.
Les pools dâutilisateurs fournissent :
- Des services dâinscription et de connexion.
- Une interface utilisateur web intégrée et personnalisable pour connecter les utilisateurs.
- Connexion sociale avec Facebook, Google, Login with Amazon, et Sign in with Apple, ainsi que via des fournisseurs dâidentitĂ© SAML et OIDC de votre pool dâutilisateurs.
- Gestion de lâannuaire des utilisateurs et des profils utilisateurs.
- FonctionnalitĂ©s de sĂ©curitĂ© telles que lâauthentification multi-facteurs (MFA), des vĂ©rifications pour des identifiants compromis, la protection contre la prise de contrĂŽle de compte, et la vĂ©rification par tĂ©lĂ©phone et par email.
- Flux de travail personnalisés et migration des utilisateurs via des déclencheurs AWS Lambda.
Le code source des applications contiendra gĂ©nĂ©ralement Ă©galement lâID du pool dâutilisateurs et lâID de lâapplication cliente, (et parfois le secret de lâapplication ?) qui sont nĂ©cessaires pour quâun utilisateur se connecte Ă un pool dâutilisateurs Cognito.
Attaques potentielles
- Inscription : Par dĂ©faut, un utilisateur peut sâinscrire lui-mĂȘme, il pourrait donc crĂ©er un utilisateur pour lui-mĂȘme.
- ĂnumĂ©ration des utilisateurs : La fonctionnalitĂ© dâinscription peut ĂȘtre utilisĂ©e pour trouver des noms dâutilisateur qui existent dĂ©jĂ . Cette information peut ĂȘtre utile pour une attaque par force brute.
- Force brute de connexion : Dans la section Authentification, vous avez tous les mĂ©thodes quâun utilisateur a pour se connecter, vous pourriez essayer de les forcer Ă trouver des identifiants valides.
Outils pour le pentesting
- Pacu, inclut maintenant les modules
cognito__enumetcognito__attackqui automatisent lâĂ©numĂ©ration de tous les actifs Cognito dans un compte et signalent les configurations faibles, les attributs des utilisateurs utilisĂ©s pour le contrĂŽle dâaccĂšs, etc., et automatisent Ă©galement la crĂ©ation dâutilisateurs (y compris le support MFA) et lâescalade de privilĂšges basĂ©e sur des attributs personnalisables modifiables, des identifiants de pool dâidentitĂ© utilisables, des rĂŽles assumables dans les jetons dâidentitĂ©, etc.
Pour une description des fonctions des modules, voir la partie 2 du blog. Pour des instructions dâinstallation, voir la page principale de Pacu.
# Run cognito__enum usage to gather all user pools, user pool clients, identity pools, users, etc. visible in the current AWS account
Pacu (new:test) > run cognito__enum
# cognito__attack usage to attempt user creation and all privesc vectors against a given identity pool and user pool client:
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
59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX
- Cognito Scanner est un outil CLI en python qui implĂ©mente diffĂ©rentes attaques sur Cognito, y compris la crĂ©ation de comptes non dĂ©sirĂ©s et lâoracle de compte. Consultez ce lien pour plus dâinfos.
# Install
pip install cognito-scanner
# Run
cognito-scanner --help
- CognitoAttributeEnum : Ce script permet dâĂ©numĂ©rer les attributs valides pour les utilisateurs.
python cognito-attribute-enu.py -client_id 16f1g98bfuj9i0g3f8be36kkrl
Inscription
User Pools permet par dĂ©faut de sâinscrire de nouveaux utilisateurs.
aws cognito-idp sign-up --client-id <client-id> \
--username <username> --password <password> \
--region <region> --no-sign-request
Si quelquâun peut sâinscrire
Vous pourriez trouver une erreur indiquant que vous devez fournir plus de dĂ©tails sur lâutilisateur :
An error occurred (InvalidParameterException) when calling the SignUp operation: Attributes did not conform to the schema: address: The attribute is required
Vous pouvez fournir les détails nécessaires avec un JSON tel que :
--user-attributes '[{"Name": "email", "Value": "carlospolop@gmail.com"}, {"Name":"gender", "Value": "M"}, {"Name": "address", "Value": "street"}, {"Name": "custom:custom_name", "Value":"supername&\"*$"}]'
Vous pouvez Ă©galement utiliser cette fonctionnalitĂ© pour Ă©numĂ©rer les utilisateurs existants. Voici le message dâerreur lorsquâun utilisateur existe dĂ©jĂ avec ce nom :
An error occurred (UsernameExistsException) when calling the SignUp operation: User already exists
Note
Notez dans la commande prĂ©cĂ©dente comment les attributs personnalisĂ©s commencent par âcustom:â.
Sachez Ă©galement que lors de lâenregistrement, vous ne pouvez pas crĂ©er de nouveaux attributs personnalisĂ©s pour lâutilisateur. Vous ne pouvez donner de valeur quâaux attributs par dĂ©faut (mĂȘme sâils ne sont pas requis) et aux attributs personnalisĂ©s spĂ©cifiĂ©s.
Ou juste pour tester si un identifiant client existe. Voici lâerreur si lâidentifiant client nâexiste pas :
An error occurred (ResourceNotFoundException) when calling the SignUp operation: User pool client 3ig612gjm56p1ljls1prq2miut does not exist.
Si seul lâadministrateur peut enregistrer des utilisateurs
Vous trouverez cette erreur et vous ne pourrez pas enregistrer ou énumérer des utilisateurs :
An error occurred (NotAuthorizedException) when calling the SignUp operation: SignUp is not permitted for this user pool
VĂ©rification de lâinscription
Cognito permet de vĂ©rifier un nouvel utilisateur en vĂ©rifiant son email ou son numĂ©ro de tĂ©lĂ©phone. Par consĂ©quent, lors de la crĂ©ation dâun utilisateur, vous devrez gĂ©nĂ©ralement fournir au moins le nom dâutilisateur et le mot de passe ainsi que lâemail et/ou le numĂ©ro de tĂ©lĂ©phone. Il suffit de dĂ©finir un que vous contrĂŽlez afin de recevoir le code pour vĂ©rifier votre compte dâutilisateur nouvellement créé comme ceci :
aws cognito-idp confirm-sign-up --client-id <cliet_id> \
--username aasdasd2 --confirmation-code <conf_code> \
--no-sign-request --region us-east-1
Warning
MĂȘme si il semble que vous pouvez utiliser le mĂȘme email et le mĂȘme numĂ©ro de tĂ©lĂ©phone, lorsque vous devez vĂ©rifier lâutilisateur créé, Cognito se plaindra dâutiliser les mĂȘmes informations et ne vous permettra pas de vĂ©rifier le compte.
Escalade de privilĂšges / Mise Ă jour des attributs
Par défaut, un utilisateur peut modifier la valeur de ses attributs avec quelque chose comme :
aws cognito-idp update-user-attributes \
--region us-east-1 --no-sign-request \
--user-attributes Name=address,Value=street \
--access-token <access token>
Privesc dâattributs personnalisĂ©s
Caution
Vous pourriez trouver des attributs personnalisés utilisés (comme
isAdmin), car par dĂ©faut vous pouvez changer les valeurs de vos propres attributs, vous pourriez ĂȘtre en mesure dâescalader les privilĂšges en changeant la valeur vous-mĂȘme !
Privesc de modification dâemail/nom dâutilisateur
Vous pouvez utiliser cela pour modifier lâemail et le numĂ©ro de tĂ©lĂ©phone dâun utilisateur, mais ensuite, mĂȘme si le compte reste vĂ©rifiĂ©, ces attributs sont dĂ©finis en statut non vĂ©rifiĂ© (vous devez les vĂ©rifier Ă nouveau).
Warning
Vous ne pourrez pas vous connecter avec lâemail ou le numĂ©ro de tĂ©lĂ©phone tant que vous ne les avez pas vĂ©rifiĂ©s, mais vous pourrez vous connecter avec le nom dâutilisateur.
Notez que mĂȘme si lâemail a Ă©tĂ© modifiĂ© et non vĂ©rifiĂ©, il apparaĂźtra dans le jeton ID Ă lâintĂ©rieur du champemail_verifiedsera faux, mais si lâapplication ne vĂ©rifie pas cela, vous pourriez usurper lâidentitĂ© dâautres utilisateurs.
De plus, notez que vous pouvez mettre nâimporte quoi dans le champ
nameen modifiant simplement lâattribut name. Si une application vĂ©rifie ce champ pour une raison quelconque au lieu de lâ
Quoi quâil en soit, si pour une raison quelconque vous avez changĂ© votre email par exemple pour un nouveau auquel vous pouvez accĂ©der, vous pouvez confirmer lâemail avec le code que vous avez reçu Ă cette adresse email :
aws cognito-idp verify-user-attribute \
--access-token <access_token> \
--attribute-name email --code <code> \
--region <region> --no-sign-request
Utilisez phone_number au lieu de email pour changer/vérifier un nouveau numéro de téléphone.
Note
Lâadministrateur pourrait Ă©galement activer lâoption de connexion avec un nom dâutilisateur prĂ©fĂ©rĂ© par lâutilisateur. Notez que vous ne pourrez pas changer cette valeur pour un nom dâutilisateur ou un preferred_username dĂ©jĂ utilisĂ© pour usurper lâidentitĂ© dâun autre utilisateur.
Récupérer/Changer le mot de passe
Il est possible de rĂ©cupĂ©rer un mot de passe en connaissant le nom dâutilisateur (ou lâemail ou le tĂ©lĂ©phone est acceptĂ©) et en y ayant accĂšs car un code y sera envoyĂ© :
aws cognito-idp forgot-password \
--client-id <client_id> \
--username <username/email/phone> --region <region>
Note
La rĂ©ponse du serveur sera toujours positive, comme si le nom dâutilisateur existait. Vous ne pouvez pas utiliser cette mĂ©thode pour Ă©numĂ©rer les utilisateurs
Avec le code, vous pouvez changer le mot de passe avec :
aws cognito-idp confirm-forgot-password \
--client-id <client_id> \
--username <username> \
--confirmation-code <conf_code> \
--password <pwd> --region <region>
Pour changer le mot de passe, vous devez connaßtre le mot de passe précédent :
aws cognito-idp change-password \
--previous-password <value> \
--proposed-password <value> \
--access-token <value>
Authentification
Un pool dâutilisateurs prend en charge diffĂ©rentes maniĂšres de sâauthentifier. Si vous avez un nom dâutilisateur et un mot de passe, il existe Ă©galement diffĂ©rentes mĂ©thodes prises en charge pour se connecter.
De plus, lorsquâun utilisateur est authentifiĂ© dans le Pool, 3 types de jetons sont fournis : le jeton ID, le jeton dâaccĂšs et le jeton dâactualisation.
- Jeton ID : Il contient des revendications sur lâidentitĂ© de lâutilisateur authentifiĂ©, telles que
name,emailetphone_number. Le jeton ID peut Ă©galement ĂȘtre utilisĂ© pour authentifier les utilisateurs auprĂšs de vos serveurs de ressources ou applications serveur. Vous devez vĂ©rifier la signature du jeton ID avant de pouvoir faire confiance Ă des revendications Ă lâintĂ©rieur du jeton ID si vous lâutilisez dans des applications externes. - Le jeton ID est le jeton qui contient les valeurs des attributs de lâutilisateur, mĂȘme les personnalisĂ©s.
- Jeton dâaccĂšs : Il contient des revendications sur lâutilisateur authentifiĂ©, une liste des groupes de lâutilisateur et une liste de portĂ©es. Le but du jeton dâaccĂšs est de autoriser les opĂ©rations API dans le contexte de lâutilisateur dans le pool dâutilisateurs. Par exemple, vous pouvez utiliser le jeton dâaccĂšs pour accorder Ă votre utilisateur lâaccĂšs pour ajouter, modifier ou supprimer des attributs dâutilisateur.
- Jeton dâactualisation : Avec les jetons dâactualisation, vous pouvez obtenir de nouveaux jetons ID et jetons dâaccĂšs pour lâutilisateur jusquâĂ ce que le jeton dâactualisation soit invalide. Par dĂ©faut, le jeton dâactualisation expire 30 jours aprĂšs que lâutilisateur de votre application se soit connectĂ© Ă votre pool dâutilisateurs. Lorsque vous crĂ©ez une application pour votre pool dâutilisateurs, vous pouvez dĂ©finir lâexpiration du jeton dâactualisation de lâapplication Ă nâimporte quelle valeur entre 60 minutes et 10 ans.
ADMIN_NO_SRP_AUTH & ADMIN_USER_PASSWORD_AUTH
Voici le flux dâauthentification cĂŽtĂ© serveur :
- Lâapplication cĂŽtĂ© serveur appelle lâopĂ©ration API
AdminInitiateAuth(au lieu deInitiateAuth). Cette opĂ©ration nĂ©cessite des identifiants AWS avec des autorisations incluantcognito-idp:AdminInitiateAuthetcognito-idp:AdminRespondToAuthChallenge. LâopĂ©ration renvoie les paramĂštres dâauthentification requis. - AprĂšs que lâapplication cĂŽtĂ© serveur a les paramĂštres dâauthentification, elle appelle lâopĂ©ration API
AdminRespondToAuthChallenge. LâopĂ©ration APIAdminRespondToAuthChallengene rĂ©ussit que si vous fournissez des identifiants AWS.
Cette mĂ©thode nâest PAS activĂ©e par dĂ©faut.
Pour se connecter, vous devez connaĂźtre :
- lâidentifiant du pool dâutilisateurs
- lâidentifiant du client
- le nom dâutilisateur
- le mot de passe
- le secret du client (uniquement si lâapplication est configurĂ©e pour utiliser un secret)
Note
Afin de pouvoir se connecter avec cette méthode, cette application doit autoriser la connexion avec
ALLOW_ADMIN_USER_PASSWORD_AUTH.
De plus, pour effectuer cette action, vous avez besoin dâidentifiants avec les autorisationscognito-idp:AdminInitiateAuthetcognito-idp:AdminRespondToAuthChallenge
aws cognito-idp admin-initiate-auth \
--client-id <client-id> \
--auth-flow ADMIN_USER_PASSWORD_AUTH \
--region <region> \
--auth-parameters 'USERNAME=<username>,PASSWORD=<password>,SECRET_HASH=<hash_if_needed>'
--user-pool-id "<pool-id>"
# Check the python code to learn how to generate the hsecret_hash
Code pour se connecter
```python import boto3 import botocore import hmac import hashlib import base64client_id = â
boto_client = boto3.client(âcognito-idpâ, region_name=âus-east-1â)
def get_secret_hash(username, client_id, client_secret): key = bytes(client_secret, âutf-8â) message = bytes(fâ{username}{client_id}â, âutf-8â) return base64.b64encode(hmac.new(key, message, digestmod=hashlib.sha256).digest()).decode()
If the Client App isnât configured to use a secret
just delete the line setting the SECRET_HASH
def login_user(username_or_alias, password, client_id, client_secret, user_pool_id): try: return boto_client.admin_initiate_auth( UserPoolId=user_pool_id, ClientId=client_id, AuthFlow=âADMIN_USER_PASSWORD_AUTHâ, AuthParameters={ âUSERNAMEâ: username_or_alias, âPASSWORDâ: password, âSECRET_HASHâ: get_secret_hash(username_or_alias, client_id, client_secret) } ) except botocore.exceptions.ClientError as e: return e.response
print(login_user(username, password, client_id, client_secret, user_pool_id))
</details>
### USER_PASSWORD_AUTH
Cette méthode est un autre flux simple et **traditionnel d'authentification utilisateur et mot de passe**. Il est recommandé de **migrer une méthode d'authentification traditionnelle** vers **Cognito** et **recommandé** de **la désactiver** ensuite et **d'utiliser** la méthode **ALLOW_USER_SRP_AUTH** à la place (car celle-ci n'envoie jamais le mot de passe sur le réseau).\
Cette **méthode n'est PAS activée** par défaut.
La principale **différence** avec la **méthode d'authentification précédente** dans le code est que vous **n'avez pas besoin de connaßtre l'ID du pool d'utilisateurs** et que vous **n'avez pas besoin de permissions supplémentaires** dans le pool d'utilisateurs Cognito.
Pour **se connecter**, vous **devez** connaĂźtre :
- client id
- nom d'utilisateur
- mot de passe
- secret client (uniquement si l'application est configurée pour utiliser un secret)
> [!NOTE]
> Afin de **pouvoir se connecter avec cette méthode**, cette application doit permettre de se connecter avec ALLOW_USER_PASSWORD_AUTH.
```python
aws cognito-idp initiate-auth --client-id <client-id> \
--auth-flow USER_PASSWORD_AUTH --region <region> \
--auth-parameters 'USERNAME=<username>,PASSWORD=<password>,SECRET_HASH=<hash_if_needed>'
# Check the python code to learn how to generate the secret_hash
Code Python pour se connecter
```python import boto3 import botocore import hmac import hashlib import base64client_id = â
boto_client = boto3.client(âcognito-idpâ, region_name=âus-east-1â)
def get_secret_hash(username, client_id, client_secret): key = bytes(client_secret, âutf-8â) message = bytes(fâ{username}{client_id}â, âutf-8â) return base64.b64encode(hmac.new(key, message, digestmod=hashlib.sha256).digest()).decode()
If the Client App isnât configured to use a secret
just delete the line setting the SECRET_HASH
def login_user(username_or_alias, password, client_id, client_secret, user_pool_id): try: return boto_client.initiate_auth( ClientId=client_id, AuthFlow=âADMIN_USER_PASSWORD_AUTHâ, AuthParameters={ âUSERNAMEâ: username_or_alias, âPASSWORDâ: password, âSECRET_HASHâ: get_secret_hash(username_or_alias, client_id, client_secret) } ) except botocore.exceptions.ClientError as e: return e.response
print(login_user(username, password, client_id, client_secret, user_pool_id))
</details>
### USER_SRP_AUTH
Ce scĂ©nario est similaire au prĂ©cĂ©dent mais **au lieu d'envoyer le mot de passe** Ă travers le rĂ©seau pour se connecter, une **authentification par dĂ©fi est effectuĂ©e** (donc pas de mot de passe naviguant mĂȘme cryptĂ© Ă travers le net).\
Cette **méthode est activée** par défaut.
Pour **se connecter**, vous **devez** connaĂźtre :
- l'identifiant du pool d'utilisateurs
- l'identifiant du client
- le nom d'utilisateur
- le mot de passe
- le secret du client (uniquement si l'application est configurée pour utiliser un secret)
<details>
<summary>Code to login</summary>
```python
from warrant.aws_srp import AWSSRP
import os
USERNAME='xxx'
PASSWORD='yyy'
POOL_ID='us-east-1_zzzzz'
CLIENT_ID = '12xxxxxxxxxxxxxxxxxxxxxxx'
CLIENT_SECRET = 'secreeeeet'
os.environ["AWS_DEFAULT_REGION"] = "<region>"
aws = AWSSRP(username=USERNAME, password=PASSWORD, pool_id=POOL_ID,
client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
tokens = aws.authenticate_user()
id_token = tokens['AuthenticationResult']['IdToken']
refresh_token = tokens['AuthenticationResult']['RefreshToken']
access_token = tokens['AuthenticationResult']['AccessToken']
token_type = tokens['AuthenticationResult']['TokenType']
REFRESH_TOKEN_AUTH & REFRESH_TOKEN
Cette mĂ©thode sera toujours valide (elle ne peut pas ĂȘtre dĂ©sactivĂ©e) mais vous devez avoir un jeton de rafraĂźchissement valide.
aws cognito-idp initiate-auth \
--client-id 3ig6h5gjm56p1ljls1prq2miut \
--auth-flow REFRESH_TOKEN_AUTH \
--region us-east-1 \
--auth-parameters 'REFRESH_TOKEN=<token>'
Code pour rafraĂźchir
```python import boto3 import botocore import hmac import hashlib import base64client_id = â
boto_client = boto3.client(âcognito-idpâ, region_name=â
def refresh(client_id, refresh_token): try: return boto_client.initiate_auth( ClientId=client_id, AuthFlow=âREFRESH_TOKEN_AUTHâ, AuthParameters={ âREFRESH_TOKENâ: refresh_token } ) except botocore.exceptions.ClientError as e: return e.response
print(refresh(client_id, token))
</details>
### CUSTOM_AUTH
Dans ce cas, l'**authentification** va ĂȘtre effectuĂ©e par l'**exĂ©cution d'une fonction lambda**.
## Sécurité supplémentaire
### Sécurité avancée
Par dĂ©faut, c'est dĂ©sactivĂ©, mais si activĂ©, Cognito pourrait ĂȘtre capable de **dĂ©tecter les prises de contrĂŽle de compte**. Pour minimiser la probabilitĂ©, vous devriez vous connecter depuis un **rĂ©seau Ă l'intĂ©rieur de la mĂȘme ville, en utilisant le mĂȘme agent utilisateur** (et l'IP si c'est possible)**.**
### **MFA Se souvenir de l'appareil**
Si l'utilisateur se connecte depuis le mĂȘme appareil, la MFA pourrait ĂȘtre contournĂ©e, essayez donc de vous connecter depuis le mĂȘme navigateur avec les mĂȘmes mĂ©tadonnĂ©es (IP ?) pour essayer de contourner la protection MFA.
## RĂŽles IAM des groupes de User Pool
Il est possible d'ajouter des **utilisateurs aux groupes de User Pool** qui sont liés à un **rÎle IAM**.\
De plus, des **utilisateurs** peuvent ĂȘtre assignĂ©s Ă **plus d'un groupe avec diffĂ©rents rĂŽles IAM** attachĂ©s.
Notez que mĂȘme si un groupe est Ă l'intĂ©rieur d'un groupe avec un rĂŽle IAM attachĂ©, pour pouvoir accĂ©der aux identifiants IAM de ce groupe, il est nĂ©cessaire que le **User Pool soit approuvĂ© par un Identity Pool** (et connaĂźtre les dĂ©tails de cet Identity Pool).
Un autre requis pour obtenir le **rĂŽle IAM indiquĂ© dans l'IdToken** lorsqu'un utilisateur est authentifiĂ© dans le User Pool (`aws cognito-idp initiate-auth...`) est que le **fournisseur d'authentification Identity Provider** doit indiquer que le **rĂŽle doit ĂȘtre sĂ©lectionnĂ© Ă partir du token.**
<figure><img src="../../../../images/image (250).png" alt=""><figcaption></figcaption></figure>
Les **rÎles** auxquels un utilisateur a accÚs sont **dans le `IdToken`**, et un utilisateur peut **sélectionner quel rÎle il aimerait obtenir des identifiants** avec le **`--custom-role-arn`** de `aws cognito-identity get-credentials-for-identity`.\
Cependant, si l'**option par défaut** est celle **configurée** (`use default role`), et que vous essayez d'accéder à un rÎle à partir de l'IdToken, vous obtiendrez une **erreur** (c'est pourquoi la configuration précédente est nécessaire) :
An error occurred (InvalidParameterException) when calling the GetCredentialsForIdentity operation: Only SAML providers and providers with RoleMappings support custom role ARN.
> [!WARNING]
> Notez que le rĂŽle attribuĂ© Ă un **User Pool Group** doit ĂȘtre **accessible par le fournisseur d'identitĂ©** qui **fait confiance au User Pool** (car les **informations d'identification de session du rĂŽle IAM vont ĂȘtre obtenues Ă partir de celui-ci**).
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "us-east-1:2361092e-9db6-a876-1027-10387c9de439"
},
"ForAnyValue:StringLike": {
"cognito-identity.amazonaws.com:amr": "authenticated"
}
}
}
]
}js
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

