AWS - IAM Post Exploitation

Supporta HackTricks

IAM

Per maggiori informazioni sull'accesso IAM:

AWS - IAM, Identity Center & SSO Enum

Problema del Deputy Confuso

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. Questa è 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 assunzione del ruolo IAM sarà in grado di vederlo. Ma finché l'account esterno A lo conosce, ma l'account esterno B non lo conosce, si 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 sfruttare un confused deputy, dovrà trovare in qualche modo se i principali dell'account corrente possono impersonare ruoli in altri account.

Trust inaspettati

Wildcard come principale

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

Questa policy consente a tutti AWS di assumere il ruolo.

Service as principal

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

S3 come principal

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

Se un bucket S3 è dato come principal, poiché i bucket S3 non hanno un Account ID, se hai eliminato il tuo bucket e l'attaccante lo ha creato nel proprio account, allora potrebbe abusarne.

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 problemi di Confused Deputy è l'uso di una condizione con AWS:SourceArn per verificare l'ARN di origine. Tuttavia, alcuni servizi potrebbero non supportarlo (come CloudTrail secondo alcune fonti).

Riferimenti

Supporta HackTricks

Last updated