AWS - IAM Post Exploitation

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

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 uma role na 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 uma role na sua conta, é possível especificar um ExternalId. Esta é uma string "secreta" que a conta externa (A) precisa especificar para assumir a role na sua organização. Como a conta externa B não conhecerá essa string, mesmo que tenha acesso sobre A, não conseguirá acessar sua role.

No entanto, observe que este ExternalId "secreto" não é um segredo, qualquer pessoa que possa ler a política de assumir role do IAM poderá vê-lo. Mas, desde que a conta externa A o conheça, mas a conta externa B não o conheça, isso impede que B abuse de A para acessar sua role.

Exemplo:

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

Para um atacante explorar um confused deputy, ele precisará descobrir de alguma forma se os principais da conta atual podem personificar papéis em outras contas.

Confianças Inesperadas

Curinga como principal

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

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

Serviço como principal

{
"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

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

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

Não suportado

{
"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 a origem ARN. No entanto, alguns serviços podem não suportar isso (como o CloudTrail, de acordo com algumas fontes).

Referências

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

Support HackTricks

Last updated