AWS - API Gateway Unauthenticated Enum

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

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 sintaxe IAM para conceder permissões para invocar API endpoints. Isso foi retirado from the docs:

json
{
"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 de 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

Observe que "*" não para de se expandir com barras, portanto, se você usar "*" em api-id por exemplo, isso também pode indicar "qualquer etapa" ou "qualquer método" desde que o regex final ainda seja válido.
So arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*
Pode validar uma requisição POST para o stage test no caminho /prod/GET/dashboard/admin, por exemplo.

Você deve sempre ter claro o que quer permitir acessar e então 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 authorizers em this official aws github.

IAM Policy Injection

No mesmo talk é mostrado 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 ali com o objetivo de contornar restrições.

Modelo de URL pública

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

Obter o ID da conta a partir de uma URL pública do API Gateway

Assim como com S3 buckets, Data Exchange e Lambda URLs, é possível descobrir o ID da conta abusando da aws:ResourceAccount Policy Condition Key a partir de uma URL pública do API Gateway. Isto é feito encontrando o ID da conta caractere por caractere, abusando de wildcards na seção aws:ResourceAccount da policy.
Esta técnica também permite obter valores das tags se você souber a tag key (há algumas padrão interessantes).

Você pode encontrar mais informações na original research 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