AWS - IAM Post Exploitation

Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

IAM

Per ulteriori informazioni sull'accesso IAM:

pageAWS - IAM, Identity Center & SSO Enum

Problema del Vice Delegato

Se permetti a un account esterno (A) di accedere a un ruolo nel tuo account, probabilmente avrai 0 visibilità su chi può esattamente accedere a quell'account esterno. Questo è un problema, perché se un altro account esterno (B) può accedere all'account esterno (A) è possibile che B possa anche accedere al tuo account.

Pertanto, quando si permette a un account esterno di accedere a un ruolo nel proprio account, è possibile specificare un ExternalId. Si tratta di una stringa "segreta" che l'account esterno (A) deve specificare per assumere il ruolo nella tua organizzazione. Poiché l'account esterno B non conoscerà questa stringa, anche se ha accesso su A, non sarà in grado di accedere al tuo ruolo.

Tuttavia, nota che questo ExternalId "segreto" non è un segreto, chiunque possa leggere la policy di assumere il ruolo IAM sarà in grado di vederlo. Ma fintanto che l'account esterno A lo conosce, ma l'account esterno B non lo conosce, impedisce a B di abusare di A per accedere al tuo ruolo.

Esempio:

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

Per un attaccante per sfruttare un vice confuso, dovrà trovare in qualche modo se i principali dell'account corrente possono impersonare ruoli in altri account.

Trust inaspettati

Asterisco come principale

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

Questa policy consente a tutti gli AWS di assumere il ruolo.

Servizio come principale

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

Questa policy consente a qualsiasi account di configurare il proprio apigateway per chiamare questa Lambda.

S3 come principale

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

Se un bucket S3 è dato come principale, poiché i bucket S3 non hanno un ID account, se elimini il tuo bucket e l'attaccante lo ricrea nel proprio account, potrebbe sfruttarlo.

Non supportato

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

Un modo comune per evitare i problemi del Confused Deputy è l'uso di una condizione con AWS:SourceArn per controllare l'ARN di origine. Tuttavia, alcuni servizi potrebbero non supportarlo (come CloudTrail secondo alcune fonti).

Riferimenti

Impara l'hacking su AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated