AWS - IAM Post Exploitation

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

IAM

Para mais informações sobre acesso ao IAM:

pageAWS - IAM, Identity Center & SSO Enum

Problema do Delegado Confuso

Se você permitir que uma conta externa (A) acesse uma função em sua conta, provavelmente terá 0 visibilidade sobre quem exatamente pode 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 função em sua conta, é possível especificar um ExternalId. Este é uma string "secreta" que a conta externa (A) precisa especificar para assumir a função em sua organização. Como a conta externa B não conhecerá essa string, mesmo que ele tenha acesso sobre A, não poderá acessar sua função.

No entanto, observe que esse ExternalId "secreto" não é um segredo, qualquer pessoa que possa ler a política de assumir função 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 função.

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 delegado confuso, ele precisará descobrir de alguma forma se os princípios da conta atual podem se passar por funções em outras contas.

Confianças Inesperadas

Coringa como princípio

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

Esta política permite que todos os AWS assumam a função.

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 é dado como principal, porque os buckets S3 não possuem 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 do ARN. No entanto, alguns serviços podem não suportar isso (como o CloudTrail, de acordo com algumas fontes).

Referências

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Última actualización