AWS - API Gateway Unauthenticated Enum

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks:

Contournement de l'invocation de l'API

Selon la présentation Vecteurs d'attaque pour les API utilisant les autorisateurs Lambda de la passerelle API AWS - Alexandre & Leonardo, les autorisateurs Lambda peuvent être configurés en utilisant la syntaxe IAM pour donner des autorisations d'invocation aux points de terminaison de l'API. Ceci est extrait 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 façon de donner des autorisations pour invoquer des points de terminaison est que le "*" implique "anything" et qu'il n'y a 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/* afin de donner à chaque utilisateur l'accès à /dashboard/user/{username} leur donnera également accès à d'autres routes telles que /admin/dashboard/createAdmin par exemple.

Notez que "*" ne cesse pas de se développer avec les barres obliques, donc, si vous utilisez "*" dans api-id par exemple, cela pourrait également indiquer "any stage" ou "any method" tant que l'expression régulière finale est toujours valide. Ainsi arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/* Peut valider une requête POST vers le stage de test vers le chemin /prod/GET/dashboard/admin par exemple.

Vous devriez toujours avoir clairement ce que vous voulez autoriser à accéder, puis vérifier si d'autres scénarios sont possibles avec les autorisations accordées.

Pour plus d'informations, en plus de la documentation, vous pouvez trouver du code pour implémenter des authorizers dans ce référentiel officiel aws github.

Injection de politique IAM

Dans le même talk, il est exposé le fait que si le code utilise l'entrée utilisateur pour générer les politiques IAM, des caractères génériques (et d'autres comme "." ou des chaînes spécifiques) peuvent être inclus dans le but de contourner les restrictions.

Modèle d'URL publique

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

Obtenir l'identifiant du compte à partir de l'URL publique de l'API Gateway

Tout comme avec les compartiments S3, Data Exchange et les passerelles d'URL Lambda, il est possible de trouver l'identifiant du compte d'un compte en abusant de la clé de condition de stratégie aws:ResourceAccount à partir d'une URL publique de l'API Gateway. Cela se fait en trouvant l'identifiant du compte un caractère à la fois en abusant des caractères génériques 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 intéressantes par défaut).

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

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks:

Dernière mise à jour