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
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
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.
.png)
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 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
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
HackTricks Cloud