AWS - IAM Post Exploitation

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 l'accĂšs IAM :

AWS - IAM, Identity Center & SSO Enum

ProblĂšme du Confused Deputy

Si vous autorisez un compte externe (A) à accéder à un rÎle dans votre compte, vous aurez probablement 0 visibilité sur qui peut exactement accéder à ce compte externe. C'est un problÚme, car si un autre compte externe (B) peut accéder au compte externe (A), il est possible que B puisse également accéder à votre compte.

Donc, lorsque vous autorisez un compte externe Ă  accĂ©der Ă  un rĂŽle dans votre compte, il est possible de spĂ©cifier un ExternalId. Il s'agit d'une chaĂźne "secrĂšte" que le compte externe (A) doit spĂ©cifier afin de assumer le rĂŽle dans votre organisation. Comme le compte externe B ne connaĂźtra pas cette chaĂźne, mĂȘme s'il a accĂšs Ă  A, il ne pourra pas accĂ©der Ă  votre rĂŽle.

Cependant, notez que ce ExternalId "secret" est n'est pas un secret, quiconque peut lire la IAM assume role policy pourra le voir. Mais tant que le compte externe A le connaĂźt, et que le compte externe B ne le connaĂźt pas, cela empĂȘche B d'abuser de A pour accĂ©der Ă  votre rĂŽle.

Exemple:

json
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"AWS": "Example Corp's AWS Account ID"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "12345"
}
}
}
}

warning

Pour qu'un attaquant exploite un confused deputy, il devra, d'une maniÚre ou d'une autre, découvrir si les principals du compte actuel peuvent se faire passer pour des roles dans d'autres comptes.

Confiances inattendues

Wildcard en tant que principal

json
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": { "AWS": "*" }
}

Cette politique autorise l'ensemble d'AWS Ă  assumer le rĂŽle.

Service en tant que principal

json
{
"Action": "lambda:InvokeFunction",
"Effect": "Allow",
"Principal": { "Service": "apigateway.amazonaws.com" },
"Resource": "arn:aws:lambda:000000000000:function:foo"
}

Cette politique autorise n'importe quel compte Ă  configurer son apigateway pour appeler cette Lambda.

S3 en tant que principal

json
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" },
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}

Si un S3 bucket est donné comme principal, puisque les S3 buckets n'ont pas d'Account ID, si vous avez supprimé votre bucket et que l'attaquant l'a recréé dans son propre compte, alors il pourrait en abuser.

Non pris en charge

json
{
"Effect": "Allow",
"Principal": { "Service": "cloudtrail.amazonaws.com" },
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*"
}

Une méthode courante pour éviter les problÚmes de Confused Deputy est d'utiliser une condition avec AWS:SourceArn pour vérifier l'ARN d'origine. Cependant, certains services peuvent ne pas le prendre en charge (comme CloudTrail d'aprÚs certaines sources).

Suppression des identifiants

Avec l'une des permissions suivantes — iam:DeleteAccessKey, iam:DeleteLoginProfile, iam:DeleteSSHPublicKey, iam:DeleteServiceSpecificCredential, iam:DeleteInstanceProfile, iam:DeleteServerCertificate, iam:DeleteCloudFrontPublicKey, iam:RemoveRoleFromInstanceProfile — un acteur peut supprimer access keys, login profiles, SSH keys, service-specific credentials, instance profiles, certificates ou CloudFront public keys, ou dissocier des rĂŽles des instance profiles. De telles actions peuvent immĂ©diatement bloquer des utilisateurs et applications lĂ©gitimes et provoquer un dĂ©ni de service ou une perte d'accĂšs pour les systĂšmes qui dĂ©pendent de ces credentials ; ces permissions IAM doivent donc ĂȘtre strictement restreintes et surveillĂ©es.

bash
# Remove Access Key of a user
aws iam delete-access-key \
--user-name <Username> \
--access-key-id AKIAIOSFODNN7EXAMPLE

## Remove ssh key of a user
aws iam delete-ssh-public-key \
--user-name <Username> \
--ssh-public-key-id APKAEIBAERJR2EXAMPLE

Suppression d'identités

Avec des permissions telles que iam:DeleteUser, iam:DeleteGroup, iam:DeleteRole ou iam:RemoveUserFromGroup, un acteur peut supprimer des users, roles ou groups — ou modifier la group membership — supprimant des identitĂ©s et les traces associĂ©es. Cela peut immĂ©diatement interrompre l'accĂšs pour les personnes et les services qui dĂ©pendent de ces identitĂ©s, provoquant un denial-of-service ou une perte d'accĂšs ; ces actions IAM doivent donc ĂȘtre strictement restreintes et surveillĂ©es.

bash
# Delete a user
aws iam delete-user \
--user-name <Username>

# Delete a group
aws iam delete-group \
--group-name <Username>

# Delete a role
aws iam delete-role \
--role-name <Role>

Avec l'une des permissions suivantes — iam:DeleteGroupPolicy, iam:DeleteRolePolicy, iam:DeleteUserPolicy, iam:DeletePolicy, iam:DeletePolicyVersion, iam:DeleteRolePermissionsBoundary, iam:DeleteUserPermissionsBoundary, iam:DetachGroupPolicy, iam:DetachRolePolicy, iam:DetachUserPolicy — un acteur peut supprimer ou dĂ©tacher des politiques gĂ©rĂ©es/intĂ©grĂ©es, supprimer des versions de politique ou des limites de permissions, et dissocier des politiques d'utilisateurs, de groupes ou de rĂŽles. Cela dĂ©truit des autorisations et peut altĂ©rer le modĂšle de permissions, provoquant une perte d'accĂšs immĂ©diate ou un dĂ©ni de service pour les entitĂ©s qui dĂ©pendaient de ces politiques, donc ces actions IAM doivent ĂȘtre strictement restreintes et surveillĂ©es.

