AWS - IAM Post Exploitation

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

IAM

Pour plus d'informations sur l'accès IAM :

pageAWS - IAM, Identity Center & SSO Enum

Problème du député confus

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.

Par conséquent, lors de l'autorisation d'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 pour 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" n'est pas un secret, toute personne pouvant lire la politique de rôle d'assumption IAM pourra le voir. Mais tant que le compte externe A le connaît, mais 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"
}
}
}
}

Pour qu'un attaquant exploite un deputy confus, il devra trouver un moyen de déterminer si les principaux du compte actuel peuvent se faire passer pour des rôles dans d'autres comptes.

Confiances inattendues

Jocker en tant que principal

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

Cette politique autorise tous les 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 permet à n'importe quel compte de 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 compartiment S3 est donné en tant que principal, car les compartiments S3 n'ont pas d'ID de compte, si vous supprimez votre compartiment et que l'attaquant le recrée 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 façon courante d'éviter les problèmes de Confused Deputy est l'utilisation d'une condition avec AWS:SourceArn pour vérifier l'ARN d'origine. Cependant, certains services pourraient ne pas prendre en charge cela (comme CloudTrail selon certaines sources).

Références

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks:

Dernière mise à jour