AWS - IAM Pós Exploração

Reading time: 4 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

IAM

Para mais informações sobre acesso IAM:

AWS - IAM, Identity Center & SSO Enum

Problema do Deputado Confuso

Se você permitir que uma conta externa (A) acesse um papel em sua conta, você provavelmente terá 0 visibilidade sobre quem pode exatamente acessar essa conta externa. Isso é um problema, porque se outra conta externa (B) puder acessar a conta externa (A), é possível que B também consiga acessar sua conta.

Portanto, ao permitir que uma conta externa acesse um papel em sua conta, é possível especificar um ExternalId. Esta é uma string "secreta" que a conta externa (A) precisa especificar para assumir o papel em sua organização. Como a conta externa B não saberá essa string, mesmo que tenha acesso a A, não conseguirá acessar seu papel.

No entanto, observe que esse ExternalId "secreto" não é um segredo, qualquer um que puder ler a política de assumir papel do IAM poderá vê-lo. Mas, enquanto a conta externa A souber, mas a conta externa B não souber, isso impede B de abusar de A para acessar seu papel.

Exemplo:

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

warning

Para que um atacante explore um deputado confuso, ele precisará descobrir de alguma forma se os principais da conta atual podem se passar por funções em outras contas.

Confianças Inesperadas

Coringa como principal

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

Esta política permite que todos os AWS assumam o papel.

Serviço como principal

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

Esta política permite que qualquer conta configure seu apigateway para chamar este Lambda.

S3 como principal

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

Se um bucket S3 for dado como um principal, porque os buckets S3 não têm um ID de Conta, se você deletou seu bucket e o atacante o criou em sua própria conta, então eles poderiam abusar disso.

Não suportado

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

Uma maneira comum de evitar problemas de Confused Deputy é o uso de uma condição com AWS:SourceArn para verificar o ARN de origem. No entanto, alguns serviços podem não suportar isso (como o CloudTrail, de acordo com algumas fontes).

Referências

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks