AWS - API Gateway Unauthenticated Enum

Soutenez HackTricks

Contournement d'invocation d'API

Selon la présentation Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo, les Lambda Authorizers peuvent être configurés en utilisant la syntaxe IAM pour donner des permissions d'invocation des points de terminaison de l'API. Ceci est tiré de la documentation :

{
"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"
]
}
]
}

Le problème avec cette manière de donner des permissions pour invoquer des endpoints est que le "*" implique "n'importe quoi" et il n'y a pas plus de syntaxe regex supportée.

Quelques exemples :

  • Une règle telle que arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/* pour donner à chaque utilisateur accès à /dashboard/user/{username} leur donnera accès à d'autres routes telles que /admin/dashboard/createAdmin par exemple.

Notez que "*" ne s'arrête pas avec les slashes, donc, si vous utilisez "*" dans api-id par exemple, cela pourrait aussi indiquer "n'importe quelle étape" ou "n'importe quelle méthode" tant que le regex final est toujours valide. Donc arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/* Peut valider une requête post à l'étape de test vers le chemin /prod/GET/dashboard/admin par exemple.

Vous devez toujours avoir clair ce que vous voulez permettre d'accéder et ensuite vérifier si d'autres scénarios sont possibles avec les permissions accordées.

Pour plus d'infos, en plus des docs, vous pouvez trouver du code pour implémenter des authorizers dans ce github officiel aws.

Injection de politique IAM

Dans la même conférence il est exposé le fait que si le code utilise l'entrée utilisateur pour générer les politiques IAM, des wildcards (et d'autres tels que "." ou des chaînes spécifiques) peuvent être incluses dans le but de contourner les restrictions.

Modèle d'URL publique

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

Obtenir l'ID de compte à partir de l'URL publique d'API Gateway

Tout comme avec les buckets S3, Data Exchange et les URL Lambda, il est possible de trouver l'ID de compte en abusant de la aws:ResourceAccount Policy Condition Key à partir d'une URL publique d'API Gateway. Cela se fait en trouvant l'ID de compte un caractère à la fois en abusant des jokers dans la section aws:ResourceAccount de la politique. Cette technique permet également d'obtenir les valeurs des tags si vous connaissez la clé du tag (il y en a quelques-unes par défaut intéressantes).

Vous pouvez trouver plus d'informations dans la recherche originale et l'outil conditional-love pour automatiser cette exploitation.

Soutenez HackTricks

Last updated