AWS - API Gateway Неавторизоване перерахування

Reading time: 4 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

API Invoke bypass

Згідно з доповіддю Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo, Lambda Authorizers можуть бути налаштовані за допомогою IAM синтаксису для надання дозволів на виклик кінцевих точок API. Це взято 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"
]
}
]
}

The problem with this way to give permissions to invoke endpoints is that the "*" implies "anything" and there is no more regex syntax supported.

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

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

warning

Зверніть увагу, що "*" doesn't stop expanding with slashes, тому, якщо ви використовуєте "*" в api-id, наприклад, це також може означати "any stage" або "any method", за умови, що фінальний regex все ще валідний.
So arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*
Can validate a post request to test stage to the path /prod/GET/dashboard/admin for example.

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

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

IAM Policy Injection

In the same talk it's exposed the fact that if the code is using вхідні дані користувача to генерувати IAM-політики, wildcards (and others such as "." or specific strings) can be included in there with the goal of bypassing restrictions.

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

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

Отримати ідентифікатор облікового запису (Account ID) з публічного API Gateway URL

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

You can find more information in the original research and the tool conditional-love to automate this exploitation.

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks