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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
API Invoke bypass
Згідно з доповіддю Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo, Lambda Authorizers можуть бути налаштовані за допомогою IAM синтаксису для надання дозволів на виклик кінцевих точок API. Це взято from the docs:
{
"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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
HackTricks Cloud