AWS - Cognito Privesc
Cognito
Para mais informações sobre o Cognito, verifique:
AWS - Cognito EnumColeta de credenciais do Identity Pool
Como o Cognito pode conceder credenciais de função IAM tanto para usuários autenticados quanto para usuários não autenticados, se você localizar o ID do Identity Pool de um aplicativo (que deve estar codificado nele), você pode obter novas credenciais e, portanto, realizar uma escalada de privilégio (dentro de uma conta AWS onde provavelmente você nem tinha credenciais anteriormente).
Para mais informações verifique esta página.
Impacto Potencial: Escalação direta para a função de serviços anexada aos usuários não autenticados (e provavelmente para a função anexada aos usuários autenticados).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Com essa permissão, você pode conceder qualquer função do Cognito aos usuários autenticados/não autenticados do aplicativo Cognito.
Se o aplicativo cognito não tiver usuários não autenticados habilitados, você também pode precisar da permissão cognito-identity:UpdateIdentityPool
para habilitá-lo.
Impacto Potencial: Privesc direto para qualquer função cognito.
cognito-identity:update-identity-pool
cognito-identity:update-identity-pool
Um atacante com essa permissão poderia, por exemplo, configurar um Pool de Usuários Cognito sob seu controle ou qualquer outro provedor de identidade onde ele possa fazer login como uma forma de acessar este Pool de Identidade Cognito. Em seguida, apenas fazer login nesse provedor de usuários irá permitir que ele acesse a função autenticada configurada no Pool de Identidade.
Também é possível abusar dessa permissão para permitir autenticação básica:
Impacto Potencial: Comprometer a função IAM autenticada configurada dentro do pool de identidade.
cognito-idp:AdminAddUserToGroup
cognito-idp:AdminAddUserToGroup
Esta permissão permite adicionar um usuário Cognito a um grupo Cognito, portanto, um atacante poderia abusar dessa permissão para adicionar um usuário sob seu controle a outros grupos com privilégios melhores ou funções IAM diferentes:
Impacto Potencial: Escalação de privilégios para outros grupos Cognito e funções IAM anexadas aos Grupos de Pool de Usuários.
(cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
Um atacante com essas permissões poderia criar/atualizar grupos com cada função IAM que pode ser usada por um Provedor de Identidade Cognito comprometido e fazer com que um usuário comprometido faça parte do grupo, acessando todas essas funções:
Impacto Potencial: Escalação de privilégios para outros papéis IAM do Cognito.
cognito-idp:AdminConfirmSignUp
cognito-idp:AdminConfirmSignUp
Esta permissão permite verificar uma inscrição. Por padrão, qualquer pessoa pode se inscrever em aplicativos Cognito, se isso for deixado, um usuário poderia criar uma conta com qualquer dado e verificá-la com essa permissão.
Impacto Potencial: Privesc indireto para a função IAM do pool de identidade para usuários autenticados se você puder registrar um novo usuário. Privesc indireto para outras funcionalidades do aplicativo sendo capaz de confirmar qualquer conta.
cognito-idp:AdminCreateUser
cognito-idp:AdminCreateUser
Esta permissão permitiria a um atacante criar um novo usuário dentro do pool de usuários. O novo usuário é criado como habilitado, mas precisará alterar sua senha.
Impacto Potencial: Privesc direto para a função IAM do pool de identidade para usuários autenticados. Privesc indireto para outras funcionalidades do aplicativo, podendo criar qualquer usuário
cognito-idp:AdminEnableUser
cognito-idp:AdminEnableUser
Essas permissões podem ajudar em um cenário muito específico em que um atacante encontrou as credenciais de um usuário desabilitado e precisa habilitá-lo novamente.
Impacto Potencial: Privesc indireto para a função IAM do pool de identidade para usuários autenticados e permissões do usuário se o atacante tiver credenciais para um usuário desativado.
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
Essa permissão permite fazer login com o método ADMIN_USER_PASSWORD_AUTH. Para mais informações, siga o link.
cognito-idp:AdminSetUserPassword
cognito-idp:AdminSetUserPassword
Essa permissão permitiria a um atacante alterar a senha de qualquer usuário, permitindo que ele se passe por qualquer usuário (que não tenha MFA ativado).
Impacto Potencial: Privesc direto para potencialmente qualquer usuário, portanto, acesso a todos os grupos dos quais cada usuário é membro e acesso à função IAM autenticada do Identity Pool.
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: Um atacante poderia potencialmente abusar dessa permissão para definir um telefone celular sob seu controle como MFA SMS de um usuário.
SetUserMFAPreference: Semelhante ao anterior, essa permissão pode ser usada para definir as preferências de MFA de um usuário e contornar a proteção de MFA.
SetUserPoolMfaConfig: Semelhante ao anterior, essa permissão pode ser usada para definir as preferências de MFA de um pool de usuários para contornar a proteção de MFA.
UpdateUserPool: Também é possível atualizar o grupo de usuários para alterar a política de MFA. Verifique o cli aqui.
Impacto Potencial: Privilégio indireto de escalonamento para potencialmente qualquer usuário de quem o atacante conhece as credenciais, isso poderia permitir contornar a proteção de MFA.
cognito-idp:AdminUpdateUserAttributes
cognito-idp:AdminUpdateUserAttributes
Um atacante com essa permissão poderia alterar o e-mail ou número de telefone ou qualquer outro atributo de um usuário sob seu controle para tentar obter mais privilégios em um aplicativo subjacente. Isso permite alterar um e-mail ou número de telefone e defini-lo como verificado.
Impacto Potencial: Possível privesc indireto na aplicação subjacente usando Cognito User Pool que concede privilégios com base em atributos do usuário.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
Um atacante com essa permissão poderia criar um novo Cliente de Pool de Usuários menos restrito do que os clientes de pool existentes. Por exemplo, o novo cliente poderia permitir qualquer tipo de método de autenticação, não ter nenhum segredo, ter a revogação de token desativada, permitir que os tokens sejam válidos por um período mais longo...
O mesmo pode ser feito se, em vez de criar um novo cliente, um existente for modificado.
No linha de comando (ou no atualizar um) você pode ver todas as opções, confira!.
Impacto Potencial: Possível privesc indireto para o usuário autorizado do Pool de Identidade usado pelo Pool de Usuários, criando um novo cliente que relaxa as medidas de segurança e possibilita a um atacante fazer login com um usuário que ele foi capaz de criar.
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
Um atacante poderia abusar dessa permissão para criar usuários fazendo upload de um arquivo csv com novos usuários.
Potencial Impacto: Escalação de privilégios diretos para a função IAM do pool de identidades para usuários autenticados. Escalação de privilégios indiretos para outras funcionalidades do aplicativo, podendo criar qualquer usuário.
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
Um atacante poderia criar um novo provedor de identidade para então ser capaz de fazer login por meio desse provedor.
Impacto Potencial: Privesc direto para a função IAM do pool de identidade para usuários autenticados. Privesc indireto para outras funcionalidades do aplicativo sendo capaz de criar qualquer usuário.
Análise cognito-sync:*
Esta é uma permissão muito comum por padrão em funções de Pools de Identidade do Cognito. Mesmo se um curinga em permissões sempre parecer ruim (especialmente vindo da AWS), as permissões concedidas não são super úteis do ponto de vista de um atacante.
Essa permissão permite ler informações de uso de Pools de Identidade e IDs de Identidade dentro das Pools de Identidade (que não são informações sensíveis). IDs de Identidade podem ter Conjuntos de Dados atribuídos a eles, que são informações das sessões (a AWS define como um jogo salvo). Pode ser possível que isso contenha algum tipo de informação sensível (mas a probabilidade é bem baixa). Você pode encontrar na página de enumeração como acessar essas informações.
Um atacante também poderia usar essas permissões para se inscrever em um fluxo Cognito que publica alterações nesses conjuntos de dados ou um lambda que dispara em eventos do cognito. Não vi isso sendo usado e não esperaria informações sensíveis aqui, mas não é impossível.
Ferramentas Automáticas
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 do post do blog. Para instruções de instalação, consulte a página principal do Pacu.
Uso
Exemplo de uso do ataque cognito__attack para tentar a criação de usuário 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 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 uma escalada de privilégios.
Instalação
Utilização
Para mais informações, consulte https://github.com/padok-team/cognito-scanner
Last updated