AWS - API Gateway Unauthenticated Enum

Support HackTricks

API Invoke bypass

De acordo com a palestra Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo, Lambda Authorizers podem ser configurados usando a sintaxe IAM para conceder permissões para invocar endpoints da API. Isto é 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.

Note que "*" não para de 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 o regex final ainda seja válido. Então arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/* Pode validar uma solicitação post para o estágio de teste no caminho /prod/GET/dashboard/admin, por exemplo.

Você deve sempre ter claro o que deseja permitir acessar e, em seguida, verificar se outros cenários são possíveis com as permissões concedidas.

Para mais informações, além da documentação, você pode encontrar código para implementar authorizers 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 burlar restrições.

Template de URL Pública

https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided}

Obter ID da Conta a partir de URL pública do API Gateway

Assim como com buckets S3, Data Exchange e URLs Lambda, é possível encontrar o ID da conta abusando da Chave de Condição de Política aws:ResourceAccount 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 padrão interessantes).

Você pode encontrar mais informações na pesquisa original e na ferramenta conditional-love para automatizar essa exploração.

Support HackTricks

Last updated