AWS - IAM Post Exploitation

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez 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:

{
"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

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

Cette politique autorise l’ensemble d’AWS à assumer le rîle.

Service en tant que principal

{
"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

"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

{
"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.

# 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.

# 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.

# 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.

# 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).

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Ă©.

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 :

# 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 :

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 & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks