AWS - Enumeração Não Autenticada do API Gateway
Reading time: 4 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Bypass de Invocação da API
De acordo com a palestra Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo, os Lambda Authorizers podem ser configurados usando a sintaxe IAM para conceder permissões para invocar endpoints da API. Isso é retirado da documentação:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Permission",
"Action": ["execute-api:Execution-operation"],
"Resource": [
"arn:aws:execute-api:region:account-id:api-id/stage/METHOD_HTTP_VERB/Resource-path"
]
}
]
}
O problema com essa forma de conceder permissões para invocar endpoints é que o "*" implica "qualquer coisa" e não há mais sintaxe regex suportada.
Alguns exemplos:
- Uma regra como
arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*
para dar a cada usuário acesso a/dashboard/user/{username}
dará a eles acesso a outras rotas, como/admin/dashboard/createAdmin
, por exemplo.
warning
Note que "*" não para de se expandir com barras, portanto, se você usar "*" em api-id, por exemplo, isso também pode indicar "qualquer estágio" ou "qualquer método", desde que a regex final ainda seja válida.
Assim, arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*
Pode validar uma solicitação POST para o estágio de teste para o caminho /prod/GET/dashboard/admin
, por exemplo.
Você deve sempre ter claro o que deseja permitir o acesso e, em seguida, verificar se outros cenários são possíveis com as permissões concedidas.
Para mais informações, além da docs, você pode encontrar código para implementar autorizadores neste github oficial da aws.
Injeção de Política IAM
Na mesma palestra, é exposto o fato de que, se o código estiver usando entrada do usuário para gerar as políticas IAM, curingas (e outros como "." ou strings específicas) podem ser incluídos com o objetivo de contornar restrições.
Modelo de URL Pública
https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided}
Obter ID da Conta a partir da URL pública do API Gateway
Assim como com buckets S3, Data Exchange e URLs de Lambda, é possível encontrar o ID da conta de uma conta abusando da aws:ResourceAccount
Policy Condition Key a partir de uma URL pública do API Gateway. Isso é feito encontrando o ID da conta um caractere de cada vez, abusando de curingas na seção aws:ResourceAccount
da política.
Essa técnica também permite obter valores de tags se você souber a chave da tag (existem algumas interessantes por padrão).
Você pode encontrar mais informações na pesquisa original e na ferramenta conditional-love para automatizar essa exploração.
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.