Cognito Identity Pools
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Os pools de identidade desempenham um papel crucial ao permitir que seus usuários adquiram credenciais temporárias. Essas credenciais são essenciais para acessar vários serviços da AWS, incluindo, mas não se limitando a Amazon S3 e DynamoDB. Um recurso notável dos pools de identidade é seu suporte tanto para usuários convidados anônimos quanto para uma variedade de provedores de identidade para autenticação de usuários. Os provedores de identidade suportados incluem:
Amazon Cognito user pools
Opções de login social, como Facebook, Google, Login com Amazon e Sign in with Apple
Provedores compatíveis com OpenID Connect (OIDC)
Provedores de identidade SAML (Security Assertion Markup Language)
Identidades autenticadas por desenvolvedores
Para gerar sessões de Identity Pool, você primeiro precisa gerar um Identity ID. Este Identity ID é a identificação da sessão daquele usuário. Essas identificações podem ter até 20 conjuntos de dados que podem armazenar até 1MB de pares chave-valor.
Isso é útil para manter informações de um usuário (que sempre usará o mesmo Identity ID).
Além disso, o serviço cognito-sync é o serviço que permite gerenciar e sincronizar essas informações (nos conjuntos de dados, enviando informações em streams e mensagens SNS...).
Pacu, o framework de exploração da AWS, agora inclui os módulos "cognito__enum" e "cognito__attack" que automatizam a enumeração de todos os ativos do Cognito em uma conta e sinalizam configurações fracas, atributos de usuário usados para controle de acesso, etc., e também automatizam a criação de usuários (incluindo suporte a MFA) e escalonamento de privilégios com base em atributos personalizados modificáveis, credenciais de pool de identidade utilizáveis, funções assumíveis em tokens de id, etc.
Para uma descrição das funções dos módulos, veja a parte 2 do blog post. Para instruções de instalação, veja a página principal do Pacu.
Exemplo de uso do cognito__attack para tentar a criação de usuários e todos os vetores de privesc contra um determinado pool de identidade e cliente de pool de usuários:
Exemplo de uso do cognito__enum para coletar todos os grupos de usuários, clientes de grupos de usuários, grupos de identidade, usuários, etc. visíveis na conta AWS atual:
Cognito Scanner é uma ferramenta CLI em python que implementa diferentes ataques ao Cognito, incluindo criação indesejada de contas e escalonamento de pools de identidade.
Para mais informações, consulte https://github.com/padok-team/cognito-scanner
A única coisa que um atacante precisa saber para obter credenciais AWS em um aplicativo Cognito como usuário não autenticado é o ID do Pool de Identidade, e esse ID deve estar codificado no aplicativo web/móvel para que ele o utilize. Um ID se parece com isso: eu-west-1:098e5341-8364-038d-16de-1865e435da3b
(não é possível fazer brute force).
A função IAM Cognito não autenticada criada via é chamada por padrão Cognito_<Nome do Pool de Identidade>Unauth_Role
Se você encontrar um ID de Pool de Identidade codificado e ele permitir usuários não autenticados, você pode obter credenciais AWS com:
Ou você poderia usar os seguintes aws cli commands:
Note que, por padrão, um cognito usuário NÃO AUTENTICADO não pode ter nenhuma permissão, mesmo que tenha sido atribuída via uma política. Verifique a seção a seguir.
A seção anterior seguiu o fluxo de autenticação aprimorado padrão. Este fluxo define uma política de sessão restritiva para a sessão do papel IAM gerado. Esta política permitirá que a sessão use os serviços desta lista (mesmo que o papel tenha acesso a outros serviços).
No entanto, há uma maneira de contornar isso; se o pool de Identidade tiver o "Fluxo Básico (Clássico)" habilitado, o usuário poderá obter uma sessão usando esse fluxo que não terá essa política de sessão restritiva.
Se você receber este erro, é porque o fluxo básico não está habilitado (padrão)
An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.
Tendo um conjunto de credenciais IAM, você deve verificar quais acessos você tem e tentar escalar privilégios.
Lembre-se de que usuários autenticados provavelmente terão permissões diferentes, então, se você puder se inscrever dentro do aplicativo, tente fazer isso e obtenha as novas credenciais.
Pode haver também funções disponíveis para usuários autenticados acessando o Pool de Identidade.
Para isso, você pode precisar ter acesso ao provedor de identidade. Se for um Cognito User Pool, talvez você possa abusar do comportamento padrão e criar um novo usuário você mesmo.
A função IAM Cognito autenticada criada via é chamada por padrão Cognito_<Nome do Pool de Identidade>Auth_Role
De qualquer forma, o exemplo a seguir espera que você já tenha feito login em um Cognito User Pool usado para acessar o Pool de Identidade (não se esqueça de que outros tipos de provedores de identidade também podem ser configurados).
É possível configurar diferentes funções IAM dependendo do provedor de identidade que o usuário está logado ou até mesmo apenas dependendo do usuário (usando claims). Portanto, se você tiver acesso a diferentes usuários através do mesmo ou de diferentes provedores, pode ser válido fazer login e acessar as funções IAM de todos eles.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)