bash
# Delete a group policy
aws iam delete-group-policy \
--group-name <GroupName> \
--policy-name <PolicyName>

# Delete a role policy
aws iam delete-role-policy \
--role-name <RoleName> \
--policy-name <PolicyName>

Suppression d'identité fédérée

Avec iam:DeleteOpenIDConnectProvider, iam:DeleteSAMLProvider et iam:RemoveClientIDFromOpenIDConnectProvider, un acteur peut supprimer des fournisseurs d'identitĂ© OIDC/SAML ou retirer des client IDs. Cela interrompt l'authentification fĂ©dĂ©rĂ©e, empĂȘche la validation des tokens et refuse immĂ©diatement l'accĂšs aux utilisateurs et services qui reposent sur SSO jusqu'Ă  ce que l'IdP ou les configurations soient restaurĂ©s.

bash
# Delete OIDCP provider
aws iam delete-open-id-connect-provider \
--open-id-connect-provider-arn arn:aws:iam::111122223333:oidc-provider/accounts.google.com

# Delete SAML provider
aws iam delete-saml-provider \
--saml-provider-arn arn:aws:iam::111122223333:saml-provider/CorporateADFS

Activation illégitime de MFA

Avec iam:EnableMFADevice, un attaquant peut enregistrer un dispositif MFA sur l’identitĂ© d’un utilisateur, empĂȘchant l’utilisateur lĂ©gitime de se connecter. Une fois qu’un MFA non autorisĂ© est activĂ©, l’utilisateur peut ĂȘtre verrouillĂ© jusqu’à ce que le dispositif soit retirĂ© ou rĂ©initialisĂ© (remarque : si plusieurs dispositifs MFA sont enregistrĂ©s, la connexion ne requiert qu’un seul, donc cette attaque n’aura aucun effet pour empĂȘcher l’accĂšs).

bash
aws iam enable-mfa-device \
--user-name <Username> \
--serial-number arn:aws:iam::111122223333:mfa/alice \
--authentication-code1 123456 \
--authentication-code2 789012

Altération des métadonnées de certificats/clés

Avec iam:UpdateSSHPublicKey, iam:UpdateCloudFrontPublicKey, iam:UpdateSigningCertificate, iam:UpdateServerCertificate, un acteur peut modifier le statut ou les métadonnées des clés publiques et des certificats.
En marquant les clés/certificats comme inactifs ou en altérant leurs références, il peut interrompre l'authentification SSH, invalider les validations X.509/TLS, et perturber immédiatement les services qui dépendent de ces identifiants, entraßnant une perte d'accÚs ou de disponibilité.

bash
aws iam update-ssh-public-key \
--user-name <Username> \
--ssh-public-key-id APKAEIBAERJR2EXAMPLE \
--status Inactive

aws iam update-server-certificate \
--server-certificate-name <Certificate_Name> \
--new-path /prod/

iam:Delete*

La wildcard IAM iam:Delete* accorde la capacitĂ© de supprimer de nombreux types de ressources IAM — users, roles, groups, policies, keys, certificates, MFA devices, policy versions, etc. — et a donc un rayon d'impact trĂšs Ă©levĂ© : un acteur auquel iam:Delete* est accordĂ© peut dĂ©truire dĂ©finitivement des identities, credentials, policies et artefacts associĂ©s, supprimer des audits/preuves, et provoquer des interruptions de service ou des pannes opĂ©rationnelles. Quelques exemples :

bash
# Delete a user
aws iam delete-user --user-name <Username>

# Delete a role
aws iam delete-role --role-name <RoleName>

# Delete a managed policy
aws iam delete-policy --policy-arn arn:aws:iam::<ACCOUNT_ID>:policy/<PolicyName>

iam:EnableMFADevice

Un acteur disposant de l'action iam:EnableMFADevice peut enregistrer un appareil MFA sur une identity dans le account, Ă  condition que le user n'en ait pas dĂ©jĂ  un activĂ©. Cela peut ĂȘtre utilisĂ© pour perturber l'accĂšs d'un user : une fois qu'un attacker enregistre un appareil MFA, le user lĂ©gitime peut ĂȘtre empĂȘchĂ© de sign in parce qu'il ne contrĂŽle pas l'appareil MFA enregistrĂ© par l'attacker.

Cette attaque de dĂ©ni d'accĂšs ne fonctionne que si le user n'avait aucun MFA enregistrĂ© ; si l'attacker enregistre un appareil MFA pour ce user, le user lĂ©gitime sera verrouillĂ© hors de tous les flows qui exigent ce nouveau MFA. Si le user possĂšde dĂ©jĂ  un ou plusieurs appareils MFA sous son contrĂŽle, l'ajout d'un MFA contrĂŽlĂ© par l'attacker ne bloque pas le user lĂ©gitime — il peut continuer Ă  s'authentifier en utilisant n'importe quel MFA qu'il possĂšde dĂ©jĂ .

Pour enable (register) un appareil MFA pour un user un attacker pourrait exécuter :

bash
aws iam enable-mfa-device \
--user-name <Username> \
--serial-number arn:aws:iam::111122223333:mfa/alice \
--authentication-code1 123456 \
--authentication-code2 789012

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