AWS - IAM Post Exploitation

Suporte ao 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, ela 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, desde que a conta externa A saiba, mas a conta externa B não saiba, isso impede B de abusar de A para acessar seu papel.

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

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

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

Support HackTricks

Last updated