Cognito Identity Pools
Informações Básicas
As 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. Uma característica notável das pools de identidade é o suporte tanto para usuários convidados anônimos quanto para uma variedade de provedores de identidade para autenticação do usuário. Os provedores de identidade suportados incluem:
Amazon Cognito user pools
Opções de login social como Facebook, Google, Login with Amazon e Sign in with Apple
Provedores compatíveis com OpenID Connect (OIDC)
Provedores de identidade SAML (Security Assertion Markup Language)
Identidades autenticadas pelo desenvolvedor
Cognito Sync
Para gerar sessões de Identity Pool, primeiro é necessário gerar um ID de Identidade. Este ID de Identidade é a identificação da sessão desse 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 estará usando o mesmo ID de Identidade).
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 fluxos e mensagens SNS...).
Ferramentas para pentesting
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 para MFA) e escalonamento de privilégios com base em atributos personalizáveis 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, consulte a parte 2 da postagem no blog. Para instruções de instalação, consulte a página principal do Pacu.
Uso
Exemplo de uso do cognito__attack para tentar a criação de usuário e todos os vetores de escalonamento de privilégios contra um determinado pool de identidade e cliente de pool de usuários:
Exemplo de uso do cognito__enum para reunir todos os grupos de usuários, clientes de grupos de usuários, pools de identidade, usuários, etc. visíveis na conta AWS atual:
Cognito Scanner é uma ferramenta CLI em python que implementa diferentes ataques no Cognito, incluindo a criação indesejada de contas e escalonamento de pool de identidade.
Instalação
Uso
Para mais informações, consulte https://github.com/padok-team/cognito-scanner
Acessando Funções IAM
Não autenticado
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 este ID deve ser 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 é passível de força bruta).
A função IAM Cognito não autenticada criada via é chamada por padrão de 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 comandos aws cli:
Note que por padrão, um usuário Cognito não autenticado NÃO PODE ter permissão alguma, mesmo que tenha sido atribuída por meio de uma política. Verifique a seção a seguir.
Fluxo de Autenticação Aprimorado vs Básico
A seção anterior seguiu o fluxo de autenticação aprimorado padrão. Esse fluxo define uma política de sessão restritiva para a sessão de função IAM gerada. Essa política permitirá apenas que a sessão utilize os serviços desta lista (mesmo que a função tenha acesso a outros serviços).
No entanto, há uma maneira de contornar isso, se o pool de identidades 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 receber este erro, é porque o fluxo básico não está habilitado (padrão)
Ocorreu um erro (InvalidParameterException) ao chamar a operação GetOpenIdToken: O fluxo básico (clássico) não está habilitado, por favor, use o fluxo aprimorado.
Tendo um conjunto de credenciais IAM, você deve verificar quais acessos possui e tentar elevar privilégios.
Autenticado
Lembre-se de que os usuários autenticados provavelmente terão permissões diferentes, então se puder se inscrever no aplicativo, tente fazer isso e obter as novas credenciais.
Também pode haver funções disponíveis para usuários autenticados acessando o Identity Pool.
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 de Cognito_<Nome do Identity Pool>Auth_Role
De qualquer forma, o exemplo a seguir pressupõe que você já fez login em um Cognito User Pool usado para acessar o Identity Pool (não se esqueça de que outros tipos de provedores de identidade também podem estar configurados).
É possível configurar diferentes funções IAM dependendo do provedor de identidade pelo qual o usuário está sendo autenticado ou até mesmo apenas dependendo do usuário (usando reivindicações). Portanto, se você tiver acesso a diferentes usuários através do mesmo ou de diferentes provedores, pode valer a pena fazer login e acessar as funções IAM de todos eles.
Última actualización