AWS - API Gateway Unauthenticated Enum

Support HackTricks

API Invoke bypass

Згідно з доповіддю Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo, Lambda Authorizers можуть бути налаштовані з використанням синтаксису IAM для надання дозволів на виклик API кінцевих точок. Це взято з документації:

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

Проблема з таким способом надання дозволів для виклику кінцевих точок полягає в тому, що "*" означає "будь-що" і більше не підтримується синтаксис regex.

Декілька прикладів:

  • Правило, таке як arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*, щоб надати кожному користувачу доступ до /dashboard/user/{username}, надасть їм доступ до інших маршрутів, таких як /admin/dashboard/createAdmin, наприклад.

Зверніть увагу, що "*" не зупиняється на розширенні з косими рисками, отже, якщо ви використовуєте "*" в api-id, наприклад, це також може вказувати на "будь-яку стадію" або "будь-який метод", якщо фінальний regex все ще дійсний. Отже, arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/* Може перевірити POST запит до тестової стадії на шляху /prod/GET/dashboard/admin, наприклад.

Вам завжди слід чітко розуміти, що ви хочете дозволити для доступу, а потім перевірити, чи можливі інші сценарії з наданими дозволами.

Для отримання додаткової інформації, окрім документації, ви можете знайти код для реалізації авторизаторів в цьому офіційному aws github.

Впровадження IAM політики

У тій же доповіді викладено факт, що якщо код використовує введення користувача для генерації IAM політик, дикий символ (та інші, такі як "." або специфічні рядки) можуть бути включені туди з метою обходу обмежень.

Шаблон публічного URL

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

Отримання ID облікового запису з публічного URL API Gateway

Так само, як і з S3 бакетами, Data Exchange та URL-адресами Lambda, можливо знайти ID облікового запису, зловживаючи aws:ResourceAccount Policy Condition Key з публічного URL API Gateway. Це робиться шляхом знаходження ID облікового запису по одному символу, зловживаючи підстановочними знаками в секції aws:ResourceAccount політики. Ця техніка також дозволяє отримувати значення тегів, якщо ви знаєте ключ тегу (є кілька стандартних цікавих).

Ви можете знайти більше інформації в оригінальному дослідженні та інструменті conditional-love для автоматизації цього експлуатації.

Support HackTricks

Last updated